feat(nsis): add an option to disable compression (#9932)

This commit is contained in:
Tony 2024-06-06 00:07:49 +08:00 committed by GitHub
parent 656a649744
commit 3ab170917e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 81 additions and 44 deletions

View File

@ -0,0 +1,5 @@
---
"tauri-utils": patch:breaking
---
Changed `NsisSettings::compression` field from `Option<NsisCompression>` to just `NsisCompression`

View File

@ -0,0 +1,6 @@
---
"tauri-utils": patch:feat
"tauri-bundler": patch:feat
---
Add an option to disable NSIS compression `bundle > nsis > compression: "none"`

View File

@ -0,0 +1,5 @@
---
"tauri-utils": patch:breaking
---
Changed `NsisConfig::compression` field from `Option<NsisCompression>` to just `NsisCompression`

View File

@ -2299,12 +2299,10 @@
},
"compression": {
"description": "Set the compression algorithm used to compress files in the installer.\n\nSee <https://nsis.sourceforge.io/Reference/SetCompressor>",
"anyOf": [
"default": "lzma",
"allOf": [
{
"$ref": "#/definitions/NsisCompression"
},
{
"type": "null"
}
]
},
@ -2367,6 +2365,13 @@
"enum": [
"lzma"
]
},
{
"description": "Disable compression",
"type": "string",
"enum": [
"none"
]
}
]
},

View File

@ -691,6 +691,44 @@ pub enum NsisCompression {
Bzip2,
/// LZMA (default) is a new compression method that gives very good compression ratios. The decompression speed is high (10-20 MB/s on a 2 GHz CPU), the compression speed is lower. The memory size that will be used for decompression is the dictionary size plus a few KBs, the default is 8 MB.
Lzma,
/// Disable compression
None,
}
impl Default for NsisCompression {
fn default() -> Self {
Self::Lzma
}
}
/// Install Modes for the NSIS installer.
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub enum NSISInstallerMode {
/// Default mode for the installer.
///
/// Install the app by default in a directory that doesn't require Administrator access.
///
/// Installer metadata will be saved under the `HKCU` registry path.
CurrentUser,
/// Install the app by default in the `Program Files` folder directory requires Administrator
/// access for the installation.
///
/// Installer metadata will be saved under the `HKLM` registry path.
PerMachine,
/// Combines both modes and allows the user to choose at install time
/// whether to install for the current user or per machine. Note that this mode
/// will require Administrator access even if the user wants to install it for the current user only.
///
/// Installer metadata will be saved under the `HKLM` or `HKCU` registry path based on the user's choice.
Both,
}
impl Default for NSISInstallerMode {
fn default() -> Self {
Self::CurrentUser
}
}
/// Configuration for the Installer bundle using NSIS.
@ -736,7 +774,8 @@ pub struct NsisConfig {
/// Set the compression algorithm used to compress files in the installer.
///
/// See <https://nsis.sourceforge.io/Reference/SetCompressor>
pub compression: Option<NsisCompression>,
#[serde(default)]
pub compression: NsisCompression,
/// A path to a `.nsh` file that contains special NSIS macros to be hooked into the
/// main installer.nsi script.
///
@ -775,36 +814,6 @@ pub struct NsisConfig {
pub installer_hooks: Option<PathBuf>,
}
/// Install Modes for the NSIS installer.
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub enum NSISInstallerMode {
/// Default mode for the installer.
///
/// Install the app by default in a directory that doesn't require Administrator access.
///
/// Installer metadata will be saved under the `HKCU` registry path.
CurrentUser,
/// Install the app by default in the `Program Files` folder directory requires Administrator
/// access for the installation.
///
/// Installer metadata will be saved under the `HKLM` registry path.
PerMachine,
/// Combines both modes and allows the user to choose at install time
/// whether to install for the current user or per machine. Note that this mode
/// will require Administrator access even if the user wants to install it for the current user only.
///
/// Installer metadata will be saved under the `HKLM` or `HKCU` registry path based on the user's choice.
Both,
}
impl Default for NSISInstallerMode {
fn default() -> Self {
Self::CurrentUser
}
}
/// Install modes for the Webview2 runtime.
/// Note that for the updater bundle [`Self::DownloadBootstrapper`] is used.
///

View File

@ -416,7 +416,7 @@ pub struct NsisSettings {
/// By default the OS language is selected, with a fallback to the first language in the `languages` array.
pub display_language_selector: bool,
/// Set compression algorithm used to compress files in the installer.
pub compression: Option<NsisCompression>,
pub compression: NsisCompression,
/// A path to a `.nsh` file that contains special NSIS macros to be hooked into the
/// main installer.nsi script.
///

View File

@ -247,10 +247,11 @@ fn build_nsis_app_installer(
data.insert(
"compression",
to_json(match &nsis.compression.unwrap_or(NsisCompression::Lzma) {
to_json(match &nsis.compression {
NsisCompression::Zlib => "zlib",
NsisCompression::Bzip2 => "bzip2",
NsisCompression::Lzma => "lzma",
NsisCompression::None => "none",
}),
);

View File

@ -1,9 +1,10 @@
Unicode true
ManifestDPIAware true
; Set the compression algorithm. Default is LZMA.
!if "{{compression}}" == ""
SetCompressor /SOLID lzma
!if "{{compression}}" == "none"
SetCompress false
!else
; Set the compression algorithm. Default is LZMA.
SetCompressor /SOLID "{{compression}}"
!endif

View File

@ -2299,12 +2299,10 @@
},
"compression": {
"description": "Set the compression algorithm used to compress files in the installer.\n\nSee <https://nsis.sourceforge.io/Reference/SetCompressor>",
"anyOf": [
"default": "lzma",
"allOf": [
{
"$ref": "#/definitions/NsisCompression"
},
{
"type": "null"
}
]
},
@ -2367,6 +2365,13 @@
"enum": [
"lzma"
]
},
{
"description": "Disable compression",
"type": "string",
"enum": [
"none"
]
}
]
},