1,6 → 1,6 |
unit ExtractorMain; |
|
{$DEFINE USE_DZIP_UNPACK} // recommended |
{$DEFINE USE_DZIP_UNPACK} |
|
interface |
|
149,7 → 149,6 |
ec: Integer; |
ar: TExecuteSFXAutoRunResult; |
GeneralBaseDir: string; |
ok: boolean; |
const |
C_Explorer_Open_Param = '"%s"'; |
C_Explorer_Select_Param = '/n,/select,"%s"'; |
160,7 → 159,6 |
Lng_AutoRunFailed = 'SFX-AutoRun fehlgeschlagen. Die entpackten Inhalte werden nun angezeigt.'; |
Lng_Unknown_Error = 'Unbekannter Fehler: Dateien sind nicht aufzufinden!'; |
Lng_SelectDir = 'Bitte wählen Sie ein Verzeichnis zum Extrahieren aus. Es wird maximal 1 Datei bzw. Ordner erstellt!'; |
Lng_WriteProtected = 'Das Verzeichnis ist nicht schreibbar! Bitte wählen Sie ein Anderes.'; |
begin |
AZipfile := ExpandUNCFileName(AZipfile); |
RenamingOldPrefix := ''; |
196,43 → 194,21 |
// Find out base dirtory |
|
GeneralBaseDir := ''; |
|
if zb.ExtractionTarget = etExtractHere then |
case zb.ExtractionTarget of |
etExtractHere: |
begin |
GeneralBaseDir := ExtractFilePath(AZipfile); // Default |
|
if not IsDirectoryWritable(GeneralBaseDir) or |
IsAtFlobbyDisk(GeneralBaseDir) then |
begin |
zb.ExtractionTarget := etDesktop; |
end; |
end; |
|
if zb.ExtractionTarget = etDesktop then |
etDesktop: |
begin |
GeneralBaseDir := GetSpecialFolderPath(CSIDL_DESKTOP); |
|
if not IsDirectoryWritable(GeneralBaseDir) or |
IsAtFlobbyDisk(GeneralBaseDir) then |
begin |
zb.ExtractionTarget := etAsk; |
end; |
end; |
|
if zb.ExtractionTarget = etAsk then |
etAsk: |
begin |
repeat |
GeneralBaseDir := MySelectDirectory(Lng_SelectDir); |
if GeneralBaseDir = '' then Exit; |
|
ok := IsDirectoryWritable(GeneralBaseDir); |
if not ok then |
begin |
MessageDlg(Lng_WriteProtected, mtWarning, [mbOk], 0); |
end; |
until ok; |
end; |
|
GeneralBaseDir := IncludeTrailingPathDelimiter(GeneralBaseDir); |
|
// Semantic scanning of ZIP to determinate the final extraction directory |
309,7 → 285,6 |
|
if ErrorForm.ErrorsAvailable then |
begin |
Hide; |
ErrorForm.ShowModal; |
end; |
|
636,7 → 611,7 |
MessageDlg(Format(Lng_PasswordWrong, [ForFile]), mtError, [mbOk], 0); |
LastTriedPassword := ''; |
end; |
ErrorForm.NewError(ForFile, SkipType); |
ErrorForm.NewError(StripBaseDir(ForFile)); |
end; |
|
end. |