mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
128 lines
3.5 KiB
ObjectPascal
128 lines
3.5 KiB
ObjectPascal
unit ZipOpt;
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, AbUtils, AbZipTyp;
|
|
|
|
type
|
|
TArchiveFormat = (
|
|
afNil,
|
|
afZip,
|
|
afZipx,
|
|
afGzip,
|
|
afBzip2,
|
|
afXzip,
|
|
afLzma,
|
|
afZstd
|
|
);
|
|
|
|
TFormatOptions = record
|
|
Level: PtrInt;
|
|
Method: PtrInt;
|
|
end;
|
|
|
|
const
|
|
ARCHIVE_FORMAT: array[TAbArchiveType] of TArchiveFormat =
|
|
(
|
|
afNil, afZip, afZip, afZip, afNil, afGzip, afGzip, afNil,
|
|
afBzip2, afBzip2, afXzip, afXzip, afLzma, afLzma, afZstd, afZstd
|
|
);
|
|
|
|
const
|
|
DefaultConfig: array[TArchiveFormat] of TFormatOptions =
|
|
(
|
|
(Level: 0; Method: 0;),
|
|
(Level: 6; Method: PtrInt(cmDeflated);),
|
|
(Level: 7; Method: PtrInt(cmXz);),
|
|
(Level: 6; Method: PtrInt(cmDeflated);),
|
|
(Level: 9; Method: PtrInt(cmBzip2);),
|
|
(Level: 7; Method: PtrInt(cmXz);),
|
|
(Level: 7; Method: PtrInt(cmLZMA);),
|
|
(Level: 11; Method: PtrInt(cmZstd);)
|
|
);
|
|
|
|
var
|
|
PluginConfig: array[TArchiveFormat] of TFormatOptions;
|
|
|
|
procedure LoadConfiguration;
|
|
procedure SaveConfiguration;
|
|
|
|
implementation
|
|
|
|
uses
|
|
TypInfo, DCClassesUtf8, Extension, ZipFunc;
|
|
|
|
procedure LoadConfiguration;
|
|
var
|
|
Ini: TIniFileEx;
|
|
Section: AnsiString;
|
|
ArchiveFormat: TArchiveFormat;
|
|
begin
|
|
try
|
|
Ini:= TIniFileEx.Create(gStartupInfo.PluginConfDir + IniFileName);
|
|
try
|
|
for ArchiveFormat:= Succ(Low(TArchiveFormat)) to High(TArchiveFormat) do
|
|
begin
|
|
Section:= Copy(GetEnumName(TypeInfo(TArchiveFormat), PtrInt(ArchiveFormat)), 3, MaxInt);
|
|
PluginConfig[ArchiveFormat].Level:= Ini.ReadInteger(Section, 'Level', DefaultConfig[ArchiveFormat].Level);
|
|
PluginConfig[ArchiveFormat].Method:= Ini.ReadInteger(Section, 'Method', DefaultConfig[ArchiveFormat].Method);
|
|
end;
|
|
gTarAutoHandle:= Ini.ReadBool('Configuration', 'TarAutoHandle', True);
|
|
// Backward compatibility
|
|
case Ini.ReadInteger('Configuration', 'DeflationOption', -1) of
|
|
IntPtr(doSuperFast): PluginConfig[afZip].Level:= 1;
|
|
IntPtr(doFast): PluginConfig[afZip].Level:= 3;
|
|
IntPtr(doNormal): PluginConfig[afZip].Level:= 6;
|
|
IntPtr(doMaximum): PluginConfig[afZip].Level:= 9;
|
|
end;
|
|
case Ini.ReadInteger('Configuration', 'CompressionMethodToUse', -1) of
|
|
IntPtr(smStored): PluginConfig[afZip].Method:= IntPtr(cmStored);
|
|
IntPtr(smDeflated): PluginConfig[afZip].Method:= IntPtr(cmDeflated);
|
|
IntPtr(smBestMethod): PluginConfig[afZip].Method:= IntPtr(cmEnhancedDeflated);
|
|
end;
|
|
finally
|
|
Ini.Free;
|
|
end;
|
|
except
|
|
// Ignore
|
|
end;
|
|
end;
|
|
|
|
procedure SaveConfiguration;
|
|
var
|
|
Ini: TIniFileEx;
|
|
Section: AnsiString;
|
|
ArchiveFormat: TArchiveFormat;
|
|
begin
|
|
try
|
|
Ini:= TIniFileEx.Create(gStartupInfo.PluginConfDir + IniFileName);
|
|
try
|
|
for ArchiveFormat:= Succ(Low(TArchiveFormat)) to High(TArchiveFormat) do
|
|
begin
|
|
Section:= Copy(GetEnumName(TypeInfo(TArchiveFormat), PtrInt(ArchiveFormat)), 3, MaxInt);
|
|
Ini.WriteInteger(Section, 'Level', PluginConfig[ArchiveFormat].Level);
|
|
Ini.WriteInteger(Section, 'Method', PluginConfig[ArchiveFormat].Method);
|
|
end;
|
|
Ini.DeleteKey('Configuration', 'DeflationOption');
|
|
Ini.DeleteKey('Configuration', 'CompressionMethodToUse');
|
|
Ini.WriteBool('Configuration', 'TarAutoHandle', gTarAutoHandle);
|
|
Ini.UpdateFile;
|
|
finally
|
|
Ini.Free;
|
|
end;
|
|
except
|
|
on E: Exception do
|
|
begin
|
|
gStartupInfo.MessageBox(PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
Move(DefaultConfig[Low(DefaultConfig)], PluginConfig[Low(PluginConfig)], SizeOf(PluginConfig));
|
|
|
|
end.
|
|
|