mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
FIX: conflicts
This commit is contained in:
commit
fc099f4704
106 changed files with 4671 additions and 3426 deletions
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
|
|
@ -11,7 +11,7 @@ concurrency:
|
|||
|
||||
jobs:
|
||||
build-mac:
|
||||
runs-on: macos-12
|
||||
runs-on: macos-13
|
||||
steps:
|
||||
- name: Install Free Pascal
|
||||
uses: alexx2000/setup-fpc@master
|
||||
|
|
@ -19,7 +19,7 @@ jobs:
|
|||
lazarus-version: "stable"
|
||||
|
||||
- name: Get Lazarus source
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: 'fpc/Lazarus'
|
||||
|
||||
|
|
@ -33,7 +33,7 @@ jobs:
|
|||
sudo sed -i -e "s|_PPCARCH_|fpc|g; s|/Developer/lazarus|/usr/local/share/lazarus|g" /etc/lazarus/environmentoptions.xml
|
||||
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
|
|
|||
8
.github/workflows/snapshots.yml
vendored
8
.github/workflows/snapshots.yml
vendored
|
|
@ -17,7 +17,7 @@ concurrency:
|
|||
|
||||
jobs:
|
||||
build-mac:
|
||||
runs-on: macos-12
|
||||
runs-on: macos-13
|
||||
steps:
|
||||
- name: Install Free Pascal
|
||||
uses: alexx2000/setup-fpc@master
|
||||
|
|
@ -25,7 +25,7 @@ jobs:
|
|||
lazarus-version: "stable"
|
||||
|
||||
- name: Get Lazarus source
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: 'fpc/Lazarus'
|
||||
|
||||
|
|
@ -39,7 +39,7 @@ jobs:
|
|||
sudo sed -i -e "s|_PPCARCH_|fpc|g; s|/Developer/lazarus|/usr/local/share/lazarus|g" /etc/lazarus/environmentoptions.xml
|
||||
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
|
@ -62,7 +62,7 @@ jobs:
|
|||
lazarus-version: "stable"
|
||||
|
||||
- name: Checkout source
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@ function FileTimeToDateTimeEx(FileTime : DCBasicTypes.TFileTimeEx) : TDateTime;
|
|||
function DateTimeToFileTime(DateTime : TDateTime) : DCBasicTypes.TFileTime;
|
||||
function DateTimeToFileTimeEx(DateTime : TDateTime) : DCBasicTypes.TFileTimeEx;
|
||||
|
||||
function FileTimeToWinFileTime(FileTime : DCBasicTypes.TFileTime) : TWinFileTime;
|
||||
function WinFileTimeToFileTimeEx(FileTime: TWinFileTime) : DCBasicTypes.TFileTimeEx;
|
||||
|
||||
{en
|
||||
Converts system specific UTC time to local time.
|
||||
}
|
||||
|
|
@ -100,6 +103,7 @@ function UnixFileTimeToDateTimeEx(UnixTime: DCBasicTypes.TFileTimeEx) : TDateTim
|
|||
{$ENDIF}
|
||||
function DateTimeToUnixFileTime(DateTime: TDateTime) : TUnixFileTime;
|
||||
function DateTimeToUnixFileTimeEx(DateTime: TDateTime) : DCBasicTypes.TFileTimeEx;
|
||||
function UnixFileTimeToFileTime(UnixTime: TUnixFileTime): DCBasicTypes.TFileTime;
|
||||
function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime;
|
||||
function UnixFileTimeToWinTime(UnixTime: TUnixFileTime): TWinFileTime;
|
||||
function WinFileTimeToUnixTime(WinTime: TWinFileTime) : TUnixFileTime;
|
||||
|
|
@ -279,6 +283,29 @@ begin
|
|||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function FileTimeToWinFileTime(FileTime: DCBasicTypes.TFileTime): TWinFileTime;
|
||||
{$IF DEFINED(MSWINDOWS)}
|
||||
begin
|
||||
Result:= TWinFileTime(FileTime)
|
||||
end;
|
||||
{$ELSEIF DEFINED(UNIX)}
|
||||
begin
|
||||
Result:= UnixFileTimeToWinTime(TUnixFileTime(FileTime));
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function WinFileTimeToFileTimeEx(FileTime: TWinFileTime): DCBasicTypes.TFileTimeEx;
|
||||
{$IF DEFINED(MSWINDOWS)}
|
||||
begin
|
||||
Result := TFileTimeEx(FileTime);
|
||||
end;
|
||||
{$ELSEIF DEFINED(UNIX)}
|
||||
begin
|
||||
Result.Sec:= Int64((FileTime - UnixWinEpoch) div 10000000);
|
||||
Result.NanoSec:= Int64((FileTime - UnixWinEpoch) mod 10000000) * 100;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function FileTimeToLocalFileTime(const FileTime: DCBasicTypes.TFileTime;
|
||||
out LocalFileTime: DCBasicTypes.TFileTime): LongBool;
|
||||
{$IFDEF MSWINDOWS}
|
||||
|
|
@ -596,6 +623,15 @@ begin
|
|||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function UnixFileTimeToFileTime(UnixTime: TUnixFileTime): DCBasicTypes.TFileTime; inline;
|
||||
begin
|
||||
{$IF DEFINED(MSWINDOWS)}
|
||||
Result:= UnixFileTimeToWinTime(UnixTime);
|
||||
{$ELSE}
|
||||
Result:= UnixTime;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime;
|
||||
begin
|
||||
Result := DateTimeToDosFileTime(UnixFileTimeToDateTime(UnixTime));
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ const
|
|||
function WinToUnixFileAttr(Attr: TFileAttrs): TFileAttrs;
|
||||
function UnixToWinFileAttr(Attr: TFileAttrs): TFileAttrs;
|
||||
function UnixToWcxFileAttr(Attr: TFileAttrs): TFileAttrs;
|
||||
function WinToWcxFileAttr(Attr: TFileAttrs): TFileAttrs;
|
||||
function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs;
|
||||
|
||||
function SingleStrToFileAttr(sAttr: String): TFileAttrs;
|
||||
|
|
@ -229,6 +230,17 @@ begin
|
|||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function WinToWcxFileAttr(Attr: TFileAttrs): TFileAttrs;
|
||||
begin
|
||||
{$IF DEFINED(UNIX)}
|
||||
Result := WinToUnixFileAttr(Attr);
|
||||
{$ELSEIF DEFINED(MSWINDOWS)}
|
||||
Result := Attr;
|
||||
{$ELSE}
|
||||
Result := 0;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs;
|
||||
begin
|
||||
Result := UnixToWinFileAttr(Attr);
|
||||
|
|
|
|||
|
|
@ -250,6 +250,7 @@ function _CreateSymLink_Old(aTargetFileName, aSymlinkFileName: UnicodeString): B
|
|||
var
|
||||
hDevice: THandle;
|
||||
lpInBuffer: PReparseDataBuffer;
|
||||
dwLastError,
|
||||
nInBufferSize,
|
||||
dwPathBufferSize: DWORD;
|
||||
wsNativeFileName: UnicodeString;
|
||||
|
|
@ -261,7 +262,11 @@ begin
|
|||
hDevice:= CreateFileW(PWideChar(aSymlinkFileName),
|
||||
GENERIC_WRITE, 0, nil, OPEN_EXISTING,
|
||||
FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OPEN_REPARSE_POINT, 0);
|
||||
if hDevice = INVALID_HANDLE_VALUE then Exit(False);
|
||||
if hDevice = INVALID_HANDLE_VALUE then
|
||||
begin
|
||||
dwLastError:= GetLastError;
|
||||
Exit(False);
|
||||
end;
|
||||
if Pos(wsLongFileNamePrefix, aTargetFileName) <> 1 then
|
||||
wsNativeFileName:= wsNativeFileNamePrefix + aTargetFileName
|
||||
else begin
|
||||
|
|
@ -288,11 +293,15 @@ begin
|
|||
0, // nOutBufferSize
|
||||
lpBytesReturned, // lpBytesReturned
|
||||
nil); // OVERLAPPED structure
|
||||
|
||||
if not Result then dwLastError:= GetLastError;
|
||||
FreeMem(lpInBuffer);
|
||||
CloseHandle(hDevice);
|
||||
finally
|
||||
if not Result then RemoveDirectoryW(PWideChar(aSymlinkFileName));
|
||||
if not Result then
|
||||
begin
|
||||
RemoveDirectoryW(PWideChar(aSymlinkFileName));
|
||||
SetLastError(dwLastError);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ copy windows\license.rtf %BUILD_PACK_DIR%\
|
|||
copy ..\src\doublecmd.ico %BUILD_PACK_DIR%\
|
||||
|
||||
rem Copy libraries
|
||||
copy windows\lib\%CPU_TARGET%\*.sfx %BUILD_DC_TMP_DIR%\
|
||||
copy windows\lib\%CPU_TARGET%\*.dll %BUILD_DC_TMP_DIR%\
|
||||
copy windows\lib\%CPU_TARGET%\winpty-agent.exe %BUILD_DC_TMP_DIR%\
|
||||
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ Source: "doublecmd\pixmaps\*"; DestDir: "{app}\pixmaps"; Flags: ignoreversion re
|
|||
Source: "doublecmd\plugins\*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
Source: "doublecmd\highlighters\*"; DestDir: "{app}\highlighters"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
Source: "doublecmd\*.sfx"; DestDir: "{app}"; Flags: skipifsourcedoesntexist
|
||||
Source: "doublecmd\*.dll"; DestDir: "{app}"; Flags: skipifsourcedoesntexist
|
||||
|
||||
[Icons]
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ copy doublecmd.help %DC_INSTALL_DIR%\
|
|||
copy doublecmd.zdli %DC_INSTALL_DIR%\
|
||||
copy pinyin.tbl %DC_INSTALL_DIR%\
|
||||
rem Copy libraries
|
||||
copy *.sfx %DC_INSTALL_DIR%\
|
||||
copy *.dll %DC_INSTALL_DIR%\
|
||||
copy winpty-agent.exe %DC_INSTALL_DIR%\
|
||||
rem Copy manifest
|
||||
|
|
|
|||
|
|
@ -338,6 +338,10 @@ msgstr "Адкрыць файл кантрольнай сумы пасля за
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "С&твараць асобны файл кантрольнай сумы для кожнага файла"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3152,7 +3156,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Канфігурацыя"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Улюбёнае"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3170,7 +3174,7 @@ msgstr "&Пазначэнне"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Сетка"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10829,6 +10833,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10949,6 +10957,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -342,6 +342,10 @@ msgstr ""
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Съз&даване на отделни проверочни сборове за всички файлове"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3248,7 +3252,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Настройка"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Предпочитани"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3266,7 +3270,7 @@ msgstr "&Избор"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Мрежа"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11306,6 +11310,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11426,6 +11434,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -377,6 +377,10 @@ msgstr ""
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Crea un fitxer por cada comprobació"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3460,7 +3464,7 @@ msgid "C&onfiguration"
|
|||
msgstr "C&onfiguració"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3480,7 +3484,7 @@ msgstr "&Selecció"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Xarxa"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11795,6 +11799,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11914,6 +11922,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -335,6 +335,10 @@ msgstr "Otevřít soubor po vytvoření kontrolního součtu"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "V&ytvořit samostatný kontrolní součet pro každý soubor"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3162,7 +3166,7 @@ msgid "C&onfiguration"
|
|||
msgstr "N&astavení"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Oblíbené"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3180,7 +3184,7 @@ msgstr "&Výběr"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Síť"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10850,6 +10854,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10970,6 +10978,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -352,6 +352,10 @@ msgstr "&Åbn kontrolsumfil efter opgaven er færdig"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Dan en &separat kontrolsumfil for hver fil"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3370,7 +3374,7 @@ msgstr "&Opsætning"
|
|||
|
||||
# In the menu bar
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Favo&ritter"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3390,7 +3394,7 @@ msgstr "&Marker"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "&Netværk"
|
||||
|
||||
# Vis
|
||||
|
|
@ -11904,6 +11908,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -12024,6 +12032,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgstr ""
|
|||
"Project-Id-Version: Double Commander 1.1.0 alpha\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-15 11:15+0300\n"
|
||||
"PO-Revision-Date: 2024-10-11 16:17+0200\n"
|
||||
"PO-Revision-Date: 2024-11-01 18:01+0100\n"
|
||||
"Last-Translator: ㋡ <braass@mail.de>\n"
|
||||
"Language-Team: Deutsch <braass@mail.de>\n"
|
||||
"Language: de\n"
|
||||
|
|
@ -334,6 +334,10 @@ msgstr "Prüfsummen-Datei öffnen, nachdem der Job beendet ist"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Einzelne Prüfsumme fü&r jede Datei erstellen"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr "Einzelne Prüfsumme für jedes &Verzeichnis erstellen"
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr "Dateiformat"
|
||||
|
|
@ -3146,7 +3150,7 @@ msgid "C&onfiguration"
|
|||
msgstr "K&onfigurieren"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "☆-&Tabs"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3164,7 +3168,7 @@ msgstr "&Markieren"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "&Netzwerk"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10811,6 +10815,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr "Finder-Tags bearbeiten ..."
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr "Gewähren Sie »Volle Festplattenzugriffsrechte« zur Unterstützung von Finder-Tags ..."
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10926,6 +10934,10 @@ msgstr "Dateiliste aktualisieren"
|
|||
msgid "Refresh"
|
||||
msgstr "Aktualisieren"
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr "Suche nach kombinierten Tags ..."
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr "Dateien suchen ..."
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgstr ""
|
|||
"Project-Id-Version: Double Commander 1.1.0 alpha\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-15 11:15+0300\n"
|
||||
"PO-Revision-Date: 2024-01-02 22:43+0200\n"
|
||||
"PO-Revision-Date: 2024-10-18 20:59+0300\n"
|
||||
"Last-Translator: Anastasios Kazakis <anastasios.kazakis@tutanota.com>\n"
|
||||
"Language-Team: Anastasios Kazakis <anastasios.kazakis@tutanota.com>\n"
|
||||
"Language: el_GR\n"
|
||||
|
|
@ -12,7 +12,7 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Native-Language: ελληνικά\n"
|
||||
"X-Generator: Poedit 3.4.1\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
"X-Language: el_GR\n"
|
||||
"X-Source-Language: el\n"
|
||||
"X-Poedit-SourceCharset: ISO-8859-7\n"
|
||||
|
|
@ -346,6 +346,10 @@ msgstr "Άνοιγμα αρχείου αθροίσματος ελέγχου με
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Δημιουργία ξεχωριστού αρχείου αθροίσματος ελέγχου για κάθε αρχείο"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr "Μορφή Αρχείου"
|
||||
|
|
@ -2845,11 +2849,11 @@ msgstr "Εμφάνιση Κρυφών Αρχείων/Αρχείων Συστήμ
|
|||
|
||||
#: tfrmmain.actshowtabslist.caption
|
||||
msgid "Show Tabs List"
|
||||
msgstr ""
|
||||
msgstr "Εμφάνιση Λίστας Καρτελών"
|
||||
|
||||
#: tfrmmain.actshowtabslist.hint
|
||||
msgid "Show list of all open tabs"
|
||||
msgstr ""
|
||||
msgstr "Εμφάνιση λίστας όλων των ανοικτών καρτελών"
|
||||
|
||||
#: tfrmmain.actsortbyattr.caption
|
||||
msgid "Sort by &Attributes"
|
||||
|
|
@ -2915,7 +2919,7 @@ msgstr "Προβολή Μικρογραφιών"
|
|||
|
||||
#: tfrmmain.acttogglefullscreenconsole.caption
|
||||
msgid "Toggle fullscreen mode console"
|
||||
msgstr "Εναλλαγή σε τερματικό πλήρους οθόνης"
|
||||
msgstr "Εναλλαγή σε λειτουργία τερματικού πλήρους οθόνης"
|
||||
|
||||
#: tfrmmain.acttransferleft.caption
|
||||
msgid "Transfer dir under cursor to left window"
|
||||
|
|
@ -3207,7 +3211,7 @@ msgid "C&onfiguration"
|
|||
msgstr "Διαμόρφωση"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Αγαπημένα"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3225,7 +3229,7 @@ msgstr "Επιλογή"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Δίκτυο"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -4007,7 +4011,7 @@ msgstr "Χρήση ονόματος αρχείου χωρίς επέκταση
|
|||
|
||||
#: tfrmoptionsarchivers.chkhide.caption
|
||||
msgid "Show as normal files"
|
||||
msgstr ""
|
||||
msgstr "Εμφάνιση σαν κανονικά αρχεία"
|
||||
|
||||
#: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption
|
||||
msgid "Uni&x file attributes"
|
||||
|
|
@ -7093,7 +7097,7 @@ msgstr "Επιλογή"
|
|||
|
||||
#: tfrmoptionsmouse.lblmousemode.caption
|
||||
msgid "&Mode:"
|
||||
msgstr "Λειτουργία:"
|
||||
msgstr "Τρόπος Λειτουργίας:"
|
||||
|
||||
#: tfrmoptionsmouse.rbdoubleclick.caption
|
||||
msgid "Double click"
|
||||
|
|
@ -11030,17 +11034,21 @@ msgstr "Εισάγετε νέα προσαρμοσμένα χρώματα στη
|
|||
#: ulng.rsmenumacosaddfindertag
|
||||
#, object-pascal-format
|
||||
msgid "Add \"%s\""
|
||||
msgstr ""
|
||||
msgstr "Προσθήκη \"%s\""
|
||||
|
||||
#: ulng.rsmenumacoseditfindertags
|
||||
msgctxt "ulng.rsmenumacoseditfindertags"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr "Επεξεργασία Ετικετών Εφαρμογής Εύρεσης..."
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
msgstr ""
|
||||
msgstr "Αφαίρεση \"%s\""
|
||||
|
||||
#: ulng.rsmenumacosshare
|
||||
msgid "Share..."
|
||||
|
|
@ -11049,41 +11057,37 @@ msgstr "Διαμοιρασμός..."
|
|||
#: ulng.rsmfstbiairdroptips
|
||||
msgctxt "ulng.rsmfstbiairdroptips"
|
||||
msgid "AirDrop"
|
||||
msgstr ""
|
||||
msgstr "AirDrop"
|
||||
|
||||
#: ulng.rsmfstbiairdroptitle
|
||||
msgctxt "ulng.rsmfstbiairdroptitle"
|
||||
msgid "AirDrop"
|
||||
msgstr ""
|
||||
msgstr "AirDrop"
|
||||
|
||||
#: ulng.rsmfstbicommandmenudirectoryhotlist
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbicommandmenudirectoryhotlist"
|
||||
msgid "Directory Hotlist"
|
||||
msgstr "Κατάλογος Hotlist"
|
||||
|
||||
#: ulng.rsmfstbicommandmenufavoritetabs
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbicommandmenufavoritetabs"
|
||||
msgid "Favorite Tabs"
|
||||
msgstr "Αγαπημένες Καρτέλες"
|
||||
|
||||
#: ulng.rsmfstbicommandmenuquicklook
|
||||
msgid "macOS QuickLook"
|
||||
msgstr ""
|
||||
msgstr "macOS QuickLook"
|
||||
|
||||
#: ulng.rsmfstbicommandtitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbicommandtitle"
|
||||
msgid "Command"
|
||||
msgstr "Εντολή"
|
||||
|
||||
#: ulng.rsmfstbicomparetips
|
||||
msgid "Compare by Contents..."
|
||||
msgstr ""
|
||||
msgstr "Σύγκριση ανά Περιεχόμενο..."
|
||||
|
||||
#: ulng.rsmfstbicomparetitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbicomparetitle"
|
||||
msgid "Compare"
|
||||
msgstr "Σύγκριση"
|
||||
|
|
@ -11091,147 +11095,148 @@ msgstr "Σύγκριση"
|
|||
#: ulng.rsmfstbieditfindertagtips
|
||||
msgctxt "ulng.rsmfstbieditfindertagtips"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
msgstr "Επεξεργασία Ετικετών Εφαρμογής Εύρεσης..."
|
||||
|
||||
#: ulng.rsmfstbieditfindertagtitle
|
||||
msgid "EditTag"
|
||||
msgstr ""
|
||||
msgstr "ΕπεξεργασίαΕτικέτας"
|
||||
|
||||
#: ulng.rsmfstbiedittips
|
||||
msgid "Edit..."
|
||||
msgstr ""
|
||||
msgstr "Επεξεργασία..."
|
||||
|
||||
#: ulng.rsmfstbiedittitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbiedittitle"
|
||||
msgid "Edit"
|
||||
msgstr "Επεξεργασία"
|
||||
|
||||
#: ulng.rsmfstbifinderrevealtips
|
||||
msgid "Reveal in Finder"
|
||||
msgstr ""
|
||||
msgstr "Αποκάλυψη στην Εφαρμογή Αναζήτησης"
|
||||
|
||||
#: ulng.rsmfstbifinderrevealtitle
|
||||
msgid "Finder"
|
||||
msgstr ""
|
||||
msgstr "Εφαρμογής Εύρεσης"
|
||||
|
||||
#: ulng.rsmfstbigotips
|
||||
msgctxt "ulng.rsmfstbigotips"
|
||||
msgid "Go"
|
||||
msgstr ""
|
||||
msgstr "Μετάβαση"
|
||||
|
||||
#: ulng.rsmfstbigotitle
|
||||
msgctxt "ulng.rsmfstbigotitle"
|
||||
msgid "Go"
|
||||
msgstr ""
|
||||
msgstr "Μετάβαση"
|
||||
|
||||
#: ulng.rsmfstbihorzsplittips
|
||||
msgid "Toggle Horizontal Split Mode"
|
||||
msgstr ""
|
||||
msgstr "Εναλλαγή σε Λειτουργία Οριζοντίου Διαχωρισμού"
|
||||
|
||||
#: ulng.rsmfstbihorzsplittitle
|
||||
msgid "HorzSplit"
|
||||
msgstr ""
|
||||
msgstr "HorzSplit"
|
||||
|
||||
#: ulng.rsmfstbiprivilegetips
|
||||
msgid "As a file manager, Double Command requires full disk access permissions. Clicking this button will pop up the macOS system settings page. Please add \"Double Commander.app\" to the \"Full Disk Access\" list to complete the authorization."
|
||||
msgstr ""
|
||||
msgstr "Σαν διαχειριστής αρχείων, ο Double Commander απαιτεί πλήρεις άδειες δίσκου. Πατώντας αυτό το πλήκτρο θα εμφανιστεί σαν αναδυόμενο η καρτέλα ρυθμίσεων του συστήματος macOS. Παρακαλώ προσθέστε \"Double Commander.app\" στην λίστα \"Full Disk Access\" για ολοκλήρωση της αδειοδότησης."
|
||||
|
||||
#: ulng.rsmfstbiprivilegetitle
|
||||
msgid "Privilege"
|
||||
msgstr ""
|
||||
msgstr "Προνόμιο"
|
||||
|
||||
#: ulng.rsmfstbiquicklooktips
|
||||
msgid "macOS Quick Look Panel"
|
||||
msgstr ""
|
||||
msgstr "Καρτέλα macOS Quick Look"
|
||||
|
||||
#: ulng.rsmfstbiquicklooktitle
|
||||
msgid "QuickLook"
|
||||
msgstr ""
|
||||
msgstr "QuickLook"
|
||||
|
||||
#: ulng.rsmfstbirefreshtips
|
||||
msgid "Refresh File List"
|
||||
msgstr ""
|
||||
msgstr "Ανανέωση Λίστας Αρχείων"
|
||||
|
||||
#: ulng.rsmfstbirefreshtitle
|
||||
msgid "Refresh"
|
||||
msgstr "Ανανέωση"
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
msgstr "Αναζήτηση Αρχείων..."
|
||||
|
||||
#: ulng.rsmfstbisearchtitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbisearchtitle"
|
||||
msgid "Search"
|
||||
msgstr "Αναζήτηση"
|
||||
|
||||
#: ulng.rsmfstbisharetitle
|
||||
msgid "Share"
|
||||
msgstr ""
|
||||
msgstr "Διαμοιρασμός"
|
||||
|
||||
#: ulng.rsmfstbishowbrieftitle
|
||||
msgid "as Brief"
|
||||
msgstr ""
|
||||
msgstr "Σύντομη Περιγραφή"
|
||||
|
||||
#: ulng.rsmfstbishowfulltitle
|
||||
msgid "as Full"
|
||||
msgstr ""
|
||||
msgstr "Πλήρης Περιγραφή"
|
||||
|
||||
#: ulng.rsmfstbishowinfotips
|
||||
msgid "Show Info in Finder"
|
||||
msgstr ""
|
||||
msgstr "Εμφάνιση Πληροφοριών στην Εφαρμογή Αναζήτησης"
|
||||
|
||||
#: ulng.rsmfstbishowinfotitle
|
||||
msgid "ShowInfo"
|
||||
msgstr ""
|
||||
msgstr "ΕμφάνισηΠληροφοριών"
|
||||
|
||||
#: ulng.rsmfstbishowmodetips
|
||||
msgid "Show as Brief, Full or Thumbnails"
|
||||
msgstr ""
|
||||
msgstr "Εμφάνιση Σύντομης, Πλήρους Περιγραφής ή σε Μικρογραφίες"
|
||||
|
||||
#: ulng.rsmfstbishowmodetitle
|
||||
msgid "ShowMode"
|
||||
msgstr ""
|
||||
msgstr "ΕμφάνισηΤρόπουΛειτουργίας"
|
||||
|
||||
#: ulng.rsmfstbishowthumbnailstitle
|
||||
msgid "as Thumbnails"
|
||||
msgstr ""
|
||||
msgstr "σαν Μικρογραφίες"
|
||||
|
||||
#: ulng.rsmfstbiswappanelstips
|
||||
msgid "Swap Panels"
|
||||
msgstr ""
|
||||
msgstr "Ανταλλαγή Καρτελών"
|
||||
|
||||
#: ulng.rsmfstbiswappanelstitle
|
||||
msgid "SwapPanels"
|
||||
msgstr ""
|
||||
msgstr "ΑνταλλαγήΚαρτελών"
|
||||
|
||||
#: ulng.rsmfstbisynctips
|
||||
msgid "Synchronize Dirs..."
|
||||
msgstr ""
|
||||
msgstr "Συγχρονισμός Καταλόγων..."
|
||||
|
||||
#: ulng.rsmfstbisynctitle
|
||||
msgid "Sync"
|
||||
msgstr ""
|
||||
msgstr "Συγχρονισμός"
|
||||
|
||||
#: ulng.rsmfstbiterminaltips
|
||||
msgid "Open in Terminal"
|
||||
msgstr ""
|
||||
msgstr "Άνοιγμα σε Τερματικό"
|
||||
|
||||
#: ulng.rsmfstbiterminaltitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbiterminaltitle"
|
||||
msgid "Terminal"
|
||||
msgstr "Τερματικό"
|
||||
|
||||
#: ulng.rsmfstbitreeviewtips
|
||||
msgid "Show Tree View Panel"
|
||||
msgstr ""
|
||||
msgstr "Εμφάνιση Καρτέλας Προβολής Δέντρου"
|
||||
|
||||
#: ulng.rsmfstbitreeviewtitle
|
||||
msgid "TreeView"
|
||||
msgstr ""
|
||||
msgstr "ΠροβολήΔέντρου"
|
||||
|
||||
#: ulng.rsmnuactions
|
||||
msgctxt "ulng.rsmnuactions"
|
||||
|
|
@ -11278,7 +11283,7 @@ msgstr "Νέο"
|
|||
|
||||
#: ulng.rsmnunewwindow
|
||||
msgid "New Window"
|
||||
msgstr ""
|
||||
msgstr "Νέο Παράθυρο"
|
||||
|
||||
#: ulng.rsmnunomedia
|
||||
msgid "No media available"
|
||||
|
|
@ -13112,7 +13117,7 @@ msgstr "Για να αλλάξετε τη τρέχουσα διαμόρφωση
|
|||
|
||||
#: ulng.rsoptarchiveradditonalcmd
|
||||
msgid "Mode dependent, additional command"
|
||||
msgstr "Εξαρτώμενο από την κατάσταση, επιπρόσθετη εντολή"
|
||||
msgstr "Εξαρτώμενη από τον τρόπο λειτουργίας κατάσταση, επιπρόσθετη εντολή"
|
||||
|
||||
#: ulng.rsoptarchiveraddonlynotempty
|
||||
msgid "Add if it is non-empty"
|
||||
|
|
|
|||
|
|
@ -334,6 +334,10 @@ msgstr "Abrir la suma de verificación tras completar el trabajo"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "C&rear suma de verificación por cada archivo"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3176,7 +3180,7 @@ msgid "C&onfiguration"
|
|||
msgstr "C&onfiguración"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Pestañas favoritas"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3194,7 +3198,7 @@ msgstr "&Seleccionar"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Red"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10943,6 +10947,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11063,6 +11071,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -384,6 +384,10 @@ msgstr "Ouvre le fichier de signature à la fin de la tâche"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Créer une signature séparée pour chaque fichier"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr "Format de fichier"
|
||||
|
|
@ -3268,7 +3272,7 @@ msgid "C&onfiguration"
|
|||
msgstr "Confi&guration"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Onglets favoris"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3286,7 +3290,7 @@ msgstr "&Sélection"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Réseau"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11151,6 +11155,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11271,6 +11279,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -373,6 +373,10 @@ msgstr "Otvorite datoteku provjere nakon završetka zadatka"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "&Učini posebnu datoteku zbirne provjere za svaku datoteku"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3400,8 +3404,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Postavke"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION"
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Omiljeno"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3420,7 +3423,7 @@ msgstr "Oznaka&"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Mreža"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11512,6 +11515,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11632,6 +11639,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -333,6 +333,10 @@ msgstr "Az ellenőrzőösszeg-fájl megnyitása amikor kész"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "&Külön MD5/SHA1 készítése fájlonként"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr "Fájl &formátum"
|
||||
|
|
@ -3146,7 +3150,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Beállítások"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "&Kedvencek"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3164,7 +3168,7 @@ msgstr "&Megjelölés"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Hálózat"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10811,6 +10815,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10931,6 +10939,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -341,6 +341,10 @@ msgstr "作業完了後にチェックサムファイルを開く"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "ファイルごとに個別のチェックサム ファイルを作成(&r)"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3216,7 +3220,7 @@ msgid "C&onfiguration"
|
|||
msgstr "構成設定(&o)"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "お気に入り"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3234,7 +3238,7 @@ msgstr "マーク(&M)"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "ネットワーク(&N)"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11068,6 +11072,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11188,6 +11196,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgstr ""
|
|||
"Project-Id-Version: Double Commander 1.1.0 alpha\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-15 11:15+0300\n"
|
||||
"PO-Revision-Date: 2024-10-08 05:02+0900\n"
|
||||
"PO-Revision-Date: 2024-10-16 04:48+0900\n"
|
||||
"Last-Translator: VenusGirl: venusgirl@outlook.com/\n"
|
||||
"Language-Team: 비너스걸: https://venusgirls.tistory.com/\n"
|
||||
"Language: ko\n"
|
||||
|
|
@ -333,6 +333,10 @@ msgstr "작업 완료 후 체크섬 파일 열기"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "각 파일에 대해 별도의 체크섬 파일 생성(&R)"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr "파일 형식(&F)"
|
||||
|
|
@ -3145,7 +3149,7 @@ msgid "C&onfiguration"
|
|||
msgstr "구성(&O)"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "즐겨찾기"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3163,7 +3167,7 @@ msgstr "선택(&M)"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "네트워크"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10804,17 +10808,21 @@ msgstr "새 사용자 지정 열 이름 입력"
|
|||
#: ulng.rsmenumacosaddfindertag
|
||||
#, object-pascal-format
|
||||
msgid "Add \"%s\""
|
||||
msgstr ""
|
||||
msgstr "\"%s\" 추가"
|
||||
|
||||
#: ulng.rsmenumacoseditfindertags
|
||||
msgctxt "ulng.rsmenumacoseditfindertags"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr "파인더 태그 편집..."
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
msgstr ""
|
||||
msgstr "\"%s\" 제거"
|
||||
|
||||
#: ulng.rsmenumacosshare
|
||||
msgid "Share..."
|
||||
|
|
@ -10865,11 +10873,11 @@ msgstr "비교"
|
|||
#: ulng.rsmfstbieditfindertagtips
|
||||
msgctxt "ulng.rsmfstbieditfindertagtips"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
msgstr "파인더 태그 편집..."
|
||||
|
||||
#: ulng.rsmfstbieditfindertagtitle
|
||||
msgid "EditTag"
|
||||
msgstr ""
|
||||
msgstr "태그 편집"
|
||||
|
||||
#: ulng.rsmfstbiedittips
|
||||
msgid "Edit..."
|
||||
|
|
@ -10931,6 +10939,10 @@ msgstr "파일 목록 새로 고침"
|
|||
msgid "Refresh"
|
||||
msgstr "새로 고침"
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr "파일 검색..."
|
||||
|
|
@ -14242,5 +14254,5 @@ msgstr "교체가 이루어지지 않았습니다."
|
|||
#: umaincommands.rsfavoritetabs_setupnotexist
|
||||
#, object-pascal-format
|
||||
msgid "No setup named \"%s\""
|
||||
msgstr "\"%s\"라는 설정이 없습니다"
|
||||
msgstr "\"%s\"라는 이름의 설정 없음"
|
||||
|
||||
|
|
|
|||
|
|
@ -344,6 +344,10 @@ msgstr "Åpn kontrollsumfil etter at jobb er utført"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "&Opprett separat kontrollsumfil for hver fil"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3234,7 +3238,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Oppsett"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Favo&ritter"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3252,7 +3256,7 @@ msgstr "&Markér"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Nettverk"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11335,6 +11339,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11455,6 +11463,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -333,6 +333,10 @@ msgstr "Open checksum-bestand nadat de taak voltooid is"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Maak aparte checksum aan voor elk bestand"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3159,7 +3163,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Instellingen"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Favorieten"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3177,7 +3181,7 @@ msgstr "&Markeren"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Netwerk"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10847,6 +10851,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10967,6 +10975,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -344,6 +344,10 @@ msgstr "Opn kontrollsumfil etter at jobb er utført"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "&Opprett separat kontrollsumfil for kvar fil"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3234,7 +3238,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Oppsett"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "&Favorittar"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3252,7 +3256,7 @@ msgstr "&Markér"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "&Nettverk"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11335,6 +11339,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11455,6 +11463,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -332,6 +332,10 @@ msgstr "Otwórz plik sumy kontrolnej po zakończeniu pracy"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Dla każdego pliku utwó&rz oddzielny plik sumy kontrolnej"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr "&Format pliku"
|
||||
|
|
@ -3137,7 +3141,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Konfiguracja"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "&Ulubione"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3155,7 +3159,7 @@ msgstr "Zaz&nacz"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "&Sieć"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10776,6 +10780,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10896,6 +10904,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -331,6 +331,10 @@ msgstr ""
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3143,7 +3147,7 @@ msgid "C&onfiguration"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3161,7 +3165,7 @@ msgstr ""
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10794,6 +10798,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10909,6 +10917,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -344,6 +344,10 @@ msgstr "Abrir ficheiro checksum após terminar a tarefa"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "C&riar ficheiro checksum separado para cada ficheiro"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3234,7 +3238,7 @@ msgid "C&onfiguration"
|
|||
msgstr "C&onfiguração"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Favoritos"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3252,7 +3256,7 @@ msgstr "&Marcar"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Rede"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11097,6 +11101,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11217,6 +11225,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -343,6 +343,10 @@ msgstr "Abrir arq checksum após trabalho concluído."
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "C&riar arquivo checksum separado para cada arquivo."
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3265,7 +3269,7 @@ msgid "C&onfiguration"
|
|||
msgstr "C&onfiguração"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Favoritos"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3283,7 +3287,7 @@ msgstr "&Marcar"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Rede"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11264,6 +11268,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11384,6 +11392,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -344,6 +344,10 @@ msgstr "Deschide fișierul sumă de control după ce se termină activitatea"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "C&reează sume de control separate pentru fiecare fișier"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3229,7 +3233,7 @@ msgid "C&onfiguration"
|
|||
msgstr "C&onfigurare"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3247,7 +3251,7 @@ msgstr "&Marchează"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Rețea"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11134,6 +11138,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11253,6 +11261,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Double Commander 1.1.0 alpha\n"
|
||||
"POT-Creation-Date: 2023-12-31 21:15+0300\n"
|
||||
"PO-Revision-Date: 2024-01-05 00:03+0300\n"
|
||||
"POT-Creation-Date: 2024-10-11 21:15+0300\n"
|
||||
"PO-Revision-Date: 2024-10-14 00:03+0300\n"
|
||||
"Last-Translator: Alexander Koblov <alexx2000@mail.ru>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: ru\n"
|
||||
|
|
@ -339,6 +339,10 @@ msgstr "Открыть файл контрольной суммы после р
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Д&ля каждого файла создать отдельный файл контрольной суммы"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr "Для каждого &каталога создать отдельный файл контрольной суммы"
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr "&Формат файла"
|
||||
|
|
@ -3199,7 +3203,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Настройки"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Избранное"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3217,7 +3221,7 @@ msgstr "&Выделение"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Сеть"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -3999,7 +4003,7 @@ msgstr "Использовать имя архива без расширения
|
|||
|
||||
#: tfrmoptionsarchivers.chkhide.caption
|
||||
msgid "Show as normal files"
|
||||
msgstr ""
|
||||
msgstr "Показывать как нормальные файлы"
|
||||
|
||||
#: tfrmoptionsarchivers.ckbarchiverunixfileattributes.caption
|
||||
msgid "Uni&x file attributes"
|
||||
|
|
@ -10302,27 +10306,27 @@ msgstr "Тб"
|
|||
|
||||
#: ulng.rsdefaultsuffixdroppedtext
|
||||
msgid "_DroppedText"
|
||||
msgstr ""
|
||||
msgstr "_DroppedText"
|
||||
|
||||
#: ulng.rsdefaultsuffixdroppedtexthtmlfilename
|
||||
msgid "_DroppedHTMLtext"
|
||||
msgstr ""
|
||||
msgstr "_DroppedText"
|
||||
|
||||
#: ulng.rsdefaultsuffixdroppedtextrichtextfilename
|
||||
msgid "_DroppedRichtext"
|
||||
msgstr ""
|
||||
msgstr "_DroppedText"
|
||||
|
||||
#: ulng.rsdefaultsuffixdroppedtextsimplefilename
|
||||
msgid "_DroppedSimpleText"
|
||||
msgstr ""
|
||||
msgstr "_DroppedText"
|
||||
|
||||
#: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename
|
||||
msgid "_DroppedUnicodeUTF16text"
|
||||
msgstr "_DroppedUTF16text"
|
||||
msgstr "_DroppedTextUTF16"
|
||||
|
||||
#: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename
|
||||
msgid "_DroppedUnicodeUTF8text"
|
||||
msgstr "_DroppedUTF8text"
|
||||
msgstr "_DroppedTextUTF8"
|
||||
|
||||
#: ulng.rsdiffadds
|
||||
msgid " Adds: "
|
||||
|
|
@ -11005,7 +11009,7 @@ msgstr "По имени команды;По горячим клавишам (г
|
|||
|
||||
#: ulng.rsimporttoolbarproblem
|
||||
msgid "Cannot find reference to default bar file"
|
||||
msgstr "Не удалось найти ссылку на файл панели инструментов по умолчанию"
|
||||
msgstr "Не удалось найти файл панели инструментов по умолчанию"
|
||||
|
||||
#: ulng.rslegacydisplaysizesinglelettergiga
|
||||
msgid "G"
|
||||
|
|
@ -11063,17 +11067,21 @@ msgstr "Введите имя нового набора колонок"
|
|||
#: ulng.rsmenumacosaddfindertag
|
||||
#, object-pascal-format
|
||||
msgid "Add \"%s\""
|
||||
msgstr ""
|
||||
msgstr "Добавить \"%s\""
|
||||
|
||||
#: ulng.rsmenumacoseditfindertags
|
||||
msgctxt "ulng.rsmenumacoseditfindertags"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr "Изменить теги Finder..."
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
msgstr ""
|
||||
msgstr "Удалить \"%s\""
|
||||
|
||||
#: ulng.rsmenumacosshare
|
||||
msgid "Share..."
|
||||
|
|
@ -11090,33 +11098,29 @@ msgid "AirDrop"
|
|||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbicommandmenudirectoryhotlist
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbicommandmenudirectoryhotlist"
|
||||
msgid "Directory Hotlist"
|
||||
msgstr "Избранные каталоги"
|
||||
|
||||
#: ulng.rsmfstbicommandmenufavoritetabs
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbicommandmenufavoritetabs"
|
||||
msgid "Favorite Tabs"
|
||||
msgstr "Избранные вкладки"
|
||||
|
||||
#: ulng.rsmfstbicommandmenuquicklook
|
||||
msgid "macOS QuickLook"
|
||||
msgstr ""
|
||||
msgstr "Быстрый просмотр macOS"
|
||||
|
||||
#: ulng.rsmfstbicommandtitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbicommandtitle"
|
||||
msgid "Command"
|
||||
msgstr "Команда"
|
||||
|
||||
#: ulng.rsmfstbicomparetips
|
||||
msgid "Compare by Contents..."
|
||||
msgstr ""
|
||||
msgstr "Сравнить по содержимому..."
|
||||
|
||||
#: ulng.rsmfstbicomparetitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbicomparetitle"
|
||||
msgid "Compare"
|
||||
msgstr "Сравнить"
|
||||
|
|
@ -11124,25 +11128,24 @@ msgstr "Сравнить"
|
|||
#: ulng.rsmfstbieditfindertagtips
|
||||
msgctxt "ulng.rsmfstbieditfindertagtips"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
msgstr "Изменить теги Finder..."
|
||||
|
||||
#: ulng.rsmfstbieditfindertagtitle
|
||||
msgid "EditTag"
|
||||
msgstr ""
|
||||
msgstr "Изменить тег"
|
||||
|
||||
#: ulng.rsmfstbiedittips
|
||||
msgid "Edit..."
|
||||
msgstr ""
|
||||
msgstr "Правка..."
|
||||
|
||||
#: ulng.rsmfstbiedittitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbiedittitle"
|
||||
msgid "Edit"
|
||||
msgstr "Правка"
|
||||
|
||||
#: ulng.rsmfstbifinderrevealtips
|
||||
msgid "Reveal in Finder"
|
||||
msgstr ""
|
||||
msgstr "Открыть в Finder"
|
||||
|
||||
#: ulng.rsmfstbifinderrevealtitle
|
||||
msgid "Finder"
|
||||
|
|
@ -11151,120 +11154,122 @@ msgstr ""
|
|||
#: ulng.rsmfstbigotips
|
||||
msgctxt "ulng.rsmfstbigotips"
|
||||
msgid "Go"
|
||||
msgstr ""
|
||||
msgstr "Перейти в"
|
||||
|
||||
#: ulng.rsmfstbigotitle
|
||||
msgctxt "ulng.rsmfstbigotitle"
|
||||
msgid "Go"
|
||||
msgstr ""
|
||||
msgstr "Перейти в"
|
||||
|
||||
#: ulng.rsmfstbihorzsplittips
|
||||
msgid "Toggle Horizontal Split Mode"
|
||||
msgstr ""
|
||||
msgstr "Переключить режим расположения панелей (вертикально/горизонтально)"
|
||||
|
||||
#: ulng.rsmfstbihorzsplittitle
|
||||
msgid "HorzSplit"
|
||||
msgstr ""
|
||||
msgstr "Горизонтальное разделение"
|
||||
|
||||
#: ulng.rsmfstbiprivilegetips
|
||||
msgid "As a file manager, Double Command requires full disk access permissions. Clicking this button will pop up the macOS system settings page. Please add \"Double Commander.app\" to the \"Full Disk Access\" list to complete the authorization."
|
||||
msgstr ""
|
||||
msgstr "Как файловый менеджер, Double Commander требует разрешения на полный доступ к диску. Нажатие этой кнопки откроет страницу системных настроек macOS. Пожалуйста, добавьте \"Double Commande.app\" в список \"Полный доступ к диску\", чтобы завершить авторизацию."
|
||||
|
||||
#: ulng.rsmfstbiprivilegetitle
|
||||
msgid "Privilege"
|
||||
msgstr ""
|
||||
msgstr "Привилегия"
|
||||
|
||||
#: ulng.rsmfstbiquicklooktips
|
||||
msgid "macOS Quick Look Panel"
|
||||
msgstr ""
|
||||
msgstr "Панель быстрого просмотра macOS"
|
||||
|
||||
#: ulng.rsmfstbiquicklooktitle
|
||||
msgid "QuickLook"
|
||||
msgstr ""
|
||||
msgstr "Быстрый просмотр"
|
||||
|
||||
#: ulng.rsmfstbirefreshtips
|
||||
msgid "Refresh File List"
|
||||
msgstr ""
|
||||
msgstr "Обновить список файлов"
|
||||
|
||||
#: ulng.rsmfstbirefreshtitle
|
||||
msgid "Refresh"
|
||||
msgstr "Обновить"
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
msgstr "Поиск файлов..."
|
||||
|
||||
#: ulng.rsmfstbisearchtitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbisearchtitle"
|
||||
msgid "Search"
|
||||
msgstr "Найти..."
|
||||
msgstr "Поиск"
|
||||
|
||||
#: ulng.rsmfstbisharetitle
|
||||
msgid "Share"
|
||||
msgstr ""
|
||||
msgstr "Поделиться"
|
||||
|
||||
#: ulng.rsmfstbishowbrieftitle
|
||||
msgid "as Brief"
|
||||
msgstr ""
|
||||
msgstr "Краткий"
|
||||
|
||||
#: ulng.rsmfstbishowfulltitle
|
||||
msgid "as Full"
|
||||
msgstr ""
|
||||
msgstr "Подробный"
|
||||
|
||||
#: ulng.rsmfstbishowinfotips
|
||||
msgid "Show Info in Finder"
|
||||
msgstr ""
|
||||
msgstr "Показать информацию о файле в Finder"
|
||||
|
||||
#: ulng.rsmfstbishowinfotitle
|
||||
msgid "ShowInfo"
|
||||
msgstr ""
|
||||
msgstr "Показать информацию"
|
||||
|
||||
#: ulng.rsmfstbishowmodetips
|
||||
msgid "Show as Brief, Full or Thumbnails"
|
||||
msgstr ""
|
||||
msgstr "Показать в кратком виде, в подробном виде или в виде эскизов"
|
||||
|
||||
#: ulng.rsmfstbishowmodetitle
|
||||
msgid "ShowMode"
|
||||
msgstr ""
|
||||
msgstr "Режим отображения"
|
||||
|
||||
#: ulng.rsmfstbishowthumbnailstitle
|
||||
msgid "as Thumbnails"
|
||||
msgstr ""
|
||||
msgstr "Эскизы"
|
||||
|
||||
#: ulng.rsmfstbiswappanelstips
|
||||
msgid "Swap Panels"
|
||||
msgstr ""
|
||||
msgstr "Поменять файловые панели местами"
|
||||
|
||||
#: ulng.rsmfstbiswappanelstitle
|
||||
msgid "SwapPanels"
|
||||
msgstr ""
|
||||
msgstr "Поменять панели местами"
|
||||
|
||||
#: ulng.rsmfstbisynctips
|
||||
msgid "Synchronize Dirs..."
|
||||
msgstr ""
|
||||
msgstr "Синхронизировать каталоги..."
|
||||
|
||||
#: ulng.rsmfstbisynctitle
|
||||
msgid "Sync"
|
||||
msgstr ""
|
||||
msgstr "Синхронизация"
|
||||
|
||||
#: ulng.rsmfstbiterminaltips
|
||||
msgid "Open in Terminal"
|
||||
msgstr ""
|
||||
msgstr "Открыть в терминале"
|
||||
|
||||
#: ulng.rsmfstbiterminaltitle
|
||||
#, fuzzy
|
||||
msgctxt "ulng.rsmfstbiterminaltitle"
|
||||
msgid "Terminal"
|
||||
msgstr "Терминал"
|
||||
|
||||
#: ulng.rsmfstbitreeviewtips
|
||||
msgid "Show Tree View Panel"
|
||||
msgstr ""
|
||||
msgstr "Показать панель с деревом каталогов"
|
||||
|
||||
#: ulng.rsmfstbitreeviewtitle
|
||||
msgid "TreeView"
|
||||
msgstr ""
|
||||
msgstr "Дерево каталогов"
|
||||
|
||||
#: ulng.rsmnuactions
|
||||
msgctxt "ulng.rsmnuactions"
|
||||
|
|
|
|||
|
|
@ -333,6 +333,10 @@ msgstr "Otvoriť súbor s kontrolným súčtom po dokončení"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Vytvoriť samostatný kontrolný súčet pre každý súbor"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr "Formát súboru"
|
||||
|
|
@ -3145,7 +3149,7 @@ msgid "C&onfiguration"
|
|||
msgstr "Kon&figurácia"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Obľúbené"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3163,7 +3167,7 @@ msgstr "&Označiť"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "S&ieť"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10810,6 +10814,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10927,6 +10935,10 @@ msgstr "Obnoviť zoznam súborov"
|
|||
msgid "Refresh"
|
||||
msgstr "Obnoviť"
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr "Hľadať súbory..."
|
||||
|
|
|
|||
|
|
@ -340,6 +340,10 @@ msgstr "Po koncu izračunavanja odpri datoteko nadzorne vsote"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Za vsako datoteko &ustvari ločeno datoteko nadzorne vsote"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3153,7 +3157,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Nastavitve"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Priljubljeno"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3171,7 +3175,7 @@ msgstr "&Izbor"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Omrežje"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -10818,6 +10822,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -10938,6 +10946,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -343,6 +343,10 @@ msgstr "Отвори датотеку збирне провере након з
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "&Образуј посебну датотеку збирне провере за сваку датотеку"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3206,7 +3210,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Поставке"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Омиљено"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3224,7 +3228,7 @@ msgstr "Ознака&"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Мрежа"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11049,6 +11053,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11169,6 +11177,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -346,6 +346,10 @@ msgstr ""
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "&Obrazuj posebnu datoteku zbirne provere za svaku datoteku"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3257,7 +3261,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Postavke"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3275,7 +3279,7 @@ msgstr "Oznaka&"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Mreža"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11339,6 +11343,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11458,6 +11466,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -381,6 +381,10 @@ msgstr ""
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Her dosya için ayrı bir sağlama toplamı dosyası oluştur"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3382,7 +3386,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Yapılandır"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3400,7 +3404,7 @@ msgstr "&İşaretle"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Ağ"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11487,6 +11491,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11605,6 +11613,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -341,6 +341,10 @@ msgstr "Відкрити файл контрольної суми після р
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "Для кожного файлу ство&рити свій контрольний файл"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr ""
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3225,7 +3229,7 @@ msgid "C&onfiguration"
|
|||
msgstr "&Налаштування"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "Вибране"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3243,7 +3247,7 @@ msgstr "&Виділення"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "Мережа"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -11175,6 +11179,10 @@ msgctxt "ulng.rsmenumacoseditfindertags"
|
|||
msgid "Edit Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
msgid "Remove \"%s\""
|
||||
|
|
@ -11295,6 +11303,10 @@ msgstr ""
|
|||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr ""
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr ""
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgstr ""
|
|||
"Project-Id-Version: Double Commander 1.1.0 alpha\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-15 11:15+0300\n"
|
||||
"PO-Revision-Date: 2023-04-05 22:00+0800\n"
|
||||
"PO-Revision-Date: 2024-11-01 21:00+0800\n"
|
||||
"Last-Translator: iYoung <iyoung@126.com>\n"
|
||||
"Language-Team: Chinese <iyoung@126.com>\n"
|
||||
"Language: zh_CN\n"
|
||||
|
|
@ -330,7 +330,11 @@ msgstr "任务完成后打开校验码文件"
|
|||
|
||||
#: tfrmchecksumcalc.cbseparatefile.caption
|
||||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "为每个文件分别创建 MD5/SHA1 文件(&R)"
|
||||
msgstr "为每个文件分别创建校验码文件(&R)"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr "为每个文件夹分别创建校验码文件(&D)"
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
|
|
@ -3144,7 +3148,7 @@ msgid "C&onfiguration"
|
|||
msgstr "配置(&O)"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "收藏夹(&A)"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3162,7 +3166,7 @@ msgstr "标记(&M)"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "tfrmmain.mnunetwork.caption"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "网络(&N)"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -7359,12 +7363,12 @@ msgstr "新的收藏夹标签保存在菜单中的默认位置:"
|
|||
#: tfrmoptionsterminal.edrunintermcloseparams.hint
|
||||
msgctxt "tfrmoptionsterminal.edrunintermcloseparams.hint"
|
||||
msgid "{command} should normally be present here to reflect the command to be run in terminal"
|
||||
msgstr "{命令} 通常应该在此出现,以反映在终端中运行的命令"
|
||||
msgstr "{command} 通常应该在此出现,以反映在终端中运行的命令"
|
||||
|
||||
#: tfrmoptionsterminal.edrunintermstayopenparams.hint
|
||||
msgctxt "tfrmoptionsterminal.edrunintermstayopenparams.hint"
|
||||
msgid "{command} should normally be present here to reflect the command to be run in terminal"
|
||||
msgstr "{命令} 通常应该在此出现,以反映在终端中运行的命令"
|
||||
msgstr "{command} 通常应该在此出现,以反映在终端中运行的命令"
|
||||
|
||||
#: tfrmoptionsterminal.gbjustrunterminal.caption
|
||||
msgid "Command for just running terminal:"
|
||||
|
|
@ -10804,8 +10808,13 @@ msgid "Add \"%s\""
|
|||
msgstr "添加“%s”"
|
||||
|
||||
#: ulng.rsmenumacoseditfindertags
|
||||
msgctxt "ulng.rsmenumacoseditfindertags"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr "编辑访达标签..."
|
||||
msgstr "编辑“访达”标签..."
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr "授予“完全磁盘访问”权限以支持“访达”标签..."
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
|
|
@ -10858,7 +10867,7 @@ msgstr "比较"
|
|||
#: ulng.rsmfstbieditfindertagtips
|
||||
msgctxt "ulng.rsmfstbieditfindertagtips"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr "编辑访达标签..."
|
||||
msgstr "编辑“访达”标签..."
|
||||
|
||||
#: ulng.rsmfstbieditfindertagtitle
|
||||
msgid "EditTag"
|
||||
|
|
@ -10876,7 +10885,7 @@ msgstr "编辑"
|
|||
#: ulng.rsmfstbifinderrevealtips
|
||||
msgctxt "ulng.rsmfstbifinderrevealtips"
|
||||
msgid "Reveal in Finder"
|
||||
msgstr "在访达中访问文件"
|
||||
msgstr "在“访达”中访问文件"
|
||||
|
||||
#: ulng.rsmfstbifinderrevealtitle
|
||||
msgctxt "ulng.rsmfstbifinderrevealtitle"
|
||||
|
|
@ -10931,6 +10940,10 @@ msgctxt "ulng.rsmfstbirefreshtitle"
|
|||
msgid "Refresh"
|
||||
msgstr "刷新"
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr "搜索组合标签"
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgctxt "ulng.rsmfstbisearchtips"
|
||||
msgid "Search Files..."
|
||||
|
|
@ -10959,7 +10972,7 @@ msgstr "以完整详细列表方式显示"
|
|||
#: ulng.rsmfstbishowinfotips
|
||||
msgctxt "ulng.rsmfstbishowinfotips"
|
||||
msgid "Show Info in Finder"
|
||||
msgstr "在访达中显示文件简介"
|
||||
msgstr "在“访达”中显示文件简介"
|
||||
|
||||
#: ulng.rsmfstbishowinfotitle
|
||||
msgctxt "ulng.rsmfstbishowinfotitle"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ msgstr ""
|
|||
"Project-Id-Version: Double Commander 1.1.0 alpha\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-11-15 11:15+0300\n"
|
||||
"PO-Revision-Date: 2023-04-04 19:07+0800\n"
|
||||
"PO-Revision-Date: 2024-11-01 21:00+0800\n"
|
||||
"Last-Translator: Kne luo\n"
|
||||
"Language-Team: \n"
|
||||
"Language: zh_TW\n"
|
||||
|
|
@ -339,6 +339,10 @@ msgstr "任務完成後打開校驗碼檔案"
|
|||
msgid "C&reate separate checksum file for each file"
|
||||
msgstr "為每個檔案建立單獨的驗證碼檔案 (&R)"
|
||||
|
||||
#: tfrmchecksumcalc.cbseparatefolder.caption
|
||||
msgid "Create separate checksum file for each &directory"
|
||||
msgstr "為每個資料夾建立單獨的驗證碼檔案 (&D)"
|
||||
|
||||
#: tfrmchecksumcalc.lblfileformat.caption
|
||||
msgid "File &format"
|
||||
msgstr ""
|
||||
|
|
@ -3192,7 +3196,7 @@ msgid "C&onfiguration"
|
|||
msgstr "設置 (&O)"
|
||||
|
||||
#: tfrmmain.mnufavoritetabs.caption
|
||||
msgid "Favorites"
|
||||
msgid "F&avorites"
|
||||
msgstr "我的最愛"
|
||||
|
||||
#: tfrmmain.mnufiles.caption
|
||||
|
|
@ -3210,7 +3214,7 @@ msgstr "標記 (&M)"
|
|||
|
||||
#: tfrmmain.mnunetwork.caption
|
||||
msgctxt "TFRMMAIN.MNUNETWORK.CAPTION"
|
||||
msgid "Network"
|
||||
msgid "&Network"
|
||||
msgstr "網路"
|
||||
|
||||
#: tfrmmain.mnushow.caption
|
||||
|
|
@ -5325,10 +5329,8 @@ msgid "When dropping text, generate filename automatically (otherwise will promp
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show confirmation dialog after drop"
|
||||
msgid "&Show confirmation dialog after drop"
|
||||
msgstr "顯示確認對話盒在拖曳操作後 (&S)"
|
||||
msgstr "在拖曳操作後顯示確認對話盒 (&S)"
|
||||
|
||||
#: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption
|
||||
msgid "When drag && dropping text into panels:"
|
||||
|
|
@ -5593,7 +5595,6 @@ msgid "Insert..."
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsfavoritetabs.btnrename.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfavoritetabs.btnrename.caption"
|
||||
msgid "Rename"
|
||||
msgstr "重新命名"
|
||||
|
|
@ -5614,7 +5615,6 @@ msgid "Always expand tree"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsfavoritetabs.cbsavedirhistory.text
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text"
|
||||
msgid "No"
|
||||
msgstr "否"
|
||||
|
|
@ -5688,7 +5688,6 @@ msgid "...current level of item(s) selected only"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsfavoritetabs.micutselection.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfavoritetabs.micutselection.caption"
|
||||
msgid "Cut"
|
||||
msgstr "剪下"
|
||||
|
|
@ -5758,13 +5757,11 @@ msgid "Open all branches"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsfavoritetabs.mipasteselection.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption"
|
||||
msgid "Paste"
|
||||
msgstr "貼上"
|
||||
|
||||
#: tfrmoptionsfavoritetabs.mirename.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfavoritetabs.mirename.caption"
|
||||
msgid "Rename"
|
||||
msgstr "重新命名"
|
||||
|
|
@ -5955,7 +5952,6 @@ msgid "Command:"
|
|||
msgstr "指令 (&C):"
|
||||
|
||||
#: tfrmoptionsfileassoc.lblexternalparameters.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption"
|
||||
msgid "Parameter&s:"
|
||||
msgstr "參數 (&S):"
|
||||
|
|
@ -6112,7 +6108,6 @@ msgid "Path to be relative to:"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsfileoperations.bvlconfirmations.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption"
|
||||
msgid "Show confirmation window for:"
|
||||
msgstr "顯示確認視窗在:"
|
||||
|
|
@ -6126,8 +6121,6 @@ msgid "&Delete operation"
|
|||
msgstr "刪除操作 (&D)"
|
||||
|
||||
#: tfrmoptionsfileoperations.cbdeletetotrash.caption
|
||||
#, fuzzy
|
||||
#| msgid "Delete to recycle bin (Shift key reverses this setting)"
|
||||
msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION"
|
||||
msgid "Dele&te to recycle bin (Shift key reverses this setting)"
|
||||
msgstr "刪除到資源回收筒 (與 Shift 鍵同按為徹底刪除) (&T)"
|
||||
|
|
@ -6208,7 +6201,6 @@ msgid "Reset to DC default"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsfilepanelscolors.cballowovercolor.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption"
|
||||
msgid "Allow Overcolor"
|
||||
msgstr "允許顏色覆蓋"
|
||||
|
|
@ -6228,7 +6220,6 @@ msgid "U&se Inverted Selection"
|
|||
msgstr "使用反白選取 (&S)"
|
||||
|
||||
#: tfrmoptionsfilepanelscolors.cbusecursorborder.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption"
|
||||
msgid "Cursor border"
|
||||
msgstr "指標外框"
|
||||
|
|
@ -6282,7 +6273,6 @@ msgid "Background:"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsfilepanelscolors.lblpathactivetext.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionsfilepanelscolors.lblpathactivetext.caption"
|
||||
msgid "Text Color:"
|
||||
msgstr "文字色彩:"
|
||||
|
|
@ -6355,7 +6345,6 @@ msgid "Personalized abbreviations to use:"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsfilesviews.gbsorting.caption
|
||||
#, fuzzy
|
||||
msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION"
|
||||
msgid "Sorting"
|
||||
msgstr "排序"
|
||||
|
|
@ -6557,13 +6546,11 @@ msgid "Add &hotkey"
|
|||
msgstr "新增熱鍵 (&H)"
|
||||
|
||||
#: tfrmoptionshotkeys.actcopy.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.actcopy.caption"
|
||||
msgid "Copy"
|
||||
msgstr "複製"
|
||||
|
||||
#: tfrmoptionshotkeys.actdelete.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.actdelete.caption"
|
||||
msgid "Delete"
|
||||
msgstr "刪除"
|
||||
|
|
@ -6591,7 +6578,6 @@ msgid "Previous category"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionshotkeys.actrename.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.actrename.caption"
|
||||
msgid "Rename"
|
||||
msgstr "重新命名"
|
||||
|
|
@ -6645,7 +6631,6 @@ msgid "Categories"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionshotkeys.micommands.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.micommands.caption"
|
||||
msgid "Command"
|
||||
msgstr "指令"
|
||||
|
|
@ -6655,31 +6640,26 @@ msgid "Sort order"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionshotkeys.stgcommands.columns[0].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption"
|
||||
msgid "Command"
|
||||
msgstr "指令"
|
||||
|
||||
#: tfrmoptionshotkeys.stgcommands.columns[1].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption"
|
||||
msgid "Hotkeys"
|
||||
msgstr "熱鍵"
|
||||
|
||||
#: tfrmoptionshotkeys.stgcommands.columns[2].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption"
|
||||
msgid "Description"
|
||||
msgstr "描述"
|
||||
|
||||
#: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption"
|
||||
msgid "Hotkey"
|
||||
msgstr "熱鍵"
|
||||
|
||||
#: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption"
|
||||
msgid "Parameters"
|
||||
msgstr "參數"
|
||||
|
|
@ -6756,7 +6736,6 @@ msgid "All associated + &EXE/LNK (slow)"
|
|||
msgstr "所有已關聯的檔案 + 執行檔/捷徑 (較慢) (&E)"
|
||||
|
||||
#: tfrmoptionsicons.rbiconsshownone.caption
|
||||
#, fuzzy
|
||||
msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION"
|
||||
msgid "&No icons"
|
||||
msgstr "不顯示圖示 (&N)"
|
||||
|
|
@ -6859,35 +6838,25 @@ msgid "Show &drive buttons"
|
|||
msgstr "顯示磁碟按鈕 (&D)"
|
||||
|
||||
#: tfrmoptionslayout.cbshowdrivefreespace.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show free space label"
|
||||
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION"
|
||||
msgid "Show free s&pace label"
|
||||
msgstr "顯示可用空間標籤 (&P)"
|
||||
|
||||
#: tfrmoptionslayout.cbshowdriveslistbutton.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show d&rives list button"
|
||||
msgid "Show drives list bu&tton"
|
||||
msgstr "顯示碟磁清單按鈕 (&T)"
|
||||
|
||||
#: tfrmoptionslayout.cbshowkeyspanel.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show &function key buttons"
|
||||
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION"
|
||||
msgid "Show function &key buttons"
|
||||
msgstr "顯示功能鍵按鈕 (&K)"
|
||||
|
||||
#: tfrmoptionslayout.cbshowmainmenu.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show main menu"
|
||||
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION"
|
||||
msgid "Show &main menu"
|
||||
msgstr "顯示主要選單 (&M)"
|
||||
|
||||
#: tfrmoptionslayout.cbshowmaintoolbar.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show &button bar"
|
||||
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION"
|
||||
msgid "Show tool&bar"
|
||||
msgstr "顯示工具列 (&B)"
|
||||
|
|
@ -6902,8 +6871,6 @@ msgid "Show &status bar"
|
|||
msgstr "顯示狀態列 (&S)"
|
||||
|
||||
#: tfrmoptionslayout.cbshowtabheader.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show &tabstop header"
|
||||
msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION"
|
||||
msgid "S&how tabstop header"
|
||||
msgstr "顯示欄位名稱 (&H)"
|
||||
|
|
@ -6914,15 +6881,11 @@ msgid "Sho&w folder tabs"
|
|||
msgstr "顯示資料夾分頁 (&W)"
|
||||
|
||||
#: tfrmoptionslayout.cbtermwindow.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show terminal window"
|
||||
msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION"
|
||||
msgid "Show te&rminal window"
|
||||
msgstr "顯示終端機視窗 (&R)"
|
||||
|
||||
#: tfrmoptionslayout.cbtwodiskpanels.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show two drive button bars (fixed width, above file windows)"
|
||||
msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION"
|
||||
msgid "Show two drive button bars (fi&xed width, above file windows)"
|
||||
msgstr "顯示兩個磁碟按鈕列 (&X)"
|
||||
|
|
@ -6951,8 +6914,6 @@ msgid "Include date in log filename"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionslog.cblogarcop.caption
|
||||
#, fuzzy
|
||||
#| msgid "Pack/Unpack"
|
||||
msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION"
|
||||
msgid "&Pack/Unpack"
|
||||
msgstr "壓縮/解壓縮 (&P)"
|
||||
|
|
@ -6962,22 +6923,16 @@ msgid "External command line execution"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionslog.cblogcpmvln.caption
|
||||
#, fuzzy
|
||||
#| msgid "Copy/Move/Create link/symlink"
|
||||
msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION"
|
||||
msgid "Cop&y/Move/Create link/symlink"
|
||||
msgstr "複製/移動/建立硬式連結/建立符號連結 (&Y)"
|
||||
|
||||
#: tfrmoptionslog.cblogdelete.caption
|
||||
#, fuzzy
|
||||
#| msgid "Delete"
|
||||
msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION"
|
||||
msgid "&Delete"
|
||||
msgstr "刪除 (&D)"
|
||||
|
||||
#: tfrmoptionslog.cblogdirop.caption
|
||||
#, fuzzy
|
||||
#| msgid "Create/Delete directories"
|
||||
msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION"
|
||||
msgid "Crea&te/Delete directories"
|
||||
msgstr "建立/刪除資料夾 (&T)"
|
||||
|
|
@ -6988,8 +6943,6 @@ msgid "Log &errors"
|
|||
msgstr "記錄錯誤 (&E)"
|
||||
|
||||
#: tfrmoptionslog.cblogfile.caption
|
||||
#, fuzzy
|
||||
#| msgid "&Create a log file:"
|
||||
msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION"
|
||||
msgid "C&reate a log file:"
|
||||
msgstr "建立記錄檔案 (&R):"
|
||||
|
|
@ -6999,8 +6952,6 @@ msgid "Maximum log file count"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionslog.cbloginfo.caption
|
||||
#, fuzzy
|
||||
#| msgid "Log information messages"
|
||||
msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION"
|
||||
msgid "Log &information messages"
|
||||
msgstr "記錄資訊 (&I)"
|
||||
|
|
@ -7015,8 +6966,6 @@ msgid "Log &successful operations"
|
|||
msgstr "記錄操作成功 (&S)"
|
||||
|
||||
#: tfrmoptionslog.cblogvfs.caption
|
||||
#, fuzzy
|
||||
#| msgid "File system plugins"
|
||||
msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION"
|
||||
msgid "&File system plugins"
|
||||
msgstr "檔案系統插件 (&F)"
|
||||
|
|
@ -7032,8 +6981,6 @@ msgid "Log operations"
|
|||
msgstr "操作記錄"
|
||||
|
||||
#: tfrmoptionslog.gblogfilestatus.caption
|
||||
#, fuzzy
|
||||
#| msgid "Operation status:"
|
||||
msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION"
|
||||
msgid "Operation status"
|
||||
msgstr "操作狀態"
|
||||
|
|
@ -7085,15 +7032,11 @@ msgid "Show &splash screen"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsmisc.chkshowwarningmessages.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show warning messages (\"OK\" button only)"
|
||||
msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption"
|
||||
msgid "Show &warning messages (\"OK\" button only)"
|
||||
msgstr "顯示警告訊息 (&W)"
|
||||
|
||||
#: tfrmoptionsmisc.chkthumbsave.caption
|
||||
#, fuzzy
|
||||
#| msgid "Save thumbnails in cache"
|
||||
msgctxt "tfrmoptionsmisc.chkthumbsave.caption"
|
||||
msgid "&Save thumbnails in cache"
|
||||
msgstr "儲存縮圖快取 (&S)"
|
||||
|
|
@ -7146,8 +7089,6 @@ msgid "&Thumbnail size:"
|
|||
msgstr "縮圖大小 (&T):"
|
||||
|
||||
#: tfrmoptionsmouse.cbselectionbymouse.caption
|
||||
#, fuzzy
|
||||
#| msgid "Selection by mouse"
|
||||
msgctxt "TFRMOPTIONSMOUSE.CBSELECTIONBYMOUSE.CAPTION"
|
||||
msgid "&Selection by mouse"
|
||||
msgstr "使用滑鼠選取項目 (&S)"
|
||||
|
|
@ -7175,8 +7116,6 @@ msgid "Selection"
|
|||
msgstr "選取項目"
|
||||
|
||||
#: tfrmoptionsmouse.lblmousemode.caption
|
||||
#, fuzzy
|
||||
#| msgid "Mode:"
|
||||
msgctxt "TFRMOPTIONSMOUSE.LBLMOUSEMODE.CAPTION"
|
||||
msgid "&Mode:"
|
||||
msgstr "模式 (&M):"
|
||||
|
|
@ -7186,22 +7125,16 @@ msgid "Double click"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionsmouse.rbscrolllinebyline.caption
|
||||
#, fuzzy
|
||||
#| msgid "Line by line"
|
||||
msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINE.CAPTION"
|
||||
msgid "&Line by line"
|
||||
msgstr "一次捲動行數 (&L)"
|
||||
|
||||
#: tfrmoptionsmouse.rbscrolllinebylinecursor.caption
|
||||
#, fuzzy
|
||||
#| msgid "Line by line with cursor movement"
|
||||
msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINECURSOR.CAPTION"
|
||||
msgid "Line by line &with cursor movement"
|
||||
msgstr "一次捲動一行 + 指標行跟隨移動 (&W)"
|
||||
|
||||
#: tfrmoptionsmouse.rbscrollpagebypage.caption
|
||||
#, fuzzy
|
||||
#| msgid "Page by page"
|
||||
msgctxt "TFRMOPTIONSMOUSE.RBSCROLLPAGEBYPAGE.CAPTION"
|
||||
msgid "&Page by page"
|
||||
msgstr "一次捲動一頁 (&P)"
|
||||
|
|
@ -7316,25 +7249,21 @@ msgid "Searc&h plugins allow one to use alternative search algorithms or externa
|
|||
msgstr "搜尋插件可允許使用其他替代搜尋演算法或外部工具搜尋 (像 \"locate\" 等)"
|
||||
|
||||
#: tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[0].title.caption"
|
||||
msgid "Active"
|
||||
msgstr "啟動"
|
||||
|
||||
#: tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[1].title.caption"
|
||||
msgid "Plugin"
|
||||
msgstr "插件"
|
||||
|
||||
#: tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[2].title.caption"
|
||||
msgid "Registered for"
|
||||
msgstr "登錄對象"
|
||||
|
||||
#: tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginsdsx.stgplugins.columns[3].title.caption"
|
||||
msgid "File name"
|
||||
msgstr "檔案名稱"
|
||||
|
|
@ -7370,25 +7299,21 @@ msgid "Pack&er plugins are used to work with archives"
|
|||
msgstr "壓縮插件用於支援特定壓縮格式的處理"
|
||||
|
||||
#: tfrmoptionspluginswcx.stgplugins.columns[0].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswcx.stgplugins.columns[0].title.caption"
|
||||
msgid "Active"
|
||||
msgstr "啟動"
|
||||
|
||||
#: tfrmoptionspluginswcx.stgplugins.columns[1].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswcx.stgplugins.columns[1].title.caption"
|
||||
msgid "Plugin"
|
||||
msgstr "插件"
|
||||
|
||||
#: tfrmoptionspluginswcx.stgplugins.columns[2].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswcx.stgplugins.columns[2].title.caption"
|
||||
msgid "Registered for"
|
||||
msgstr "登錄對象"
|
||||
|
||||
#: tfrmoptionspluginswcx.stgplugins.columns[3].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswcx.stgplugins.columns[3].title.caption"
|
||||
msgid "File name"
|
||||
msgstr "檔案名稱"
|
||||
|
|
@ -7399,25 +7324,21 @@ msgid "Content plu&gins allow one to display extended file details like mp3 tags
|
|||
msgstr "內容插件可允許在檔案清單顯示 MP3 標籤或圖片屬性等延伸的檔案詳細資料, 或是在搜尋和多重命名工具中使用"
|
||||
|
||||
#: tfrmoptionspluginswdx.stgplugins.columns[0].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswdx.stgplugins.columns[0].title.caption"
|
||||
msgid "Active"
|
||||
msgstr "啟動"
|
||||
|
||||
#: tfrmoptionspluginswdx.stgplugins.columns[1].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswdx.stgplugins.columns[1].title.caption"
|
||||
msgid "Plugin"
|
||||
msgstr "插件"
|
||||
|
||||
#: tfrmoptionspluginswdx.stgplugins.columns[2].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswdx.stgplugins.columns[2].title.caption"
|
||||
msgid "Registered for"
|
||||
msgstr "登錄對象"
|
||||
|
||||
#: tfrmoptionspluginswdx.stgplugins.columns[3].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswdx.stgplugins.columns[3].title.caption"
|
||||
msgid "File name"
|
||||
msgstr "檔案名稱"
|
||||
|
|
@ -7428,25 +7349,21 @@ msgid "Fi&le system plugins allow access to disks inaccessible by operating syst
|
|||
msgstr "檔案系統插件可允許存取一些作業系統上罕見的檔案系統, 或是像 Palm/PocketPC 等外部裝置"
|
||||
|
||||
#: tfrmoptionspluginswfx.stgplugins.columns[0].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswfx.stgplugins.columns[0].title.caption"
|
||||
msgid "Active"
|
||||
msgstr "啟動"
|
||||
|
||||
#: tfrmoptionspluginswfx.stgplugins.columns[1].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswfx.stgplugins.columns[1].title.caption"
|
||||
msgid "Plugin"
|
||||
msgstr "插件"
|
||||
|
||||
#: tfrmoptionspluginswfx.stgplugins.columns[2].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswfx.stgplugins.columns[2].title.caption"
|
||||
msgid "Registered for"
|
||||
msgstr "登錄對象"
|
||||
|
||||
#: tfrmoptionspluginswfx.stgplugins.columns[3].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswfx.stgplugins.columns[3].title.caption"
|
||||
msgid "File name"
|
||||
msgstr "檔案名稱"
|
||||
|
|
@ -7457,25 +7374,21 @@ msgid "Vie&wer plugins allow one to display file formats like images, spreadshee
|
|||
msgstr "檢視器插件可允許顯示圖片,試算表,資料庫等檔案格式在檢視器"
|
||||
|
||||
#: tfrmoptionspluginswlx.stgplugins.columns[0].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswlx.stgplugins.columns[0].title.caption"
|
||||
msgid "Active"
|
||||
msgstr "啟動"
|
||||
|
||||
#: tfrmoptionspluginswlx.stgplugins.columns[1].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswlx.stgplugins.columns[1].title.caption"
|
||||
msgid "Plugin"
|
||||
msgstr "插件"
|
||||
|
||||
#: tfrmoptionspluginswlx.stgplugins.columns[2].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswlx.stgplugins.columns[2].title.caption"
|
||||
msgid "Registered for"
|
||||
msgstr "登錄對象"
|
||||
|
||||
#: tfrmoptionspluginswlx.stgplugins.columns[3].title.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionspluginswlx.stgplugins.columns[3].title.caption"
|
||||
msgid "File name"
|
||||
msgstr "檔案名稱"
|
||||
|
|
@ -7496,8 +7409,6 @@ msgid "Options"
|
|||
msgstr "選項"
|
||||
|
||||
#: tfrmoptionsquicksearchfilter.gbexactnamematch.caption
|
||||
#, fuzzy
|
||||
#| msgid "Exact name match:"
|
||||
msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION"
|
||||
msgid "Exact name match"
|
||||
msgstr "精準名稱比對"
|
||||
|
|
@ -7529,8 +7440,6 @@ msgid "Close duplicate tabs when closing application"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionstabs.cbtabsconfirmcloseall.caption
|
||||
#, fuzzy
|
||||
#| msgid "&Confirm close all tabs"
|
||||
msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION"
|
||||
msgid "Con&firm close all tabs"
|
||||
msgstr "關閉所有分頁時需確認 (&F)"
|
||||
|
|
@ -7540,11 +7449,9 @@ msgid "Confirm close locked tabs"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionstabs.cbtabslimitoption.caption
|
||||
#, fuzzy
|
||||
#| msgid "&Limit tab title length to:"
|
||||
msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION"
|
||||
msgid "&Limit tab title length to"
|
||||
msgstr "限制分頁標題長度為 (&L):"
|
||||
msgstr "限制分頁標題長度為 (&L)"
|
||||
|
||||
#: tfrmoptionstabs.cbtabslockedasterisk.caption
|
||||
msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION"
|
||||
|
|
@ -7571,8 +7478,6 @@ msgid "Reuse existing tab when possible"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionstabs.cbtabsshowclosebutton.caption
|
||||
#, fuzzy
|
||||
#| msgid "Show tab close button"
|
||||
msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION"
|
||||
msgid "Show ta&b close button"
|
||||
msgstr "顯示分頁關閉按鈕 (&B)"
|
||||
|
|
@ -7596,8 +7501,6 @@ msgid "Action to do when double click on a tab:"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionstabs.lbltabsposition.caption
|
||||
#, fuzzy
|
||||
#| msgid "Tabs position"
|
||||
msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION"
|
||||
msgid "Ta&bs position"
|
||||
msgstr "分頁位置 (&B):"
|
||||
|
|
@ -7608,7 +7511,6 @@ msgid "None"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionstabsextra.cbdefaultsavedirhistory.text
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text"
|
||||
msgid "No"
|
||||
msgstr "否"
|
||||
|
|
@ -7717,8 +7619,6 @@ msgid "Parameters:"
|
|||
msgstr "參數:"
|
||||
|
||||
#: tfrmoptionstoolbarbase.btnclonebutton.caption
|
||||
#, fuzzy
|
||||
#| msgid "&Clone button"
|
||||
msgctxt "tfrmoptionstoolbarbase.btnclonebutton.caption"
|
||||
msgid "C&lone button"
|
||||
msgstr "複製按鈕 (&L)"
|
||||
|
|
@ -7729,15 +7629,11 @@ msgid "&Delete"
|
|||
msgstr "刪除 (&D)"
|
||||
|
||||
#: tfrmoptionstoolbarbase.btnedithotkey.caption
|
||||
#, fuzzy
|
||||
#| msgid "Edit hotkey"
|
||||
msgctxt "tfrmoptionstoolbarbase.btnedithotkey.caption"
|
||||
msgid "Edit hot&key"
|
||||
msgstr "編輯熱鍵 (&K)"
|
||||
|
||||
#: tfrmoptionstoolbarbase.btninsertbutton.caption
|
||||
#, fuzzy
|
||||
#| msgid "&Insert new buttonX"
|
||||
msgctxt "tfrmoptionstoolbarbase.btninsertbutton.caption"
|
||||
msgid "&Insert new button"
|
||||
msgstr "插入新按鈕 (&I)"
|
||||
|
|
@ -7775,8 +7671,6 @@ msgid "Have DC suggest the tooltip based on button type, command and parameters"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionstoolbarbase.cbflatbuttons.caption
|
||||
#, fuzzy
|
||||
#| msgid "Flat b&uttons"
|
||||
msgctxt "tfrmoptionstoolbarbase.cbflatbuttons.caption"
|
||||
msgid "&Flat buttons"
|
||||
msgstr "平面按鈕 (&F)"
|
||||
|
|
@ -7799,8 +7693,6 @@ msgid "Appearance"
|
|||
msgstr "外觀"
|
||||
|
||||
#: tfrmoptionstoolbarbase.lblbarsize.caption
|
||||
#, fuzzy
|
||||
#| msgid "Ba&r size:"
|
||||
msgctxt "tfrmoptionstoolbarbase.lblbarsize.caption"
|
||||
msgid "&Bar size:"
|
||||
msgstr "工具列大小 (&B):"
|
||||
|
|
@ -7825,15 +7717,11 @@ msgid "Hot key:"
|
|||
msgstr "熱鍵:"
|
||||
|
||||
#: tfrmoptionstoolbarbase.lbliconfile.caption
|
||||
#, fuzzy
|
||||
#| msgid "Icon:"
|
||||
msgctxt "tfrmoptionstoolbarbase.lbliconfile.caption"
|
||||
msgid "Ico&n:"
|
||||
msgstr "圖示 (&N):"
|
||||
|
||||
#: tfrmoptionstoolbarbase.lbliconsize.caption
|
||||
#, fuzzy
|
||||
#| msgid "Ic&on size:"
|
||||
msgctxt "tfrmoptionstoolbarbase.lbliconsize.caption"
|
||||
msgid "Icon si&ze:"
|
||||
msgstr "圖示大小 (&Z):"
|
||||
|
|
@ -7849,8 +7737,6 @@ msgid "&Parameters:"
|
|||
msgstr "參數 (&P):"
|
||||
|
||||
#: tfrmoptionstoolbarbase.lblstartpath.caption
|
||||
#, fuzzy
|
||||
#| msgid "Start path:"
|
||||
msgctxt "tfrmoptionstoolbarbase.lblstartpath.caption"
|
||||
msgid "Start pat&h:"
|
||||
msgstr "開始路徑 (&H):"
|
||||
|
|
@ -7860,8 +7746,6 @@ msgid "Style:"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionstoolbarbase.lbltooltip.caption
|
||||
#, fuzzy
|
||||
#| msgid "Tooltip:"
|
||||
msgctxt "tfrmoptionstoolbarbase.lbltooltip.caption"
|
||||
msgid "&Tooltip:"
|
||||
msgstr "工具提示 (&T):"
|
||||
|
|
@ -8245,29 +8129,21 @@ msgid "&Keep terminal window open after executing program"
|
|||
msgstr "在執行程式後保持終端機視窗開啟 (&K)"
|
||||
|
||||
#: tfrmoptionstoolbase.cbtoolsruninterminal.caption
|
||||
#, fuzzy
|
||||
#| msgid "Execute in terminal"
|
||||
msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION"
|
||||
msgid "&Execute in terminal"
|
||||
msgstr "使用終端機執行 (&E)"
|
||||
|
||||
#: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption
|
||||
#, fuzzy
|
||||
#| msgid "Use external program"
|
||||
msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION"
|
||||
msgid "&Use external program"
|
||||
msgstr "使用外部程式 (&U)"
|
||||
|
||||
#: tfrmoptionstoolbase.lbltoolsparameters.caption
|
||||
#, fuzzy
|
||||
#| msgid "Additional parameters"
|
||||
msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION"
|
||||
msgid "A&dditional parameters"
|
||||
msgstr "額外參數 (&D)"
|
||||
|
||||
#: tfrmoptionstoolbase.lbltoolspath.caption
|
||||
#, fuzzy
|
||||
#| msgid "Path to program to execute"
|
||||
msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION"
|
||||
msgid "&Path to program to execute"
|
||||
msgstr "執行程式路徑 (&P)"
|
||||
|
|
@ -8328,15 +8204,11 @@ msgid "&Show tooltip for files in the file panel"
|
|||
msgstr "顯示工具提示"
|
||||
|
||||
#: tfrmoptionstooltips.lblfieldslist.caption
|
||||
#, fuzzy
|
||||
#| msgid "Category hint:"
|
||||
msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION"
|
||||
msgid "Category &hint:"
|
||||
msgstr "類別提示 (&H):"
|
||||
|
||||
#: tfrmoptionstooltips.lblfieldsmask.caption
|
||||
#, fuzzy
|
||||
#| msgid "Category mask:"
|
||||
msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION"
|
||||
msgid "Category &mask:"
|
||||
msgstr "類別遮罩 (&M):"
|
||||
|
|
@ -8442,7 +8314,6 @@ msgid "With History:"
|
|||
msgstr ""
|
||||
|
||||
#: tfrmoptionstreeviewmenucolor.btfont.caption
|
||||
#, fuzzy
|
||||
msgctxt "tfrmoptionstreeviewmenucolor.btfont.caption"
|
||||
msgid "..."
|
||||
msgstr "..."
|
||||
|
|
@ -8525,8 +8396,6 @@ msgid "&Number of columns in book viewer"
|
|||
msgstr "閱讀模式欄位數量 (&N)"
|
||||
|
||||
#: tfrmpackdlg.btnconfig.caption
|
||||
#, fuzzy
|
||||
#| msgid "&Configure"
|
||||
msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION"
|
||||
msgid "Con&figure"
|
||||
msgstr "設置 (&F)"
|
||||
|
|
@ -11343,7 +11212,11 @@ msgstr "添加“%s”"
|
|||
#: ulng.rsmenumacoseditfindertags
|
||||
msgctxt "ulng.rsmenumacoseditfindertags"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr "編輯訪達標籤..."
|
||||
msgstr "編輯「訪達」標籤..."
|
||||
|
||||
#: ulng.rsmenumacosgrantpermissiontosupportfindertags
|
||||
msgid "Grant \"Full Disk Access\" permission to support Finder Tags..."
|
||||
msgstr "授予「完全磁盤訪問」權限以支持「訪達」標籤..."
|
||||
|
||||
#: ulng.rsmenumacosremovefindertag
|
||||
#, object-pascal-format
|
||||
|
|
@ -11395,7 +11268,7 @@ msgstr "比較"
|
|||
#: ulng.rsmfstbieditfindertagtips
|
||||
msgctxt "ulng.rsmfstbieditfindertagtips"
|
||||
msgid "Edit Finder Tags..."
|
||||
msgstr "編輯訪達標籤..."
|
||||
msgstr "編輯「訪達」標籤..."
|
||||
|
||||
#: ulng.rsmfstbieditfindertagtitle
|
||||
msgid "EditTag"
|
||||
|
|
@ -11412,7 +11285,7 @@ msgstr "編輯"
|
|||
|
||||
#: ulng.rsmfstbifinderrevealtips
|
||||
msgid "Reveal in Finder"
|
||||
msgstr "在訪達中訪問文件"
|
||||
msgstr "在「訪達」中訪問文件"
|
||||
|
||||
#: ulng.rsmfstbifinderrevealtitle
|
||||
msgid "Finder"
|
||||
|
|
@ -11460,6 +11333,10 @@ msgstr "刷新檔案清單"
|
|||
msgid "Refresh"
|
||||
msgstr "刷新"
|
||||
|
||||
#: ulng.rsmfstbisearchcombinedtags
|
||||
msgid "Search for combined tags..."
|
||||
msgstr "搜尋組合標籤"
|
||||
|
||||
#: ulng.rsmfstbisearchtips
|
||||
msgid "Search Files..."
|
||||
msgstr "搜尋檔案"
|
||||
|
|
@ -11483,7 +11360,7 @@ msgstr "以完整詳細清單方式檢視"
|
|||
|
||||
#: ulng.rsmfstbishowinfotips
|
||||
msgid "Show Info in Finder"
|
||||
msgstr "在訪達中顯示檔案簡介"
|
||||
msgstr "在「訪達」中顯示檔案簡介"
|
||||
|
||||
#: ulng.rsmfstbishowinfotitle
|
||||
msgid "ShowInfo"
|
||||
|
|
|
|||
|
|
@ -75,14 +75,12 @@ function FindCompressFormats(const AFileName: TFileName): TJclCompressArchiveCla
|
|||
function FindDecompressFormats(const AFileName: TFileName): TJclDecompressArchiveClassArray;
|
||||
|
||||
function GetNestedArchiveName(const ArchiveName: String; Item: TJclCompressionItem): WideString;
|
||||
function ExpandEnvironmentStrings(const FileName: UnicodeString): UnicodeString;
|
||||
function WideExtractFilePath(const FileName: WideString): WideString;
|
||||
function GetModulePath(out ModulePath: AnsiString): Boolean;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
CTypes, ActiveX, Windows, LazFileUtils, LazUTF8, SevenZipHlp;
|
||||
CTypes, ActiveX, Windows, LazFileUtils, LazUTF8, DCOSUtils, SevenZipHlp;
|
||||
|
||||
type
|
||||
TArchiveFormats = array of TArchiveFormat;
|
||||
|
|
@ -106,8 +104,6 @@ var
|
|||
CompressFormatsCache: TArchiveFormatCache;
|
||||
DecompressFormatsCache: TArchiveFormatCache;
|
||||
|
||||
function _wcsnicmp(const s1, s2: pwidechar; count: csize_t): cint; cdecl; external 'msvcrt.dll';
|
||||
|
||||
function ReadStringProp(FormatIndex: Cardinal; PropID: TPropID;
|
||||
out Value: UnicodeString): LongBool;
|
||||
var
|
||||
|
|
@ -252,7 +248,7 @@ var
|
|||
begin
|
||||
if Length(ArchiveFormatsX) = 0 then LoadArchiveFormats(ArchiveFormatsX);
|
||||
|
||||
AFile:= FileOpenUTF8(AFileName, fmOpenRead or fmShareDenyNone);
|
||||
AFile:= mbFileOpen(AFileName, fmOpenRead or fmShareDenyNone);
|
||||
if AFile = feInvalidHandle then Exit;
|
||||
try
|
||||
SetLength(Buffer, BufferSize);
|
||||
|
|
@ -392,6 +388,7 @@ end;
|
|||
|
||||
procedure TJclSevenzipUpdateArchiveHelper.RemoveDirectory(const PackedName: WideString);
|
||||
var
|
||||
FileName: WideString;
|
||||
DirectoryName: WideString;
|
||||
AItem: TJclCompressionItem;
|
||||
Index, PackedNamesIndex: Integer;
|
||||
|
|
@ -411,10 +408,13 @@ begin
|
|||
Break;
|
||||
end;
|
||||
end;
|
||||
DirectoryName:= WideLowerCase(PackedName);
|
||||
// Remove directory content
|
||||
for Index := ItemCount - 1 downto 0 do
|
||||
begin
|
||||
if (_wcsnicmp(PWideChar(PackedName), PWideChar(Items[Index].PackedName), Length(PackedName)) = 0) then
|
||||
FileName:= WideLowerCase(Items[Index].PackedName);
|
||||
if Length(FileName) < Length(DirectoryName) then Continue;
|
||||
if (CompareWord(DirectoryName[1], FileName[1], Length(DirectoryName)) = 0) then
|
||||
begin
|
||||
if (FPackedNames <> nil) and FPackedNames.Find(Items[Index].PackedName, PackedNamesIndex) then
|
||||
FPackedNames.Delete(PackedNamesIndex);
|
||||
|
|
@ -457,15 +457,6 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function ExpandEnvironmentStrings(const FileName: UnicodeString): UnicodeString;
|
||||
var
|
||||
dwSize: DWORD;
|
||||
begin
|
||||
SetLength(Result, MAX_PATH + 1);
|
||||
dwSize:= ExpandEnvironmentStringsW(PWideChar(FileName), PWideChar(Result), MAX_PATH);
|
||||
if dwSize > 0 then SetLength(Result, dwSize - 1);
|
||||
end;
|
||||
|
||||
function WideExtractFilePath(const FileName: WideString): WideString;
|
||||
var
|
||||
Index: Integer;
|
||||
|
|
@ -477,22 +468,6 @@ begin
|
|||
Result:= EmptyWideStr;
|
||||
end;
|
||||
|
||||
function GetModulePath(out ModulePath: AnsiString): Boolean;
|
||||
var
|
||||
lpBuffer: TMemoryBasicInformation;
|
||||
ModuleName: array[0..MAX_PATH] of WideChar;
|
||||
begin
|
||||
Result:= VirtualQuery(@GetModulePath, @lpBuffer, SizeOf(lpBuffer)) = SizeOf(lpBuffer);
|
||||
if Result then
|
||||
begin
|
||||
Result:= GetModuleFileNameW(THandle(lpBuffer.AllocationBase), ModuleName, MAX_PATH) > 0;
|
||||
if Result then
|
||||
begin
|
||||
ModulePath:= ExtractFilePath(Utf16ToUtf8(WideString(ModuleName)));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
InitCriticalSection(Mutex);
|
||||
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); stdcall;
|
|||
implementation
|
||||
|
||||
uses
|
||||
JwaWinBase, Windows, SysUtils, Classes, JclCompression, SevenZip, SevenZipAdv, fpTimer,
|
||||
SevenZipDlg, SevenZipLng, SevenZipOpt, LazFileUtils, SyncObjs, LazUTF8, SevenZipCodecs;
|
||||
Windows, SysUtils, Classes, JclCompression, SevenZip, SevenZipAdv, fpTimer, DCOSUtils,
|
||||
SevenZipDlg, SevenZipLng, SevenZipOpt, LazFileUtils, SyncObjs, LazUTF8, SevenZipCodecs, DCFileAttributes;
|
||||
|
||||
type
|
||||
|
||||
|
|
@ -145,14 +145,6 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function WinToDosTime(const WinTime: TFILETIME; var DosTime: Cardinal): LongBool;
|
||||
var
|
||||
lft : Windows.TFILETIME;
|
||||
begin
|
||||
Result:= Windows.FileTimeToLocalFileTime(@Windows.FILETIME(WinTime), @lft) and
|
||||
Windows.FileTimeToDosDateTime(@lft, @LongRec(Dostime).Hi, @LongRec(DosTime).Lo);
|
||||
end;
|
||||
|
||||
function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle; stdcall;
|
||||
var
|
||||
I: Integer;
|
||||
|
|
@ -221,11 +213,11 @@ begin
|
|||
HeaderData.PackSize:= Int64Rec(Item.PackedSize).Lo;
|
||||
HeaderData.PackSizeHigh:= Int64Rec(Item.PackedSize).Hi;
|
||||
if ipAttributes in Item.ValidProperties then
|
||||
HeaderData.FileAttr:= LongInt(Item.Attributes)
|
||||
HeaderData.FileAttr:= WinToWcxFileAttr(Item.Attributes)
|
||||
else begin
|
||||
HeaderData.FileAttr:= FILE_ATTRIBUTE_ARCHIVE;
|
||||
HeaderData.FileAttr:= GENERIC_ATTRIBUTE_FILE;
|
||||
end;
|
||||
WinToDosTime(Item.LastWriteTime, LongWord(HeaderData.FileTime));
|
||||
HeaderData.MfileTime:= UInt64(Item.LastWriteTime);
|
||||
if Item.Encrypted then begin
|
||||
HeaderData.Flags:= RHDF_ENCRYPTED;
|
||||
end;
|
||||
|
|
@ -331,7 +323,7 @@ begin
|
|||
FileNameUTF8 := Utf16ToUtf8(WideString(PackedFile));
|
||||
|
||||
// If update existing archive
|
||||
if (GetFileAttributesW(PackedFile) <> INVALID_FILE_ATTRIBUTES) then
|
||||
if (mbFileGetAttr(FileNameUTF8) <> faInvalidAttributes) then
|
||||
AFormats := TJclCompressArchiveClassArray(FindUpdateFormats(FileNameUTF8))
|
||||
else begin
|
||||
if not SameText(ExtractFileExt(FileNameUTF8), '.exe') then
|
||||
|
|
@ -504,22 +496,22 @@ begin
|
|||
ConfigFile:= ExtractFilePath(dps^.DefaultIniName);
|
||||
ConfigFile:= WinCPToUTF8(ConfigFile) + DefaultIniName;
|
||||
// Get plugin path
|
||||
if GetModulePath(ModulePath) then
|
||||
ModulePath:= ExtractFilePath(mbGetModuleName);
|
||||
// Use configuration from plugin path
|
||||
if mbFileExists(ModulePath + DefaultIniName) then
|
||||
begin
|
||||
// Use configuration from plugin path
|
||||
if FileExistsUTF8(ModulePath + DefaultIniName) then
|
||||
ConfigFile:= ModulePath + DefaultIniName;
|
||||
ConfigFile:= ModulePath + DefaultIniName;
|
||||
end;
|
||||
// Load plugin configuration
|
||||
LoadConfiguration;
|
||||
// Try to find library path
|
||||
if FileExistsUTF8(LibraryPath) then
|
||||
if mbFileExists(LibraryPath) then
|
||||
SevenzipLibraryName:= LibraryPath
|
||||
else if Length(ModulePath) > 0 then
|
||||
begin
|
||||
if FileExistsUTF8(ModulePath + TargetCPU + PathDelim + SevenzipDefaultLibraryName) then
|
||||
if mbFileExists(ModulePath + TargetCPU + PathDelim + SevenzipDefaultLibraryName) then
|
||||
SevenzipLibraryName:= ModulePath + TargetCPU + PathDelim + SevenzipDefaultLibraryName
|
||||
else if FileExistsUTF8(ModulePath + SevenzipDefaultLibraryName) then begin
|
||||
else if mbFileExists(ModulePath + SevenzipDefaultLibraryName) then begin
|
||||
SevenzipLibraryName:= ModulePath + SevenzipDefaultLibraryName;
|
||||
end;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ unit SevenZipOpt;
|
|||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Windows, IniFiles, JclCompression, SevenZip;
|
||||
Classes, SysUtils, Windows, DCClassesUtf8, JclCompression, SevenZip;
|
||||
|
||||
const
|
||||
cKilo = 1024;
|
||||
|
|
@ -222,7 +222,7 @@ var
|
|||
implementation
|
||||
|
||||
uses
|
||||
ActiveX, LazUTF8, SevenZipAdv, SevenZipCodecs;
|
||||
ActiveX, LazUTF8, DCOSUtils, SevenZipAdv, SevenZipCodecs;
|
||||
|
||||
function GetNumberOfProcessors: LongWord;
|
||||
var
|
||||
|
|
@ -450,15 +450,15 @@ end;
|
|||
|
||||
procedure LoadConfiguration;
|
||||
var
|
||||
Ini: TIniFile;
|
||||
Ini: TIniFileEx;
|
||||
Section: AnsiString;
|
||||
ArchiveFormat: TArchiveFormat;
|
||||
begin
|
||||
try
|
||||
Ini:= TIniFile.Create(ConfigFile);
|
||||
Ini:= TIniFileEx.Create(ConfigFile);
|
||||
try
|
||||
LibraryPath:= Ini.ReadString('Library', TargetCPU, EmptyStr);
|
||||
LibraryPath:= Utf16ToUtf8(ExpandEnvironmentStrings(UTF8ToUTF16(LibraryPath)));
|
||||
LibraryPath:= mbExpandEnvironmentStrings(LibraryPath);
|
||||
for ArchiveFormat:= Low(TArchiveFormat) to High(TArchiveFormat) do
|
||||
begin
|
||||
Section:= GUIDToString(PluginConfig[ArchiveFormat].ArchiveCLSID^);
|
||||
|
|
@ -481,12 +481,12 @@ end;
|
|||
|
||||
procedure SaveConfiguration;
|
||||
var
|
||||
Ini: TIniFile;
|
||||
Ini: TIniFileEx;
|
||||
Section: AnsiString;
|
||||
ArchiveFormat: TArchiveFormat;
|
||||
begin
|
||||
try
|
||||
Ini:= TIniFile.Create(ConfigFile);
|
||||
Ini:= TIniFileEx.Create(ConfigFile);
|
||||
try
|
||||
for ArchiveFormat:= Low(TArchiveFormat) to High(TArchiveFormat) do
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -84,10 +84,13 @@
|
|||
</Mode0>
|
||||
</Modes>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="1">
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="LazUtils"/>
|
||||
<PackageName Value="doublecmd_common"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LazUtils"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="6">
|
||||
<Unit0>
|
||||
|
|
|
|||
|
|
@ -52,20 +52,20 @@ type
|
|||
implementation
|
||||
|
||||
uses
|
||||
ActiveX, JwaWinError;
|
||||
ActiveX, JwaWinError, DCClassesUtf8;
|
||||
|
||||
{ TSfxSevenzipOutStream }
|
||||
|
||||
constructor TSfxSevenzipOutStream.Create(AStream: TStream; const ASfxModule: String);
|
||||
var
|
||||
SfxModule: TFileStream;
|
||||
SfxModule: TFileStreamEX;
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
FStream := AStream;
|
||||
FSfxModule := ASfxModule;
|
||||
|
||||
SfxModule:= TFileStream.Create(FSfxModule, fmOpenRead or fmShareDenyNone);
|
||||
SfxModule:= TFileStreamEx.Create(FSfxModule, fmOpenRead or fmShareDenyNone);
|
||||
try
|
||||
FStream.Seek(0, soBeginning);
|
||||
FSfxLength := FStream.CopyFrom(SfxModule, SfxModule.Size);
|
||||
|
|
|
|||
|
|
@ -2228,7 +2228,7 @@ const
|
|||
implementation
|
||||
|
||||
uses
|
||||
DCJclResources, DCJclCompression;
|
||||
DCJclResources, DCJclCompression, DCBasicTypes, DCOSUtils, DCDateTimeUtils, DCClassesUtf8;
|
||||
|
||||
const
|
||||
JclDefaultBufferSize = 131072; // 128k
|
||||
|
|
@ -3572,15 +3572,15 @@ var
|
|||
GZipStreamDateTime: TDateTime;
|
||||
begin
|
||||
Result := False;
|
||||
if not FileExists(SourceFile) then // can't copy what doesn't exist!
|
||||
if not mbFileExists(SourceFile) then // can't copy what doesn't exist!
|
||||
Exit;
|
||||
|
||||
GetFileLastWrite(SourceFile, GZipStreamDateTime);
|
||||
|
||||
{destination and source streams first and second}
|
||||
SourceStream := TFileStream.Create(SourceFile, fmOpenRead or fmShareDenyWrite);
|
||||
SourceStream := TFileStreamEx.Create(SourceFile, fmOpenRead or fmShareDenyWrite);
|
||||
try
|
||||
DestStream := TFileStream.Create(DestinationFile, fmCreate); // see SysUtils
|
||||
DestStream := TFileStreamEx.Create(DestinationFile, fmCreate); // see SysUtils
|
||||
try
|
||||
{ create compressionstream third, and copy from source,
|
||||
through zlib compress layer,
|
||||
|
|
@ -3598,7 +3598,7 @@ begin
|
|||
finally
|
||||
SourceStream.Free;
|
||||
end;
|
||||
Result := FileExists(DestinationFile);
|
||||
Result := mbFileExists(DestinationFile);
|
||||
end;
|
||||
|
||||
{ Decompress a .gz file }
|
||||
|
|
@ -3612,13 +3612,13 @@ var
|
|||
GZipStreamDateTime: TDateTime;
|
||||
begin
|
||||
Result := False;
|
||||
if not FileExists(SourceFile) then // can't copy what doesn't exist!
|
||||
if not mbFileExists(SourceFile) then // can't copy what doesn't exist!
|
||||
Exit;
|
||||
|
||||
{destination and source streams first and second}
|
||||
SourceStream := TFileStream.Create(SourceFile, {mode} fmOpenRead or fmShareDenyWrite);
|
||||
SourceStream := TFileStreamEx.Create(SourceFile, {mode} fmOpenRead or fmShareDenyWrite);
|
||||
try
|
||||
DestStream := TFileStream.Create(DestinationFile, {mode} fmCreate); // see SysUtils
|
||||
DestStream := TFileStreamEx.Create(DestinationFile, {mode} fmCreate); // see SysUtils
|
||||
try
|
||||
{ create decompressionstream third, and copy from source,
|
||||
through zlib decompress layer, out through file stream
|
||||
|
|
@ -3636,7 +3636,7 @@ begin
|
|||
finally
|
||||
SourceStream.Free;
|
||||
end;
|
||||
Result := FileExists(DestinationFile);
|
||||
Result := mbFileExists(DestinationFile);
|
||||
if Result and (GZipStreamDateTime <> 0) then
|
||||
// preserve datetime when unpacking! (see JclFileUtils)
|
||||
SetFileLastWrite(DestinationFile, GZipStreamDateTime);
|
||||
|
|
@ -3678,13 +3678,13 @@ var
|
|||
SourceStream: TFileStream;
|
||||
begin
|
||||
Result := False;
|
||||
if not FileExists(SourceFile) then // can't copy what doesn't exist!
|
||||
if not mbFileExists(SourceFile) then // can't copy what doesn't exist!
|
||||
Exit;
|
||||
|
||||
{destination and source streams first and second}
|
||||
SourceStream := TFileStream.Create(SourceFile, fmOpenRead or fmShareDenyWrite);
|
||||
SourceStream := TFileStreamEx.Create(SourceFile, fmOpenRead or fmShareDenyWrite);
|
||||
try
|
||||
DestStream := TFileStream.Create(DestinationFile, fmCreate); // see SysUtils
|
||||
DestStream := TFileStreamEx.Create(DestinationFile, fmCreate); // see SysUtils
|
||||
try
|
||||
{ create compressionstream third, and copy from source,
|
||||
through zlib compress layer,
|
||||
|
|
@ -3701,7 +3701,7 @@ begin
|
|||
finally
|
||||
SourceStream.Free;
|
||||
end;
|
||||
Result := FileExists(DestinationFile);
|
||||
Result := mbFileExists(DestinationFile);
|
||||
end;
|
||||
|
||||
{ Decompress a .bzip2 file }
|
||||
|
|
@ -3714,13 +3714,13 @@ var
|
|||
SourceStream: TFileStream;
|
||||
begin
|
||||
Result := False;
|
||||
if not FileExists(SourceFile) then // can't copy what doesn't exist!
|
||||
if not mbFileExists(SourceFile) then // can't copy what doesn't exist!
|
||||
Exit;
|
||||
|
||||
{destination and source streams first and second}
|
||||
SourceStream := TFileStream.Create(SourceFile, {mode} fmOpenRead or fmShareDenyWrite);
|
||||
SourceStream := TFileStreamEx.Create(SourceFile, {mode} fmOpenRead or fmShareDenyWrite);
|
||||
try
|
||||
DestStream := TFileStream.Create(DestinationFile, {mode} fmCreate); // see SysUtils
|
||||
DestStream := TFileStreamEx.Create(DestinationFile, {mode} fmCreate); // see SysUtils
|
||||
try
|
||||
{ create decompressionstream third, and copy from source,
|
||||
through zlib decompress layer, out through file stream
|
||||
|
|
@ -3737,7 +3737,7 @@ begin
|
|||
finally
|
||||
SourceStream.Free;
|
||||
end;
|
||||
Result := FileExists(DestinationFile);
|
||||
Result := mbFileExists(DestinationFile);
|
||||
end;
|
||||
|
||||
procedure BZip2Stream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = 5;
|
||||
|
|
@ -3775,25 +3775,25 @@ begin
|
|||
Result := nil;
|
||||
case StreamAccess of
|
||||
saCreate:
|
||||
Result := TFileStream.Create(FileName, fmCreate);
|
||||
Result := TFileStreamEx.Create(FileName, fmCreate);
|
||||
saReadOnly:
|
||||
if FileExists(FileName) then
|
||||
Result := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
|
||||
if mbFileExists(FileName) then
|
||||
Result := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite);
|
||||
saReadOnlyDenyNone:
|
||||
if FileExists(FileName) then
|
||||
Result := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
|
||||
if mbFileExists(FileName) then
|
||||
Result := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone);
|
||||
saWriteOnly:
|
||||
if FileExists(FileName) then
|
||||
Result := TFileStream.Create(FileName, fmOpenWrite)
|
||||
if mbFileExists(FileName) then
|
||||
Result := TFileStreamEx.Create(FileName, fmOpenWrite)
|
||||
else
|
||||
if FileName <> '' then
|
||||
Result := TFileStream.Create(FileName, fmCreate);
|
||||
Result := TFileStreamEx.Create(FileName, fmCreate);
|
||||
saReadWrite:
|
||||
if FileExists(FileName) then
|
||||
Result := TFileStream.Create(FileName, fmOpenReadWrite)
|
||||
if mbFileExists(FileName) then
|
||||
Result := TFileStreamEx.Create(FileName, fmOpenReadWrite)
|
||||
else
|
||||
if FileName <> '' then
|
||||
Result := TFileStream.Create(FileName, fmCreate);
|
||||
Result := TFileStreamEx.Create(FileName, fmCreate);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -3808,7 +3808,7 @@ end;
|
|||
|
||||
function TJclCompressionItem.DeleteOutputFile: Boolean;
|
||||
begin
|
||||
Result := (FFileName <> '') and FileExists(FFileName) and FileDelete(FFileName);
|
||||
Result := (FFileName <> '') and mbFileExists(FFileName) and mbDeleteFile(FFileName);
|
||||
end;
|
||||
|
||||
destructor TJclCompressionItem.Destroy;
|
||||
|
|
@ -3836,7 +3836,7 @@ begin
|
|||
Result := FCRC;
|
||||
end;
|
||||
|
||||
function TJclCompressionItem.GetCreationTime: TFileTime;
|
||||
function TJclCompressionItem.GetCreationTime: Windows.TFileTime;
|
||||
begin
|
||||
CheckGetProperty(ipCreationTime);
|
||||
Result := FCreationTime;
|
||||
|
|
@ -3891,13 +3891,13 @@ begin
|
|||
Result := ikFile;
|
||||
end;
|
||||
|
||||
function TJclCompressionItem.GetLastAccessTime: TFileTime;
|
||||
function TJclCompressionItem.GetLastAccessTime: Windows.TFileTime;
|
||||
begin
|
||||
CheckGetProperty(ipLastAccessTime);
|
||||
Result := FLastAccessTime;
|
||||
end;
|
||||
|
||||
function TJclCompressionItem.GetLastWriteTime: TFileTime;
|
||||
function TJclCompressionItem.GetLastWriteTime: Windows.TFileTime;
|
||||
begin
|
||||
CheckGetProperty(ipLastWriteTime);
|
||||
Result := FLastWriteTime;
|
||||
|
|
@ -4037,7 +4037,7 @@ begin
|
|||
Include(FValidProperties, ipCRC);
|
||||
end;
|
||||
|
||||
procedure TJclCompressionItem.SetCreationTime(const Value: TFileTime);
|
||||
procedure TJclCompressionItem.SetCreationTime(const Value: Windows.TFileTime);
|
||||
begin
|
||||
CheckSetProperty(ipCreationTime);
|
||||
FCreationTime := Value;
|
||||
|
|
@ -4066,7 +4066,7 @@ end;
|
|||
|
||||
procedure TJclCompressionItem.SetFileName(const Value: TFileName);
|
||||
var
|
||||
AFindData: TWin32FindData;
|
||||
AFindData: TFileAttributeData;
|
||||
begin
|
||||
CheckSetProperty(ipFileName);
|
||||
FFileName := Value;
|
||||
|
|
@ -4081,20 +4081,19 @@ begin
|
|||
Exclude(FValidProperties, ipFileName);
|
||||
end;
|
||||
|
||||
if (Value <> '') and (FArchive is TJclCompressionArchive)
|
||||
and GetFileAttributesEx(PChar(Value), GetFileExInfoStandard, @AFindData) then
|
||||
if (Value <> '') and (FArchive is TJclCompressionArchive) and mbFileGetAttr(Value, AFindData) then
|
||||
begin
|
||||
FileSize := (Int64(AFindData.nFileSizeHigh) shl 32) or AFindData.nFileSizeLow;
|
||||
Attributes := AFindData.dwFileAttributes;
|
||||
CreationTime := AFindData.ftCreationTime;
|
||||
LastAccessTime := AFindData.ftLastAccessTime;
|
||||
LastWriteTime := AFindData.ftLastWriteTime;
|
||||
FileSize := AFindData.Size;
|
||||
Attributes := AFindData.Attr;
|
||||
CreationTime := Windows.TFileTime(FileTimeToWinFileTime(AFindData.PlatformTime));
|
||||
LastAccessTime := Windows.TFileTime(FileTimeToWinFileTime(AFindData.LastAccessTime));
|
||||
LastWriteTime := Windows.TFileTime(FileTimeToWinFileTime(AFindData.LastWriteTime));
|
||||
// TODO: user name and group (using file handle and GetSecurityInfo)
|
||||
{$IFDEF MSWINDOWS}
|
||||
HostOS := LoadResString(@RsCompression7zWindows);
|
||||
HostOS := WideString(LoadResString(@RsCompression7zWindows));
|
||||
{$ENDIF MSWINDOWS}
|
||||
{$IFDEF UNIX}
|
||||
HostOS := LoadResString(@RsCompression7zUnix);
|
||||
HostOS := WideString(LoadResString(@RsCompression7zUnix));
|
||||
{$ENDIF UNIX}
|
||||
end;
|
||||
end;
|
||||
|
|
@ -4131,7 +4130,7 @@ begin
|
|||
Include(FValidProperties, ipHostOS);
|
||||
end;
|
||||
|
||||
procedure TJclCompressionItem.SetLastAccessTime(const Value: TFileTime);
|
||||
procedure TJclCompressionItem.SetLastAccessTime(const Value: Windows.TFileTime);
|
||||
begin
|
||||
CheckSetProperty(ipLastAccessTime);
|
||||
FLastAccessTime := Value;
|
||||
|
|
@ -4139,7 +4138,7 @@ begin
|
|||
Include(FValidProperties, ipLastAccessTime);
|
||||
end;
|
||||
|
||||
procedure TJclCompressionItem.SetLastWriteTime(const Value: TFileTime);
|
||||
procedure TJclCompressionItem.SetLastWriteTime(const Value: Windows.TFileTime);
|
||||
begin
|
||||
CheckSetProperty(ipLastWriteTime);
|
||||
FLastWriteTime := Value;
|
||||
|
|
@ -4226,53 +4225,58 @@ begin
|
|||
end;
|
||||
|
||||
function TJclCompressionItem.UpdateFileTimes: Boolean;
|
||||
const
|
||||
FILE_WRITE_ATTRIBUTES = $00000100;
|
||||
var
|
||||
FileHandle: HFILE;
|
||||
ACreationTime, ALastAccessTime, ALastWriteTime: PFileTime;
|
||||
AFileTime: PFileTime;
|
||||
ACreationTime, ALastAccessTime, ALastWriteTime: TFileTimeEx;
|
||||
begin
|
||||
ReleaseStream;
|
||||
Result := FFileName <> '';
|
||||
if Result then
|
||||
begin
|
||||
FileHandle := CreateFile(PChar(FFileName), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ, nil, OPEN_ALWAYS, 0, 0);
|
||||
try
|
||||
// creation time should be the oldest
|
||||
if ipCreationTime in FValidProperties then
|
||||
ACreationTime := @FCreationTime
|
||||
else
|
||||
if ipLastWriteTime in FValidProperties then
|
||||
ACreationTime := @FLastWriteTime
|
||||
else
|
||||
if ipLastAccessTime in FValidProperties then
|
||||
ACreationTime := @FLastAccessTime
|
||||
else
|
||||
ACreationTime := nil;
|
||||
|
||||
// last access time may default to now if not set
|
||||
if ipLastAccessTime in FValidProperties then
|
||||
ALastAccessTime := @FLastAccessTime
|
||||
else
|
||||
ALastAccessTime := nil;
|
||||
|
||||
// last write time may, if not set, be the creation time or last access time
|
||||
if ipLastWriteTime in FValidProperties then
|
||||
ALastWriteTime := @FLastWriteTime
|
||||
else
|
||||
if ipCreationTime in FValidProperties then
|
||||
ALastWriteTime := @FCreationTime
|
||||
else
|
||||
if ipLastAccessTime in FValidProperties then
|
||||
ALastWriteTime := @FLastAccessTime
|
||||
else
|
||||
ALastWriteTime := nil;
|
||||
|
||||
Result := (FileHandle <> INVALID_HANDLE_VALUE) and SetFileTime(FileHandle, ACreationTime, ALastAccessTime,
|
||||
ALastWriteTime);
|
||||
finally
|
||||
CloseHandle(FileHandle);
|
||||
// creation time should be the oldest
|
||||
if ipCreationTime in FValidProperties then
|
||||
AFileTime := @FCreationTime
|
||||
else
|
||||
if ipLastWriteTime in FValidProperties then
|
||||
AFileTime := @FLastWriteTime
|
||||
else
|
||||
if ipLastAccessTime in FValidProperties then
|
||||
AFileTime := @FLastAccessTime
|
||||
else begin
|
||||
AFileTime := nil;
|
||||
end;
|
||||
if Assigned(AFileTime) then
|
||||
ACreationTime := WinFileTimeToFileTimeEx(TWinFileTime(AFileTime^))
|
||||
else begin
|
||||
ACreationTime := TFileTimeExNull;
|
||||
end;
|
||||
|
||||
// last access time may default to now if not set
|
||||
if ipLastAccessTime in FValidProperties then
|
||||
ALastAccessTime := WinFileTimeToFileTimeEx(TWinFileTime(FLastAccessTime))
|
||||
else begin
|
||||
ALastAccessTime := TFileTimeExNull;
|
||||
end;
|
||||
|
||||
// last write time may, if not set, be the creation time or last access time
|
||||
if ipLastWriteTime in FValidProperties then
|
||||
AFileTime := @FLastWriteTime
|
||||
else
|
||||
if ipCreationTime in FValidProperties then
|
||||
AFileTime := @FCreationTime
|
||||
else
|
||||
if ipLastAccessTime in FValidProperties then
|
||||
AFileTime := @FLastAccessTime
|
||||
else begin
|
||||
AFileTime := nil;
|
||||
end;
|
||||
if Assigned(AFileTime) then
|
||||
ALastWriteTime := WinFileTimeToFileTimeEx(TWinFileTime(AFileTime^))
|
||||
else begin
|
||||
ALastWriteTime := TFileTimeExNull;
|
||||
end;
|
||||
|
||||
Result := mbFileSetTimeEx(FFileName, ALastWriteTime, ACreationTime, ALastAccessTime);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -4502,7 +4506,7 @@ begin
|
|||
Result := nil;
|
||||
|
||||
// load archive to test signature
|
||||
ArchiveStream := TFileStream.Create(AFileName, fmOpenRead and fmShareDenyNone);
|
||||
ArchiveStream := TFileStreamEx.Create(AFileName, fmOpenRead and fmShareDenyNone);
|
||||
try
|
||||
for Index := Low(MatchingFormats) to High(MatchingFormats) do
|
||||
if SignatureMatches(MatchingFormats[Index], ArchiveStream, Buffer) then
|
||||
|
|
@ -4578,7 +4582,7 @@ begin
|
|||
Result := nil;
|
||||
|
||||
// load archive to test signature
|
||||
ArchiveStream := TFileStream.Create(AFileName, fmOpenRead and fmShareDenyNone);
|
||||
ArchiveStream := TFileStreamEx.Create(AFileName, fmOpenRead and fmShareDenyNone);
|
||||
try
|
||||
for Index := Low(MatchingFormats) to High(MatchingFormats) do
|
||||
if SignatureMatches(MatchingFormats[Index], ArchiveStream, Buffer) then
|
||||
|
|
@ -5165,7 +5169,7 @@ function TJclCompressArchive.AddFile(const PackedName: WideString;
|
|||
AStream: TStream; AOwnsStream: Boolean): Integer;
|
||||
var
|
||||
AItem: TJclCompressionItem;
|
||||
NowFileTime: TFileTime;
|
||||
NowFileTime: Windows.TFileTime;
|
||||
begin
|
||||
CheckNotCompressing;
|
||||
|
||||
|
|
@ -5175,16 +5179,16 @@ begin
|
|||
AItem.Stream := AStream;
|
||||
AItem.OwnsStream := AOwnsStream;
|
||||
AItem.FileSize := AStream.Size - AStream.Position;
|
||||
NowFileTime := LocalDateTimeToFileTime(Now);
|
||||
NowFileTime := Windows.TFileTime(DateTimeToWinFileTime(Now));
|
||||
AItem.Attributes := faReadOnly and faArchive;
|
||||
AItem.CreationTime := NowFileTime;
|
||||
AItem.LastAccessTime := NowFileTime;
|
||||
AItem.LastWriteTime := NowFileTime;
|
||||
{$IFDEF MSWINDOWS}
|
||||
AItem.HostOS := LoadResString(@RsCompression7zWindows);
|
||||
AItem.HostOS := WideString(LoadResString(@RsCompression7zWindows));
|
||||
{$ENDIF MSWINDOWS}
|
||||
{$IFDEF UNIX}
|
||||
AItem.HostOS := LoadResString(@RsCompression7zUnix);
|
||||
AItem.HostOS := WideString(LoadResString(@RsCompression7zUnix));
|
||||
{$ENDIF UNIX}
|
||||
except
|
||||
AItem.Destroy;
|
||||
|
|
@ -5585,7 +5589,7 @@ begin
|
|||
if AVolume.OwnsTmpStream then
|
||||
begin
|
||||
FreeAndNil(AVolume.FTmpStream);
|
||||
FileDelete(AVolume.TmpFileName);
|
||||
mbDeleteFile(AVolume.TmpFileName);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
|
@ -6804,7 +6808,7 @@ begin
|
|||
if AVolume.OwnsStream then
|
||||
begin
|
||||
FreeAndNil(AVolume.FStream);
|
||||
FileDelete(AVolume.FileName);
|
||||
mbDeleteFile(AVolume.FileName);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
|
|
|||
101
plugins/wcx/unrar/language/unrar.de.po
Normal file
101
plugins/wcx/unrar/language/unrar.de.po
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Double Commander Plugin 'unrar'\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2024-11-01 18:01+0100\n"
|
||||
"Last-Translator: ㋡ <braass@mail.de>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: tdialogbox.caption
|
||||
msgid "Options"
|
||||
msgstr "Optionen"
|
||||
|
||||
#: tdialogbox.lblpath.caption
|
||||
msgid "Path to Win&RAR executable"
|
||||
msgstr "Pfad zur ausführbaren Win&RAR-Datei"
|
||||
|
||||
#: tdialogbox.gboptions.caption
|
||||
msgid "Archiving options"
|
||||
msgstr "Optionen für die Archivierung"
|
||||
|
||||
#: tdialogbox.gboptions.chkrecovery.caption
|
||||
msgid "Add r&ecovery record"
|
||||
msgstr "Wiederherstellungs&eintrag hinzufügen"
|
||||
|
||||
#: tdialogbox.gboptions.chkencrypt.caption
|
||||
msgid "Encrypt file &names"
|
||||
msgstr "Datei&namen verschlüsseln"
|
||||
|
||||
#: tdialogbox.gboptions.chksolid.caption
|
||||
msgid "Create &solid archive"
|
||||
msgstr "&Solide (progressiv) komprimiertes Archiv erstellen"
|
||||
|
||||
#: tdialogbox.lblmethod.caption
|
||||
msgid "&Compression method"
|
||||
msgstr "&Komprimierungsmethode"
|
||||
|
||||
#: tdialogbox.brncancel.caption
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: tdialogbox.btnsave.caption
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: tdialogbox.lblargs.caption
|
||||
msgid "Additional parameters"
|
||||
msgstr "Zusätzliche Parameter"
|
||||
|
||||
#: rarlng.rsdictlargewarning
|
||||
msgid "Large dictionary warning"
|
||||
msgstr ""
|
||||
"\"Großes Wörterbuch\"-Warnung (es fallen extrem viele Ersatzsymbole für "
|
||||
"Zeichenfolgen an)"
|
||||
|
||||
#: rarlng.rsdictnotallowed
|
||||
#, object-pascal-format
|
||||
msgid ""
|
||||
"%u GB dictionary exceeds %u GB limit and needs more than %u GB memory to "
|
||||
"unpack."
|
||||
msgstr ""
|
||||
"%u GB \"Wörterbuch\" übersteigt %u GB Grenze und braucht mehr als %u GB "
|
||||
"Speicher zum Entpacken."
|
||||
|
||||
#: rarlng.rsmsgbuttoncancel
|
||||
msgid "&Cancel"
|
||||
msgstr "Abbre&chen"
|
||||
|
||||
#: rarlng.rsmsgbuttonextract
|
||||
msgid "&Extract"
|
||||
msgstr "&Entpacke einzelne Datei(en)"
|
||||
|
||||
#: rarlng.rsmsgpasswordenter
|
||||
msgid "Please enter the password:"
|
||||
msgstr "Bitte Passwort eingeben:"
|
||||
|
||||
#: rarlng.rsmsgexecutablenotfound
|
||||
#, object-pascal-format
|
||||
msgid ""
|
||||
"Cannot find RAR executable!\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Please check the plugin settings."
|
||||
msgstr ""
|
||||
"Ausführbares RAR-Programm nicht gefunden!\n"
|
||||
"\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"Bitte überprüfen Sie die Einstellungen des Plugins."
|
||||
|
||||
#: rarlng.rsmsglibrarynotfound
|
||||
#, object-pascal-format
|
||||
msgid "Cannot load library %s! Please check your installation."
|
||||
msgstr ""
|
||||
"Kann Bibliothek %s nicht laden! Bitte überprüfen Sie Ihre Installation."
|
||||
77
plugins/wcx/zip/language/zip.de.po
Normal file
77
plugins/wcx/zip/language/zip.de.po
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Double Commander Plugin 'zip'\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2024-11-01 18:01+0100\n"
|
||||
"Last-Translator: ㋡ <braass@mail.de>\n"
|
||||
"Language-Team: Deutsch <braass@mail.de>\n"
|
||||
"Language: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: tdialogbox.caption
|
||||
msgid "Zip plugin configuration"
|
||||
msgstr "Zip-Plugin Konfiguration"
|
||||
|
||||
#: tdialogbox.lblAbout.caption
|
||||
msgid "Zip plugin supports PKZIP-compatible, TAR, XZ, GZip, Zstandard and BZip2 data compression and archiving."
|
||||
msgstr "Zip-Plugin unterstützt PKZIP-kompatible, TAR, XZ, GZip, Zstandard and BZip2 Komprimierung und Archivierung von Daten."
|
||||
|
||||
#: tdialogbox.gbCompression.caption
|
||||
msgid "Compression"
|
||||
msgstr "Komprimierung"
|
||||
|
||||
#: tdialogbox.gbCompression.lblArchiveFormat.caption
|
||||
msgid "Archive format:"
|
||||
msgstr "Format des Archivs:"
|
||||
|
||||
#: tdialogbox.gbCompression.lblCompressionMethod.caption
|
||||
msgid "Compression method:"
|
||||
msgstr "Komprimierungsmethode:"
|
||||
|
||||
#: tdialogbox.gbCompression.lblCompressionLevel.caption
|
||||
msgid "Compression level:"
|
||||
msgstr "Komprimierungsgrad:"
|
||||
|
||||
#: tdialogbox.chkTarAutoHandle.caption
|
||||
msgid "Open *.tar.xyz archives at one step (slowly with big archives)"
|
||||
msgstr "*.tar.xyz Archive in einem Schritt öffnen (langsam bei großen Archiven)"
|
||||
|
||||
#: tdialogbox.btnCancel.caption
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: tdialogbox.btnOK.caption
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: ziplng.rscompressionmethodstore
|
||||
msgid "Store"
|
||||
msgstr "Speichern"
|
||||
|
||||
#: ziplng.rscompressionmethodoptimal
|
||||
msgid "Optimal (2x slower)"
|
||||
msgstr "Optimal (2x langsamer)"
|
||||
|
||||
#: ziplng.rscompressionlevelfastest
|
||||
msgid "Fastest"
|
||||
msgstr "Am schnellsten"
|
||||
|
||||
#: ziplng.rscompressionlevelfast
|
||||
msgid "Fast"
|
||||
msgstr "Schnell"
|
||||
|
||||
#: ziplng.rscompressionlevelnormal
|
||||
msgid "Normal"
|
||||
msgstr "Normal"
|
||||
|
||||
#: ziplng.rscompressionlevelmaximum
|
||||
msgid "Maximum"
|
||||
msgstr "Maximum"
|
||||
|
||||
#: ziplng.rscompressionlevelultra
|
||||
msgid "Ultra"
|
||||
msgstr "Extrem"
|
||||
|
|
@ -1,16 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Project-Id-Version: Double Commander Plugin 'ftp'\n"
|
||||
"Project-Id-Version: Double Commander Plugin 'ftp'\n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: ㋡ <braass@mail.de>\n"
|
||||
"PO-Revision-Date: 2024-11-01 18:01+0100\n"
|
||||
"Last-Translator: ㋡ <braass@mail.de>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de_DE\n"
|
||||
"X-Generator: Poedit 2.3\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: tdialogbox.btnadd.caption
|
||||
msgid "+"
|
||||
|
|
@ -43,7 +43,7 @@ msgstr "FTP"
|
|||
|
||||
#: tdialogbox.chkagentssh.caption
|
||||
msgid "Use SSH-agent authentication"
|
||||
msgstr ""
|
||||
msgstr "SSH-Agent-Authentifizierung verwenden"
|
||||
|
||||
#: tdialogbox.chkcopyscp.caption
|
||||
msgid "Copy using SCP protocol (faster)"
|
||||
|
|
@ -129,7 +129,7 @@ msgstr "&Passwort:"
|
|||
|
||||
#: tdialogbox.lblproxyuser.caption
|
||||
msgid "&User name:"
|
||||
msgstr "Benutzername:"
|
||||
msgstr "Ben&utzername:"
|
||||
|
||||
#: tdialogbox.lblpublickey.caption
|
||||
msgid "Public key file (*.pub):"
|
||||
|
|
@ -161,5 +161,5 @@ msgstr "Proxy"
|
|||
|
||||
#: tfrmfileproperties.caption
|
||||
msgid "Properties"
|
||||
msgstr ""
|
||||
msgstr "Eigenschaften"
|
||||
|
||||
|
|
|
|||
|
|
@ -574,9 +574,21 @@ begin
|
|||
end;
|
||||
|
||||
procedure TFTPSendEx.OnSocketStatus(Sender: TObject; Reason: THookSocketReason; const Value: String);
|
||||
var
|
||||
MsgType: Integer;
|
||||
begin
|
||||
if (Reason in [HR_Error]) and (Length(Value) > 0) then
|
||||
LogProc(PluginNumber, msgtype_importanterror, PWideChar(ServerToClient(Value)));
|
||||
if (Reason in [HR_ResolvingBegin, HR_ResolvingEnd, HR_Error]) then
|
||||
begin
|
||||
if (Length(Value) > 0) then
|
||||
begin
|
||||
if Reason = HR_Error then
|
||||
MsgType:= msgtype_importanterror
|
||||
else begin
|
||||
MsgType:= msgtype_details;
|
||||
end;
|
||||
LogProc(PluginNumber, MsgType, PWideChar(ServerToClient(Value)));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TFTPSendEx.ClientToServer(const Value: AnsiString): AnsiString;
|
||||
|
|
|
|||
|
|
@ -446,6 +446,86 @@ function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Wor
|
|||
{==============================================================================}
|
||||
implementation
|
||||
|
||||
uses
|
||||
InitC;
|
||||
|
||||
{$if defined(LINUX) or defined(OPENBSD)}
|
||||
{$define FIRST_ADDR_THEN_CANONNAME}
|
||||
{$elseif defined(FREEBSD) or defined(NETBSD) or defined(DRAGONFLY) or defined(SOLARIS) or defined(ANDROID) or defined(DARWIN) or defined(HAIKU)}
|
||||
{$define FIRST_CANONNAME_THEN_ADDR}
|
||||
{$else}
|
||||
{$error fatal 'Please consult the netdb.h file for your system to determine the order of ai_addr and ai_canonname'}
|
||||
{$endif}
|
||||
|
||||
{$push}{$packrecords c}
|
||||
type
|
||||
PAddrInfo = ^addrinfo;
|
||||
addrinfo = record
|
||||
ai_flags: cint; {* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST *}
|
||||
ai_family: cint; {* PF_xxx *}
|
||||
ai_socktype: cint; {* SOCK_xxx *}
|
||||
ai_protocol: cint; {* 0 or IPPROTO_xxx for IPv4 and IPv6 *}
|
||||
ai_addrlen: TSockLen; {* length of ai_addr *}
|
||||
{$ifdef FIRST_CANONNAME_THEN_ADDR}
|
||||
ai_canonname: PAnsiChar; {* canonical name for hostname *}
|
||||
ai_addr: psockaddr; {* binary address *}
|
||||
{$endif}
|
||||
{$ifdef FIRST_ADDR_THEN_CANONNAME}
|
||||
ai_addr: psockaddr; {* binary address *}
|
||||
ai_canonname: PAnsiChar; {* canonical name for hostname *}
|
||||
{$endif}
|
||||
ai_next: PAddrInfo; {* next structure in linked list *}
|
||||
end;
|
||||
TAddrInfo = addrinfo;
|
||||
PPAddrInfo = ^PAddrInfo;
|
||||
{$pop}
|
||||
|
||||
function getaddrinfo(name, service: PAnsiChar; hints: PAddrInfo; res: PPAddrInfo): cint; cdecl; external clib;
|
||||
procedure freeaddrinfo(ai: PAddrInfo); cdecl; external clib;
|
||||
|
||||
function ResolveName(const HostName: String; Addresses: Pointer; MaxAddresses, Family: Integer): Integer; overload;
|
||||
var
|
||||
hints: TAddrInfo;
|
||||
res, ai: PAddrInfo;
|
||||
begin
|
||||
Result:= -1;
|
||||
if MaxAddresses = 0 then Exit;
|
||||
res:= nil;
|
||||
hints:= Default(TAddrInfo);
|
||||
hints.ai_family:= Family;
|
||||
hints.ai_socktype:= SOCK_STREAM;
|
||||
if (getaddrinfo(PAnsiChar(HostName), nil, @hints, @res) <> 0) or (res = nil) then
|
||||
Exit;
|
||||
ai:= res;
|
||||
Result:= 0;
|
||||
repeat
|
||||
if ai^.ai_family = Family then
|
||||
begin
|
||||
if Family = AF_INET then
|
||||
begin
|
||||
Move(PInetSockAddr(ai^.ai_addr)^.sin_addr, Addresses^, SizeOf(TInAddr));
|
||||
Inc(PInAddr(Addresses));
|
||||
end
|
||||
else begin
|
||||
Move(PInetSockAddr6(ai^.ai_addr)^.sin6_addr, Addresses^, SizeOf(TIn6Addr));
|
||||
Inc(PIn6Addr(Addresses));
|
||||
end;
|
||||
Inc(Result);
|
||||
end;
|
||||
ai:= ai^.ai_next;
|
||||
until (ai = nil) or (Result >= MaxAddresses);
|
||||
freeaddrinfo(res);
|
||||
end;
|
||||
|
||||
function ResolveName(HostName: String; var Addresses: array of THostAddr): Integer; overload;
|
||||
begin
|
||||
Result:= ResolveName(HostName, @Addresses, Length(Addresses), AF_INET);
|
||||
end;
|
||||
|
||||
function ResolveName6(HostName: String; var Addresses: array of THostAddr6): Integer;
|
||||
begin
|
||||
Result:= ResolveName(HostName, @Addresses, Length(Addresses), AF_INET6);
|
||||
end;
|
||||
|
||||
function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean;
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -254,6 +254,7 @@ begin
|
|||
item.initPath( pchar(filepath) );
|
||||
end;
|
||||
view.setPreviewItem( item );
|
||||
item.release;
|
||||
end;
|
||||
|
||||
function ListLoad( ParentWin:THandle; FileToLoad:pchar; {%H-}ShowFlags:integer):THandle; cdecl;
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/>
|
||||
<UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/>
|
||||
<SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/>
|
||||
</SearchPaths>
|
||||
|
|
@ -87,7 +87,7 @@
|
|||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/>
|
||||
<UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/>
|
||||
<SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/>
|
||||
</SearchPaths>
|
||||
|
|
@ -126,7 +126,7 @@
|
|||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/>
|
||||
<UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/>
|
||||
<SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/>
|
||||
</SearchPaths>
|
||||
|
|
@ -200,7 +200,7 @@ end;"/>
|
|||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;..\components\DDetours\Source;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;..\components\DDetours\Source;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/>
|
||||
<UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/>
|
||||
<SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/>
|
||||
</SearchPaths>
|
||||
|
|
@ -311,7 +311,7 @@ end;"/>
|
|||
<PackageName Value="Image32"/>
|
||||
</Item13>
|
||||
</RequiredPackages>
|
||||
<Units Count="276">
|
||||
<Units Count="277">
|
||||
<Unit0>
|
||||
<Filename Value="doublecmd.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
|
|
@ -1347,6 +1347,7 @@ end;"/>
|
|||
<Unit167>
|
||||
<Filename Value="filesources\vfs\uvfsfilesource.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="uVfsFileSource"/>
|
||||
</Unit167>
|
||||
<Unit168>
|
||||
<Filename Value="filesources\vfs\uvfslistoperation.pas"/>
|
||||
|
|
@ -2010,6 +2011,11 @@ end;"/>
|
|||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="uDarwinFinderModel"/>
|
||||
</Unit275>
|
||||
<Unit276>
|
||||
<Filename Value="filesources\gio\network\unetworkfilesource.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="uNetworkFileSource"/>
|
||||
</Unit276>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
|
@ -2020,7 +2026,7 @@ end;"/>
|
|||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt"/>
|
||||
<OtherUnitFiles Value="platform;platform\$(SrcOS);platform\$(SrcOS)\$(TargetOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio;rpc;rpc\sys\$(SrcOS);rpc\sys;filesources\recyclebin;filesources\gio\trash;filesources\winnet\wsl;filesources\shellfolder;platform\win\winrt;filesources\gio\network"/>
|
||||
<UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/>
|
||||
<SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/>
|
||||
</SearchPaths>
|
||||
|
|
|
|||
|
|
@ -12,14 +12,13 @@ inherited frmCheckSumCalc: TfrmCheckSumCalc
|
|||
Constraints.MinWidth = 400
|
||||
OnCreate = FormCreate
|
||||
OnShow = FormShow
|
||||
Position = poScreenCenter
|
||||
SessionProperties = 'cbOpenAfterJobIsComplete.Checked;cbSeparateFile.Checked;lbHashAlgorithm.ItemIndex'
|
||||
Position = poOwnerFormCenter
|
||||
SessionProperties = 'cbOpenAfterJobIsComplete.Checked;cbSeparateFile.Checked;lbHashAlgorithm.ItemIndex;cbSeparateFolder.Checked'
|
||||
inherited pnlContent: TPanel
|
||||
Height = 346
|
||||
Width = 384
|
||||
ClientHeight = 346
|
||||
ClientWidth = 384
|
||||
ParentColor = True
|
||||
object lblSaveTo: TLabel[0]
|
||||
Left = 0
|
||||
Height = 15
|
||||
|
|
@ -51,10 +50,10 @@ inherited frmCheckSumCalc: TfrmCheckSumCalc
|
|||
Height = 19
|
||||
Top = 50
|
||||
Width = 242
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Top = 4
|
||||
Caption = 'C&reate separate checksum file for each file'
|
||||
OnChange = cbSeparateFileChange
|
||||
TabOrder = 1
|
||||
OnChange = cbSeparateFileChange
|
||||
end
|
||||
object lbHashAlgorithm: TListBox[3]
|
||||
AnchorSideLeft.Control = edtSaveTo
|
||||
|
|
@ -70,21 +69,21 @@ inherited frmCheckSumCalc: TfrmCheckSumCalc
|
|||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 6
|
||||
ItemHeight = 0
|
||||
TabOrder = 6
|
||||
OnSelectionChange = lbHashAlgorithmSelectionChange
|
||||
TabOrder = 5
|
||||
end
|
||||
object cbOpenAfterJobIsComplete: TCheckBox[4]
|
||||
AnchorSideLeft.Control = edtSaveTo
|
||||
AnchorSideTop.Control = cbSeparateFile
|
||||
AnchorSideTop.Control = cbSeparateFolder
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 19
|
||||
Top = 75
|
||||
Top = 102
|
||||
Width = 243
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Top = 4
|
||||
Caption = 'Open checksum file after job is completed'
|
||||
TabOrder = 3
|
||||
OnChange = cbSeparateFileChange
|
||||
TabOrder = 2
|
||||
end
|
||||
object lblFileFormat: TLabel[5]
|
||||
AnchorSideLeft.Control = cbOpenAfterJobIsComplete
|
||||
|
|
@ -92,7 +91,7 @@ inherited frmCheckSumCalc: TfrmCheckSumCalc
|
|||
AnchorSideTop.Side = asrCenter
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 102
|
||||
Top = 131
|
||||
Width = 57
|
||||
BorderSpacing.Top = 6
|
||||
Caption = 'File &format'
|
||||
|
|
@ -106,12 +105,12 @@ inherited frmCheckSumCalc: TfrmCheckSumCalc
|
|||
AnchorSideTop.Side = asrBottom
|
||||
Left = 69
|
||||
Height = 19
|
||||
Top = 100
|
||||
Top = 129
|
||||
Width = 69
|
||||
BorderSpacing.Left = 12
|
||||
BorderSpacing.Top = 6
|
||||
Caption = 'Windows'
|
||||
TabOrder = 3
|
||||
TabOrder = 4
|
||||
end
|
||||
object rbUnix: TRadioButton[7]
|
||||
AnchorSideLeft.Control = rbWindows
|
||||
|
|
@ -120,18 +119,30 @@ inherited frmCheckSumCalc: TfrmCheckSumCalc
|
|||
AnchorSideTop.Side = asrCenter
|
||||
Left = 144
|
||||
Height = 19
|
||||
Top = 100
|
||||
Top = 129
|
||||
Width = 44
|
||||
BorderSpacing.Left = 6
|
||||
Caption = 'Unix'
|
||||
TabOrder = 4
|
||||
TabOrder = 5
|
||||
end
|
||||
object cbSeparateFolder: TCheckBox[8]
|
||||
AnchorSideLeft.Control = cbSeparateFile
|
||||
AnchorSideTop.Control = cbSeparateFile
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 21
|
||||
Top = 77
|
||||
Width = 300
|
||||
BorderSpacing.Top = 4
|
||||
Caption = 'Create separate checksum file for each &directory'
|
||||
TabOrder = 2
|
||||
OnChange = cbSeparateFolderChange
|
||||
end
|
||||
end
|
||||
inherited pnlButtons: TPanel
|
||||
Top = 358
|
||||
Width = 384
|
||||
ClientWidth = 384
|
||||
Color = clDefault
|
||||
inherited btnCancel: TBitBtn
|
||||
Left = 202
|
||||
end
|
||||
|
|
|
|||
|
|
@ -5,5 +5,6 @@
|
|||
{"hash":20936404,"name":"tfrmchecksumcalc.cbopenafterjobiscomplete.caption","sourcebytes":[79,112,101,110,32,99,104,101,99,107,115,117,109,32,102,105,108,101,32,97,102,116,101,114,32,106,111,98,32,105,115,32,99,111,109,112,108,101,116,101,100],"value":"Open checksum file after job is completed"},
|
||||
{"hash":136754340,"name":"tfrmchecksumcalc.lblfileformat.caption","sourcebytes":[70,105,108,101,32,38,102,111,114,109,97,116],"value":"File &format"},
|
||||
{"hash":235189939,"name":"tfrmchecksumcalc.rbwindows.caption","sourcebytes":[87,105,110,100,111,119,115],"value":"Windows"},
|
||||
{"hash":378120,"name":"tfrmchecksumcalc.rbunix.caption","sourcebytes":[85,110,105,120],"value":"Unix"}
|
||||
{"hash":378120,"name":"tfrmchecksumcalc.rbunix.caption","sourcebytes":[85,110,105,120],"value":"Unix"},
|
||||
{"hash":75632937,"name":"tfrmchecksumcalc.cbseparatefolder.caption","sourcebytes":[67,114,101,97,116,101,32,115,101,112,97,114,97,116,101,32,99,104,101,99,107,115,117,109,32,102,105,108,101,32,102,111,114,32,101,97,99,104,32,38,100,105,114,101,99,116,111,114,121],"value":"Create separate checksum file for each &directory"}
|
||||
]}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
-------------------------------------------------------------------------
|
||||
Calculate checksum dialog
|
||||
|
||||
Copyright (C) 2009-2023 Alexander Koblov (alexx2000@mail.ru)
|
||||
Copyright (C) 2009-2024 Alexander Koblov (alexx2000@mail.ru)
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -36,6 +36,7 @@ type
|
|||
TfrmCheckSumCalc = class(TfrmButtonForm)
|
||||
cbSeparateFile: TCheckBox;
|
||||
cbOpenAfterJobIsComplete: TCheckBox;
|
||||
cbSeparateFolder: TCheckBox;
|
||||
edtSaveTo: TEdit;
|
||||
lblFileFormat: TLabel;
|
||||
lblSaveTo: TLabel;
|
||||
|
|
@ -43,6 +44,7 @@ type
|
|||
rbWindows: TRadioButton;
|
||||
rbUnix: TRadioButton;
|
||||
procedure cbSeparateFileChange(Sender: TObject);
|
||||
procedure cbSeparateFolderChange(Sender: TObject);
|
||||
procedure edtSaveToChange(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
|
|
@ -50,16 +52,18 @@ type
|
|||
private
|
||||
FFileName: String;
|
||||
FAlgorithm: THashAlgorithm;
|
||||
procedure Change(Sender, Alien: TCheckBox);
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
function ShowCalcCheckSum(var sFileName: String; out SeparateFile: Boolean;
|
||||
function ShowCalcCheckSum(TheOwner: TComponent; var sFileName: String;
|
||||
out SeparateFile: Boolean; out SeparateFolder: Boolean;
|
||||
out HashAlgorithm: THashAlgorithm; out OpenFileAfterJobCompleted: Boolean;
|
||||
out TextLineBreakStyle: TTextLineBreakStyle;
|
||||
out QueueId: TOperationsManagerQueueIdentifier): Boolean;
|
||||
|
||||
function ShowCalcVerifyCheckSum(out Hash: String; out HashAlgorithm: THashAlgorithm;
|
||||
function ShowCalcVerifyCheckSum(TheOwner: TComponent; out Hash: String; out HashAlgorithm: THashAlgorithm;
|
||||
out QueueId: TOperationsManagerQueueIdentifier): Boolean;
|
||||
|
||||
implementation
|
||||
|
|
@ -69,14 +73,15 @@ implementation
|
|||
uses
|
||||
uGlobs, uLng;
|
||||
|
||||
function ShowCalcCheckSum(var sFileName: String; out SeparateFile: Boolean; out
|
||||
function ShowCalcCheckSum(TheOwner: TComponent; var sFileName: String; out
|
||||
SeparateFile: Boolean; out SeparateFolder: Boolean; out
|
||||
HashAlgorithm: THashAlgorithm; out OpenFileAfterJobCompleted: Boolean; out
|
||||
TextLineBreakStyle: TTextLineBreakStyle; out
|
||||
QueueId: TOperationsManagerQueueIdentifier): Boolean;
|
||||
const
|
||||
TextLineBreak: array[Boolean] of TTextLineBreakStyle = (tlbsLF, tlbsCRLF);
|
||||
begin
|
||||
with TfrmCheckSumCalc.Create(Application) do
|
||||
with TfrmCheckSumCalc.Create(TheOwner) do
|
||||
try
|
||||
FFileName:= sFileName;
|
||||
if (DefaultTextLineBreakStyle = tlbsCRLF) then
|
||||
|
|
@ -90,6 +95,7 @@ begin
|
|||
begin
|
||||
sFileName:= edtSaveTo.Text;
|
||||
SeparateFile:= cbSeparateFile.Checked;
|
||||
SeparateFolder:= cbSeparateFolder.Checked;;
|
||||
TextLineBreakStyle:= TextLineBreak[rbWindows.Checked];
|
||||
OpenFileAfterJobCompleted:=(cbOpenAfterJobIsComplete.Checked AND cbOpenAfterJobIsComplete.Enabled);
|
||||
HashAlgorithm:= FAlgorithm;
|
||||
|
|
@ -100,16 +106,20 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function ShowCalcVerifyCheckSum(out Hash: String; out HashAlgorithm: THashAlgorithm;
|
||||
out QueueId: TOperationsManagerQueueIdentifier): Boolean;
|
||||
function ShowCalcVerifyCheckSum(TheOwner: TComponent; out Hash: String; out
|
||||
HashAlgorithm: THashAlgorithm; out QueueId: TOperationsManagerQueueIdentifier): Boolean;
|
||||
begin
|
||||
with TfrmCheckSumCalc.Create(Application) do
|
||||
with TfrmCheckSumCalc.Create(TheOwner) do
|
||||
try
|
||||
OnShow:= nil;
|
||||
rbUnix.Visible:= False;
|
||||
rbWindows.Visible:= False;
|
||||
edtSaveTo.Text:= EmptyStr;
|
||||
SessionProperties:= EmptyStr;
|
||||
Caption:= rsCheckSumVerifyTitle;
|
||||
lblFileFormat.Visible:= False;
|
||||
cbSeparateFile.Visible:= False;
|
||||
cbSeparateFolder.Visible:= False;
|
||||
cbOpenAfterJobIsComplete.Visible:= False;
|
||||
lbHashAlgorithm.OnSelectionChange:= nil;
|
||||
edtSaveTo.OnChange:= @edtSaveToChange;
|
||||
|
|
@ -132,12 +142,12 @@ end;
|
|||
|
||||
procedure TfrmCheckSumCalc.cbSeparateFileChange(Sender: TObject);
|
||||
begin
|
||||
if cbSeparateFile.Checked then
|
||||
edtSaveTo.Text:= ExtractFilePath(edtSaveTo.Text) + '*.' + HashFileExt[FAlgorithm]
|
||||
else
|
||||
edtSaveTo.Text:= ExtractFilePath(edtSaveTo.Text) + ExtractFileName(FFileName) + '.' + HashFileExt[FAlgorithm];
|
||||
Change(cbSeparateFile, cbSeparateFolder);
|
||||
end;
|
||||
|
||||
cbOpenAfterJobIsComplete.Enabled:=not cbSeparateFile.Checked;
|
||||
procedure TfrmCheckSumCalc.cbSeparateFolderChange(Sender: TObject);
|
||||
begin
|
||||
Change(cbSeparateFolder, cbSeparateFile);
|
||||
end;
|
||||
|
||||
procedure TfrmCheckSumCalc.edtSaveToChange(Sender: TObject);
|
||||
|
|
@ -179,5 +189,19 @@ begin
|
|||
edtSaveTo.Text:= ChangeFileExt(edtSaveTo.Text, '.' + HashFileExt[FAlgorithm]);
|
||||
end;
|
||||
|
||||
procedure TfrmCheckSumCalc.Change(Sender, Alien: TCheckBox);
|
||||
begin
|
||||
if Sender.Checked then
|
||||
begin
|
||||
Alien.Checked:= False;
|
||||
edtSaveTo.Text:= ExtractFilePath(edtSaveTo.Text) + '*.' + HashFileExt[FAlgorithm]
|
||||
end
|
||||
else begin
|
||||
edtSaveTo.Text:= ExtractFilePath(edtSaveTo.Text) + ExtractFileName(FFileName) + '.' + HashFileExt[FAlgorithm];
|
||||
end;
|
||||
|
||||
cbOpenAfterJobIsComplete.Enabled:= not (Sender.Checked or Alien.Checked);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ type
|
|||
TFileSystemCalcChecksumOperation = class(TFileSourceCalcChecksumOperation)
|
||||
|
||||
private
|
||||
FSourceFilesTree: TFileTree;
|
||||
FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories
|
||||
FStatistics: TFileSourceCalcChecksumOperationStatistics; // local copy of statistics
|
||||
FCheckSumFile: TStringListEx;
|
||||
|
|
@ -40,7 +41,11 @@ type
|
|||
function CheckSumCalc(aFile: TFile; out aValue: String): Boolean;
|
||||
procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType);
|
||||
|
||||
procedure SaveHash(const FileName: String);
|
||||
procedure SaveHashFile(const FileName: String);
|
||||
procedure AddFile(FileName: String; const Hash: String);
|
||||
function CalcChecksumProcessFile(aFile: TFile): Boolean;
|
||||
function ProcessNode(aFileTreeNode: TFileTreeNode; const AFolder: String): Boolean;
|
||||
function VerifyChecksumProcessFile(aFile: TFile; ExpectedChecksum: String): Boolean;
|
||||
function FileExists(var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists;
|
||||
|
||||
|
|
@ -106,9 +111,12 @@ begin
|
|||
FreeAndNil(FFullFilesTree);
|
||||
FreeAndNil(FCheckSumFile);
|
||||
FreeAndNil(FChecksumsList);
|
||||
FreeAndNil(FSourceFilesTree);
|
||||
end;
|
||||
|
||||
procedure TFileSystemCalcChecksumOperation.Initialize;
|
||||
var
|
||||
TreeBuilder: TFileSystemTreeBuilder;
|
||||
begin
|
||||
// Get initialized statistics; then we change only what is needed.
|
||||
FStatistics := RetrieveStatistics;
|
||||
|
|
@ -116,10 +124,27 @@ begin
|
|||
case Mode of
|
||||
checksum_calc:
|
||||
begin
|
||||
FillAndCount(Files, False, False,
|
||||
FFullFilesTree,
|
||||
FStatistics.TotalFiles,
|
||||
FStatistics.TotalBytes); // gets full list of files (recursive)
|
||||
if SeparateFolder then
|
||||
begin
|
||||
TreeBuilder := TFileSystemTreeBuilder.Create(
|
||||
@AskQuestion,
|
||||
@CheckOperationState);
|
||||
try
|
||||
TreeBuilder.SymLinkOption := fsooslDontFollow;
|
||||
TreeBuilder.BuildFromFiles(Files);
|
||||
FSourceFilesTree := TreeBuilder.ReleaseTree;
|
||||
FStatistics.TotalFiles := TreeBuilder.FilesCount;
|
||||
FStatistics.TotalBytes := TreeBuilder.FilesSize;
|
||||
finally
|
||||
FreeAndNil(TreeBuilder);
|
||||
end;
|
||||
end
|
||||
else begin
|
||||
FillAndCount(Files, False, False,
|
||||
FFullFilesTree,
|
||||
FStatistics.TotalFiles,
|
||||
FStatistics.TotalBytes); // gets full list of files (recursive)
|
||||
end;
|
||||
|
||||
FCheckSumFile.TextLineBreakStyle:= TextLineBreakStyle;
|
||||
|
||||
|
|
@ -145,6 +170,12 @@ var
|
|||
Entry: TChecksumEntry;
|
||||
TargetFileName: String;
|
||||
begin
|
||||
if SeparateFolder then
|
||||
begin
|
||||
ProcessNode(FSourceFilesTree, ExcludeTrailingBackslash(Files.Path));
|
||||
Exit;
|
||||
end;
|
||||
|
||||
if OneFile and (Mode = checksum_calc) then
|
||||
begin
|
||||
TargetFileName:= TargetMask;
|
||||
|
|
@ -199,19 +230,9 @@ begin
|
|||
|
||||
case Mode of
|
||||
checksum_calc:
|
||||
// make result
|
||||
if OneFile then
|
||||
try
|
||||
CurrentFileIndex:= IfThen(Algorithm = HASH_SFV, 2, 0);
|
||||
if (FCheckSumFile.Count > CurrentFileIndex) then
|
||||
FCheckSumFile.SaveToFile(TargetFileName);
|
||||
except
|
||||
on E: EFCreateError do
|
||||
AskQuestion(rsMsgErrECreate + ' ' + TargetFileName + ':',
|
||||
E.Message, [fsourOk], fsourOk, fsourOk);
|
||||
on E: EWriteError do
|
||||
AskQuestion(rsMsgErrEWrite + ' ' + TargetFileName + ':',
|
||||
E.Message, [fsourOk], fsourOk, fsourOk);
|
||||
begin
|
||||
// make result
|
||||
if OneFile then SaveHashFile(TargetFileName);
|
||||
end;
|
||||
|
||||
checksum_verify:
|
||||
|
|
@ -421,8 +442,6 @@ begin
|
|||
end;
|
||||
|
||||
function TFileSystemCalcChecksumOperation.CalcChecksumProcessFile(aFile: TFile): Boolean;
|
||||
const
|
||||
TextLineBreak: array[TTextLineBreakStyle] of String = ('/', '\', PathDelim);
|
||||
var
|
||||
FileName: String;
|
||||
sCheckSum: String;
|
||||
|
|
@ -450,30 +469,9 @@ begin
|
|||
|
||||
FileName:= ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name;
|
||||
|
||||
if (TextLineBreak[TextLineBreakStyle] <> PathDelim) then
|
||||
begin
|
||||
FileName:= StringReplace(FileName, PathDelim, TextLineBreak[TextLineBreakStyle], [rfReplaceAll]);
|
||||
end;
|
||||
AddFile(FileName, sCheckSum);
|
||||
|
||||
if Algorithm = HASH_SFV then
|
||||
begin
|
||||
FCheckSumFile.Add(FileName + ' ' + sCheckSum);
|
||||
end
|
||||
else begin
|
||||
FCheckSumFile.Add(sCheckSum + ' *' + FileName);
|
||||
end;
|
||||
|
||||
if not OneFile then
|
||||
try
|
||||
FCheckSumFile.SaveToFile(TargetFileName);
|
||||
except
|
||||
on E: EFCreateError do
|
||||
AskQuestion(rsMsgErrECreate + ' ' + TargetFileName + LineEnding,
|
||||
E.Message, [fsourOk], fsourOk, fsourOk);
|
||||
on E: EWriteError do
|
||||
AskQuestion(rsMsgErrEWrite + ' ' + TargetFileName + LineEnding,
|
||||
E.Message, [fsourOk], fsourOk, fsourOk);
|
||||
end;
|
||||
if not OneFile then SaveHash(TargetFileName);
|
||||
end;
|
||||
|
||||
function TFileSystemCalcChecksumOperation.VerifyChecksumProcessFile(
|
||||
|
|
@ -496,6 +494,80 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function TFileSystemCalcChecksumOperation.ProcessNode(aFileTreeNode: TFileTreeNode; const AFolder: String): Boolean;
|
||||
var
|
||||
aFile: TFile;
|
||||
bSkip: Boolean;
|
||||
aFolders: TList;
|
||||
FileName: String;
|
||||
sCheckSum: String;
|
||||
TargetName: String;
|
||||
OldDoneBytes: Int64;
|
||||
CurrentFileIndex: Integer;
|
||||
CurrentSubNode: TFileTreeNode;
|
||||
begin
|
||||
Result := True;
|
||||
aFolders := TList.Create;
|
||||
|
||||
FCheckSumFile.Clear;
|
||||
if Algorithm = HASH_SFV then
|
||||
begin
|
||||
FCheckSumFile.Add(SFV_HEADER);
|
||||
FCheckSumFile.Add(DC_HEADER);
|
||||
end;
|
||||
TargetName:= AFolder + PathDelim + MakeFileName(AFolder, 'checksum') + '.' + HashFileExt[Algorithm];
|
||||
|
||||
case FileExists(TargetName) of
|
||||
fsoofeSkip: bSkip:= True;
|
||||
else bSkip:= False;
|
||||
end;
|
||||
|
||||
for CurrentFileIndex := 0 to aFileTreeNode.SubNodesCount - 1 do
|
||||
begin
|
||||
CurrentSubNode := aFileTreeNode.SubNodes[CurrentFileIndex];
|
||||
aFile := CurrentSubNode.TheFile;
|
||||
|
||||
with FStatistics do
|
||||
begin
|
||||
CurrentFile := aFile.FullPath;
|
||||
CurrentFileTotalBytes := aFile.Size;
|
||||
CurrentFileDoneBytes := 0;
|
||||
end;
|
||||
|
||||
UpdateStatistics(FStatistics);
|
||||
|
||||
if aFile.IsDirectory or aFile.IsLinkToDirectory then
|
||||
begin
|
||||
aFolders.Add(CurrentSubNode)
|
||||
end
|
||||
else begin
|
||||
OldDoneBytes := FStatistics.DoneBytes;
|
||||
|
||||
if (not bSkip) and CheckSumCalc(aFile, sCheckSum) then
|
||||
begin
|
||||
FileName:= ExtractDirLevel(AFolder + PathDelim, aFile.Path) + aFile.Name;
|
||||
AddFile(FileName, sCheckSum);
|
||||
end;
|
||||
|
||||
with FStatistics do
|
||||
begin
|
||||
DoneFiles := DoneFiles + 1;
|
||||
DoneBytes := OldDoneBytes + aFile.Size;
|
||||
|
||||
UpdateStatistics(FStatistics);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
SaveHashFile(TargetName);
|
||||
|
||||
for CurrentFileIndex := 0 to aFolders.Count - 1 do
|
||||
begin
|
||||
CurrentSubNode:= TFileTreeNode(aFolders[CurrentFileIndex]);
|
||||
ProcessNode(CurrentSubNode, CurrentSubNode.TheFile.FullPath);
|
||||
end;
|
||||
aFolders.Free;
|
||||
end;
|
||||
|
||||
function TFileSystemCalcChecksumOperation.FileExists(var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists;
|
||||
const
|
||||
Responses: array[0..5] of TFileSourceOperationUIResponse
|
||||
|
|
@ -663,5 +735,48 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TFileSystemCalcChecksumOperation.SaveHash(const FileName: String);
|
||||
begin
|
||||
try
|
||||
FCheckSumFile.SaveToFile(FileName);
|
||||
except
|
||||
on E: EFCreateError do
|
||||
AskQuestion(rsMsgErrECreate + ' ' + FileName + ':',
|
||||
E.Message, [fsourOk], fsourOk, fsourOk);
|
||||
on E: EWriteError do
|
||||
AskQuestion(rsMsgErrEWrite + ' ' + FileName + ':',
|
||||
E.Message, [fsourOk], fsourOk, fsourOk);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFileSystemCalcChecksumOperation.SaveHashFile(const FileName: String);
|
||||
var
|
||||
Index: Integer;
|
||||
begin
|
||||
Index:= IfThen(Algorithm = HASH_SFV, 2, 0);
|
||||
if (FCheckSumFile.Count > Index) then
|
||||
begin
|
||||
SaveHash(FileName);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFileSystemCalcChecksumOperation.AddFile(FileName: String; const Hash: String);
|
||||
const
|
||||
TextLineBreak: array[TTextLineBreakStyle] of String = ('/', '\', PathDelim);
|
||||
begin
|
||||
if (TextLineBreak[TextLineBreakStyle] <> PathDelim) then
|
||||
begin
|
||||
FileName:= StringReplace(FileName, PathDelim, TextLineBreak[TextLineBreakStyle], [rfReplaceAll]);
|
||||
end;
|
||||
|
||||
if Algorithm = HASH_SFV then
|
||||
begin
|
||||
FCheckSumFile.Add(FileName + ' ' + Hash);
|
||||
end
|
||||
else begin
|
||||
FCheckSumFile.Add(Hash + ' *' + FileName);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
|
|||
|
|
@ -361,9 +361,9 @@ begin
|
|||
|
||||
LinkProperty := TFileLinkProperty.Create;
|
||||
|
||||
AFilePath:= Path + pSearchRecord^.Name;
|
||||
if fpS_ISLNK(pSearchRecord^.Attr) then
|
||||
begin
|
||||
AFilePath:= Path + pSearchRecord^.Name;
|
||||
LinkAttrs := mbFileGetAttrNoLinks(AFilePath);
|
||||
LinkProperty.LinkTo := ReadSymLink(AFilePath);
|
||||
LinkProperty.IsValid := LinkAttrs <> faInvalidAttributes;
|
||||
|
|
@ -387,6 +387,9 @@ begin
|
|||
end;
|
||||
{$ENDIF}
|
||||
end;
|
||||
{$IFDEF DARWIN}
|
||||
FinderTagProperty := uMyDarwin.getMacOSFinderTagFileProperty(AFilePath);
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
// Set name after assigning Attributes property, because it is used to get extension.
|
||||
|
|
@ -712,6 +715,12 @@ begin
|
|||
CommentProperty.Value := FDescr.ReadDescription(sFullPath);
|
||||
end;
|
||||
|
||||
{$IFDEF DARWIN}
|
||||
if fpMacOSFinderTag in PropertiesToSet then begin
|
||||
FinderTagProperty := uMyDarwin.getMacOSFinderTagFileProperty(sFullPath);
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
PropertiesToSet:= PropertiesToSet * fpVariantAll;
|
||||
for AProp in PropertiesToSet do
|
||||
begin
|
||||
|
|
@ -854,6 +863,9 @@ begin
|
|||
{$ENDIF}
|
||||
fpLastAccessTime,
|
||||
uFileProperty.fpLink
|
||||
{$IF DEFINED(DARWIN)}
|
||||
,fpMacOSFinderTag
|
||||
{$ENDIF}
|
||||
];
|
||||
end;
|
||||
|
||||
|
|
@ -875,6 +887,9 @@ begin
|
|||
{$IF DEFINED(MSWINDOWS)}
|
||||
, fpCompressedSize
|
||||
{$ENDIF}
|
||||
{$IF DEFINED(DARWIN)}
|
||||
,fpMacOSFinderTag
|
||||
{$ENDIF}
|
||||
] + fpVariantAll;
|
||||
{$IF DEFINED(LINUX)}
|
||||
if HasStatX then Result += [fpCreationTime];
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ type
|
|||
FSkipRenameError: Boolean;
|
||||
FSkipOpenForReadingError: Boolean;
|
||||
FSkipOpenForWritingError: Boolean;
|
||||
FSkipCreateSymLinkError: Boolean;
|
||||
FSkipReadError: Boolean;
|
||||
FSkipWriteError: Boolean;
|
||||
FSkipCopyError: Boolean;
|
||||
|
|
@ -1355,7 +1356,20 @@ begin
|
|||
end
|
||||
else
|
||||
begin
|
||||
ShowError(rsMsgLogError + Format(rsMsgLogSymLink, [AbsoluteTargetFileName]));
|
||||
if not FSkipCreateSymLinkError then
|
||||
begin
|
||||
case AskQuestion(rsSymErrCreate.TrimRight(['.']) + ' ' +
|
||||
WrapTextSimple(AbsoluteTargetFileName, 64) +
|
||||
LineEnding + LineEnding + mbSysErrorMessage, '',
|
||||
[fsourSkip, fsourSkipAll, fsourAbort],
|
||||
fsourSkip, fsourAbort) of
|
||||
fsourAbort:
|
||||
AbortOperation;
|
||||
fsourSkip: ; // Do nothing
|
||||
fsourSkipAll:
|
||||
FSkipCreateSymLinkError := True;
|
||||
end;
|
||||
end;
|
||||
Result := False;
|
||||
end;
|
||||
end
|
||||
|
|
@ -1374,6 +1388,16 @@ begin
|
|||
raise Exception.Create('Invalid TargetExists result');
|
||||
end;
|
||||
|
||||
if Result = True then
|
||||
begin
|
||||
LogMessage(Format(rsMsgLogSuccess + rsMsgLogSymLink, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]),
|
||||
[log_cp_mv_ln], lmtSuccess);
|
||||
end
|
||||
else begin
|
||||
LogMessage(Format(rsMsgLogError + rsMsgLogSymLink, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]),
|
||||
[log_cp_mv_ln], lmtError);
|
||||
end;
|
||||
|
||||
Inc(FStatistics.DoneFiles);
|
||||
UpdateStatistics(FStatistics);
|
||||
end;
|
||||
|
|
|
|||
68
src/filesources/gio/network/unetworkfilesource.pas
Normal file
68
src/filesources/gio/network/unetworkfilesource.pas
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
unit uNetworkFileSource;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, uFile, uFileSourceOperationTypes, uGioFileSource, uGio2;
|
||||
|
||||
type
|
||||
|
||||
INetworkFileSource = interface(IGioFileSource)
|
||||
['{C7128E35-76FC-4635-842D-4091AB4AC520}']
|
||||
end;
|
||||
|
||||
{ TNetworkFileSource }
|
||||
|
||||
TNetworkFileSource = class(TGioFileSource, INetworkFileSource)
|
||||
public
|
||||
constructor Create; override;
|
||||
function GetOperationsTypes: TFileSourceOperationTypes; override;
|
||||
|
||||
class function GetMainIcon(out Path: String): Boolean; override;
|
||||
class function IsSupportedPath(const Path: String): Boolean; override;
|
||||
class function CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile; override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
DCStrUtils;
|
||||
|
||||
{ TNetworkFileSource }
|
||||
|
||||
constructor TNetworkFileSource.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
FCurrentAddress:= 'network://';
|
||||
end;
|
||||
|
||||
function TNetworkFileSource.GetOperationsTypes: TFileSourceOperationTypes;
|
||||
begin
|
||||
Result:= [fsoList, fsoExecute];
|
||||
end;
|
||||
|
||||
class function TNetworkFileSource.GetMainIcon(out Path: String): Boolean;
|
||||
begin
|
||||
Result:= True;
|
||||
Path:= 'network-workgroup';
|
||||
end;
|
||||
|
||||
class function TNetworkFileSource.IsSupportedPath(const Path: String): Boolean;
|
||||
begin
|
||||
Result:= StrBegins(Path, 'network://');
|
||||
end;
|
||||
|
||||
class function TNetworkFileSource.CreateFile(const APath: String;
|
||||
AFolder: PGFile; AFileInfo: PGFileInfo): TFile;
|
||||
var
|
||||
ADisplayName: String;
|
||||
begin
|
||||
Result:= inherited CreateFile(APath, AFolder, AFileInfo);
|
||||
ADisplayName:= g_file_info_get_display_name(AFileInfo);
|
||||
if Length(ADisplayName) > 0 then Result.Name:= ADisplayName;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ type
|
|||
function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override;
|
||||
|
||||
class function CreateFile(const APath: String): TFile; override;
|
||||
class function CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile;
|
||||
class function CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile; virtual;
|
||||
|
||||
procedure Reload(const PathsToReload: TPathsArray); override;
|
||||
function GetParentDir(sPath : String): String; override;
|
||||
|
|
@ -110,6 +110,7 @@ end;
|
|||
class function TGioFileSource.CreateFile(const APath: String; AFolder: PGFile;
|
||||
AFileInfo: PGFileInfo): TFile;
|
||||
var
|
||||
Addr: TURI;
|
||||
AFile: PGFile;
|
||||
ATarget: Pgchar;
|
||||
AFileType: TGFileType;
|
||||
|
|
@ -117,10 +118,14 @@ var
|
|||
begin
|
||||
Result:= CreateFile(APath);
|
||||
Result.Name:= g_file_info_get_name(AFileInfo);
|
||||
Result.Size:= g_file_info_get_size (AFileInfo);
|
||||
Result.Attributes:= g_file_info_get_attribute_uint32 (AFileInfo, FILE_ATTRIBUTE_UNIX_MODE);
|
||||
Result.Attributes:= g_file_info_get_attribute_uint32(AFileInfo, FILE_ATTRIBUTE_UNIX_MODE);
|
||||
Result.ModificationTime:= UnixFileTimeToDateTime(g_file_info_get_attribute_uint64 (AFileInfo, FILE_ATTRIBUTE_TIME_MODIFIED));
|
||||
Result.LinkProperty := TFileLinkProperty.Create;
|
||||
|
||||
if g_file_info_has_attribute(AFileInfo, FILE_ATTRIBUTE_STANDARD_SIZE) then
|
||||
Result.Size:= g_file_info_get_size(AFileInfo)
|
||||
else begin
|
||||
Result.SizeProperty.IsValid:= False;
|
||||
end;
|
||||
|
||||
// Get a file's type (whether it is a regular file, symlink, etc).
|
||||
AFileType:= g_file_info_get_file_type (AFileInfo);
|
||||
|
|
@ -157,9 +162,23 @@ begin
|
|||
else if AFileType in [G_FILE_TYPE_SHORTCUT, G_FILE_TYPE_MOUNTABLE] then
|
||||
begin
|
||||
Result.Attributes:= Result.Attributes or S_IFLNK or S_IFDIR;
|
||||
Result.ModificationTimeProperty.IsValid:= g_file_info_has_attribute(AFileInfo, FILE_ATTRIBUTE_TIME_MODIFIED);
|
||||
|
||||
ATarget:= g_file_info_get_attribute_string(AFileInfo, FILE_ATTRIBUTE_STANDARD_TARGET_URI);
|
||||
Result.LinkProperty.IsValid := Length(ATarget) > 0;
|
||||
Result.LinkProperty.LinkTo := ATarget;
|
||||
|
||||
// Remove a standard port from address
|
||||
Addr:= ParseURI(Result.LinkProperty.LinkTo);
|
||||
if Addr.Port > 0 then
|
||||
begin
|
||||
case Addr.Port of
|
||||
22: if (Addr.Protocol = 'sftp') then Addr.Port:= 0;
|
||||
445: if (Addr.Protocol = 'smb') then Addr.Port:= 0;
|
||||
2049: if (Addr.Protocol = 'nfs') then Addr.Port:= 0;
|
||||
end;
|
||||
if Addr.Port = 0 then Result.LinkProperty.LinkTo:= EncodeURI(Addr);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -178,7 +197,7 @@ end;
|
|||
|
||||
function TGioFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean;
|
||||
begin
|
||||
Result:= TRue; //inherited SetCurrentWorkingDirectory(NewDir);
|
||||
Result:= True;
|
||||
end;
|
||||
|
||||
procedure ask_password_cb (op: PGMountOperation;
|
||||
|
|
@ -527,4 +546,3 @@ begin
|
|||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ var
|
|||
AInfo: PGFileInfo;
|
||||
AError: PGError = nil;
|
||||
AFileEnum: PGFileEnumerator;
|
||||
AFileSource: TGioFileSource;
|
||||
begin
|
||||
FFiles.Clear;
|
||||
with FGioFileSource do
|
||||
|
|
@ -82,11 +83,12 @@ begin
|
|||
end;
|
||||
// List files
|
||||
try
|
||||
AFileSource:= TGioFileSource(GetClass);
|
||||
AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError);
|
||||
while Assigned(AInfo) do
|
||||
begin
|
||||
CheckOperationState;
|
||||
AFile:= TGioFileSource.CreateFile(Path, AFolder, AInfo);
|
||||
AFile:= AFileSource.CreateFile(Path, AFolder, AInfo);
|
||||
g_object_unref(AInfo);
|
||||
FFiles.Add(AFile);
|
||||
AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError);
|
||||
|
|
|
|||
|
|
@ -292,7 +292,7 @@ begin
|
|||
Result:= False;
|
||||
ShowError(Format(rsMsgLogError + rsMsgLogPack,
|
||||
[FileName +
|
||||
' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]);
|
||||
' - ' + rsMsgExitStatusCode + ' ' + IntToStr(ExitStatus)]), [log_arc_op]);
|
||||
end
|
||||
else
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -672,7 +672,7 @@ begin
|
|||
ShowError(Format(rsMsgLogError + rsMsgLogExtract,
|
||||
[FMultiArchiveFileSource.ArchiveFileName + PathDelim +
|
||||
SourceName + ' -> ' + TargetName +
|
||||
' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]);
|
||||
' - ' + rsMsgExitStatusCode + ' ' + IntToStr(ExitStatus)]), [log_arc_op]);
|
||||
end // Error
|
||||
else
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ begin
|
|||
begin
|
||||
ShowError(Format(rsMsgLogError + rsMsgLogDelete,
|
||||
[FileName +
|
||||
' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]);
|
||||
' - ' + rsMsgExitStatusCode + ' ' + IntToStr(ExitStatus)]), [log_arc_op]);
|
||||
end
|
||||
else
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ type
|
|||
Comment: string;
|
||||
procedure ClearStore; virtual;
|
||||
function CheckValues: Boolean; virtual;
|
||||
function CheckSizeChar(Chr: AnsiChar): Boolean; virtual;
|
||||
procedure FillRecord(const Value: TArchiveItem); virtual;
|
||||
function ParseByMask(Value, NextValue, Mask: ansistring): Integer; virtual;
|
||||
public
|
||||
|
|
@ -227,7 +228,7 @@ begin
|
|||
begin
|
||||
while IValue <= Length(Value) do
|
||||
begin
|
||||
if not(Value[Ivalue] in ['0'..'9']) then
|
||||
if CheckSizeChar(Value[Ivalue]) = False then
|
||||
break;
|
||||
s := s + Value[Ivalue];
|
||||
Inc(Ivalue);
|
||||
|
|
@ -304,6 +305,21 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function TMultiArchiveDynamicParser.CheckSizeChar(Chr: AnsiChar): Boolean;
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
Result:= False;
|
||||
if not (Chr in ['0'..'9']) then
|
||||
begin
|
||||
with FMultiArcItem do
|
||||
if (FSizeStripChars <> EmptyStr) and ContainsOneOf(Chr, FSizeStripChars) then
|
||||
Result:= True;
|
||||
end
|
||||
else
|
||||
Result:= True;
|
||||
end;
|
||||
|
||||
function TMultiArchiveDynamicParser.CheckValues: Boolean;
|
||||
var
|
||||
x, n: integer;
|
||||
|
|
@ -356,7 +372,7 @@ begin
|
|||
begin
|
||||
Size := Trim(Size);
|
||||
for n := 1 to Length(Size) do
|
||||
if not (Size[n] in ['0'..'9']) then
|
||||
if CheckSizeChar(Size[n]) = False then
|
||||
Exit;
|
||||
end;
|
||||
if ThreeMonth <> '' then
|
||||
|
|
@ -400,11 +416,11 @@ var
|
|||
begin
|
||||
Value.FileName:= FGetFileName(FileName);
|
||||
Value.FileExt:= FGetFileName(FileExt);
|
||||
Value.PackSize:= StrToInt64Def(PackSize, -1);
|
||||
Value.UnpSize:= StrToInt64Def(Size, -1);
|
||||
Value.PackSize:= StrToInt64Def(CleanSize(PackSize), -1);
|
||||
Value.UnpSize:= StrToInt64Def(CleanSize(Size), -1);
|
||||
Value.Year:= YearShortToLong(StrToIntDef(Year, 0));
|
||||
Value.Month:= StrToIntDef(Month, 1);
|
||||
Value.Day:= StrToIntDef(Day, 1);
|
||||
Value.Month:= StrToIntDef(Month, 0);
|
||||
Value.Day:= StrToIntDef(Day, 0);
|
||||
Value.Hour:= StrToIntDef(Hours, 0);
|
||||
Value.Minute:= StrToIntDef(Minutes, 0);
|
||||
Value.Second:= StrToIntDef(Seconds, 0);
|
||||
|
|
@ -412,7 +428,7 @@ begin
|
|||
Value.Comment:= Comment;
|
||||
|
||||
if ThreeMonth <> '' then begin
|
||||
Value.Month:= MonthToNumberDef(ThreeMonth, 1);
|
||||
Value.Month:= MonthToNumberDef(ThreeMonth, 0);
|
||||
end;
|
||||
|
||||
if HoursModif <> '' then begin
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ implementation
|
|||
|
||||
uses
|
||||
uDebug, uGlobs, DCFileAttributes, DCOSUtils, DCStrUtils, DCDateTimeUtils,
|
||||
FileUtil, uMasks,
|
||||
FileUtil, uMasks, uLng,
|
||||
uMultiArchiveListOperation,
|
||||
uMultiArchiveCopyInOperation,
|
||||
uMultiArchiveCopyOutOperation,
|
||||
|
|
@ -318,11 +318,18 @@ begin
|
|||
end;
|
||||
|
||||
ModificationTimeProperty := TFileModificationDateTimeProperty.Create(0);
|
||||
try
|
||||
with ArchiveItem do
|
||||
ModificationTime := EncodeDate(Year, Month, Day) + EncodeTime(Hour, Minute, Second, 0);
|
||||
except
|
||||
on EConvertError do ModificationTimeProperty.IsValid:= False;
|
||||
with ArchiveItem do
|
||||
begin
|
||||
if (Month = 0) or (Day = 0) then
|
||||
ModificationTimeProperty.IsValid:= False
|
||||
else
|
||||
begin
|
||||
try
|
||||
ModificationTime := EncodeDate(Year, Month, Day) + EncodeTime(Hour, Minute, Second, 0);
|
||||
except
|
||||
on EConvertError do ModificationTimeProperty.IsValid:= False;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
if AttributesProperty.IsLink and (Length(ArchiveItem.FileLink) > 0) then
|
||||
|
|
@ -599,6 +606,9 @@ begin
|
|||
FOutputParser.Execute;
|
||||
FPassword:= FOutputParser.Password;
|
||||
|
||||
if FOutputParser.OpenError and (AFileList.Count < 1) then
|
||||
raise EFileSourceException.Create(rsMsgErrEOpen);
|
||||
|
||||
// fix dir items w/o attr
|
||||
if (mafFixDirAttr in FMultiArcItem.FFlags) then
|
||||
begin
|
||||
|
|
@ -613,6 +623,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
(* if archiver does not give a list of folders *)
|
||||
for I := 0 to FAllDirsList.Count - 1 do
|
||||
begin
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ type
|
|||
procedure Prepare; virtual; abstract;
|
||||
procedure ParseLines; virtual; abstract;
|
||||
procedure AddLine(const Str: String); virtual; abstract;
|
||||
function CleanSize(Str: String): String;
|
||||
property OnGetArchiveItem: TOnGetArchiveItem write FOnGetArchiveItem;
|
||||
end;
|
||||
|
||||
|
|
@ -247,6 +248,20 @@ begin
|
|||
|
||||
end;
|
||||
|
||||
function TMultiArchiveParser.CleanSize(Str: String): String;
|
||||
var
|
||||
I: Integer;
|
||||
Size: String;
|
||||
begin
|
||||
Size:= Trim(Str);
|
||||
if FMultiArcItem.FSizeStripChars <> EmptyStr then
|
||||
begin
|
||||
for I:= 1 to Length(FMultiArcItem.FSizeStripChars) do
|
||||
Size:= Size.Replace(FMultiArcItem.FSizeStripChars[I], '');
|
||||
end;
|
||||
Result:= Size;
|
||||
end;
|
||||
|
||||
procedure TMultiArchiveStaticParser.AddLine(const Str: String);
|
||||
begin
|
||||
// if next item
|
||||
|
|
@ -262,9 +277,9 @@ begin
|
|||
if FNamePos.Index = FFormatIndex then
|
||||
FArchiveItem.FileName := FGetFileName(Trim(GetKeyValue(str, FNamePos)));
|
||||
if FUnpSizePos.Index = FFormatIndex then
|
||||
FArchiveItem.UnpSize := StrToInt64Def(Trim(GetKeyValue(str, FUnpSizePos)), -1);
|
||||
FArchiveItem.UnpSize := StrToInt64Def(CleanSize(GetKeyValue(str, FUnpSizePos)), -1);
|
||||
if FPackSizePos.Index = FFormatIndex then
|
||||
FArchiveItem.PackSize := StrToInt64Def(Trim(GetKeyValue(str, FPackSizePos)), -1);
|
||||
FArchiveItem.PackSize := StrToInt64Def(CleanSize(GetKeyValue(str, FPackSizePos)), -1);
|
||||
if FYearPos.Index = FFormatIndex then
|
||||
FArchiveItem.Year := YearShortToLong(StrToIntDef(Trim(GetKeyValue(str, FYearPos)), 0));
|
||||
if FMonthPos.Index = FFormatIndex then
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@ type
|
|||
FExProcess: TExProcess;
|
||||
FMultiArcItem: TMultiArcItem;
|
||||
FParser: TMultiArchiveParser;
|
||||
FErrorLevel: LongInt;
|
||||
FOpenError: Boolean;
|
||||
FConvertEncoding: function (const Source: String): RawByteString;
|
||||
private
|
||||
FArchiveName: String;
|
||||
|
|
@ -35,6 +37,7 @@ type
|
|||
procedure Prepare;
|
||||
procedure Execute;
|
||||
|
||||
property OpenError: Boolean read FOpenError;
|
||||
property Password: String read FPassword write FPassword;
|
||||
property OnGetArchiveItem: TOnGetArchiveItem write SetOnGetArchiveItem;
|
||||
end;
|
||||
|
|
@ -68,6 +71,7 @@ var
|
|||
Index: Integer;
|
||||
begin
|
||||
Result:= FMultiArcItem.FList;
|
||||
FErrorLevel:= ExtractErrorLevel(Result);
|
||||
Index:= Pos('%O', Result);
|
||||
FConvertEncoding:= @DCOSUtils.ConsoleToUTF8;
|
||||
if (Index > 0) and (Index + 2 <= Length(Result)) then
|
||||
|
|
@ -87,6 +91,7 @@ end;
|
|||
|
||||
procedure TOutputParser.OnProcessExit;
|
||||
begin
|
||||
FOpenError:= (FExProcess.ExitStatus > FErrorLevel);
|
||||
FParser.ParseLines;
|
||||
end;
|
||||
|
||||
|
|
@ -190,6 +195,7 @@ begin
|
|||
sCommandLine:= FormatArchiverCommand(FMultiArcItem.FArchiver,
|
||||
sCommandLine, FArchiveName,
|
||||
nil, '', '','', FPassword);
|
||||
|
||||
if FMultiArcItem.FDebug then
|
||||
DCDebug(sCommandLine);
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ type
|
|||
function Equals(aFileSource: IFileSource): Boolean;
|
||||
function IsInterface(InterfaceGuid: TGuid): Boolean;
|
||||
function IsClass(ClassType: TClass): Boolean;
|
||||
function GetClass: TFileSource;
|
||||
function GetURI: TURI;
|
||||
function GetClassName: String;
|
||||
function GetRefCount: Integer;
|
||||
|
|
@ -214,6 +215,7 @@ type
|
|||
function Equals(aFileSource: IFileSource): Boolean; overload;
|
||||
function IsInterface(InterfaceGuid: TGuid): Boolean;
|
||||
function IsClass(aClassType: TClass): Boolean;
|
||||
function GetClass: TFileSource;
|
||||
function GetClassName: String; // For debugging purposes.
|
||||
function GetRefCount: Integer; // For debugging purposes.
|
||||
|
||||
|
|
@ -486,6 +488,11 @@ begin
|
|||
Result := Self is aClassType;
|
||||
end;
|
||||
|
||||
function TFileSource.GetClass: TFileSource;
|
||||
begin
|
||||
Result := Self
|
||||
end;
|
||||
|
||||
function TFileSource.GetClassName: String;
|
||||
begin
|
||||
Result := ClassName;
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ type
|
|||
FTargetPath: String;
|
||||
FTargetMask: String;
|
||||
FAlgorithm: THashAlgorithm;
|
||||
FOneFile: Boolean;
|
||||
FOneFile, FSeparateFolder: Boolean;
|
||||
FOpenFileAfterOperationCompleted: Boolean;
|
||||
|
||||
protected
|
||||
|
|
@ -86,6 +86,7 @@ type
|
|||
property Mode: TCalcCheckSumOperationMode read FMode write FMode;
|
||||
property Algorithm: THashAlgorithm read FAlgorithm write FAlgorithm;
|
||||
property OneFile: Boolean read FOneFile write FOneFile;
|
||||
property SeparateFolder: Boolean read FSeparateFolder write FSeparateFolder;
|
||||
property TextLineBreakStyle: TTextLineBreakStyle read FTextLineBreakStyle write FTextLineBreakStyle;
|
||||
property OpenFileAfterOperationCompleted: Boolean read FOpenFileAfterOperationCompleted write FOpenFileAfterOperationCompleted;
|
||||
property Result: TVerifyChecksumResult read FResult;
|
||||
|
|
|
|||
|
|
@ -52,7 +52,8 @@ begin
|
|||
FFileSource := AFileSource as IWcxArchiveFileSource;
|
||||
inherited Create(AOwner, AFileSource);
|
||||
pnlCheckboxes.Visible := True;
|
||||
btnConfig.Visible := True;
|
||||
cbEncrypt.Enabled:= ((FFileSource.PluginCapabilities and PK_CAPS_ENCRYPT) <> 0);
|
||||
btnConfig.Visible := ((FFileSource.PluginCapabilities and PK_CAPS_OPTIONS) <> 0);
|
||||
end;
|
||||
|
||||
{ TWcxArchiveCopyOperationOptionsUI }
|
||||
|
|
|
|||
|
|
@ -491,7 +491,11 @@ begin
|
|||
Result := [fsoList, fsoCopyOut, fsoTestArchive, fsoExecute, fsoCalcStatistics]; // by default
|
||||
with FWcxModule do
|
||||
begin
|
||||
if (((FPluginCapabilities and PK_CAPS_NEW) <> 0) or ((FPluginCapabilities and PK_CAPS_MODIFY) <> 0)) and
|
||||
if (((FPluginCapabilities and PK_CAPS_MODIFY) = 0) and mbFileExists(ArchiveFileName)) then
|
||||
begin
|
||||
// not supported
|
||||
end
|
||||
else if (((FPluginCapabilities and PK_CAPS_NEW) <> 0) or ((FPluginCapabilities and PK_CAPS_MODIFY) <> 0)) and
|
||||
(Assigned(PackFiles) or Assigned(PackFilesW)) then
|
||||
Result:= Result + [fsoCopyIn];
|
||||
if ((FPluginCapabilities and PK_CAPS_DELETE) <> 0) and
|
||||
|
|
|
|||
|
|
@ -6,8 +6,9 @@ interface
|
|||
|
||||
uses
|
||||
Classes, SysUtils, Controls, LMessages, Grids, Graphics,
|
||||
uDisplayFile, DCXmlConfig, uTypes, uFileViewWithGrid, uFile,
|
||||
uFileSource, uFileProperty;
|
||||
uDisplayFile, DCXmlConfig, uTypes,
|
||||
uFileView, uFileViewWithMainCtrl, uFileViewWithGrid,
|
||||
uFile, uFileSource, uFileProperty;
|
||||
|
||||
type
|
||||
|
||||
|
|
@ -18,6 +19,7 @@ type
|
|||
TBriefDrawGrid = class(TFileViewGrid)
|
||||
protected
|
||||
FBriefView: TBriefFileView;
|
||||
FOnDrawCell: TFileViewOnDrawCell;
|
||||
protected
|
||||
procedure UpdateView; override;
|
||||
procedure CalculateColRowCount; override;
|
||||
|
|
@ -34,11 +36,16 @@ type
|
|||
function CellToIndex(ACol, ARow: Integer): Integer; override;
|
||||
procedure IndexToCell(Index: Integer; out ACol, ARow: Integer); override;
|
||||
procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override;
|
||||
|
||||
property OnDrawCell: TFileViewOnDrawCell read FOnDrawCell write FOnDrawCell;
|
||||
end;
|
||||
|
||||
{ TBriefFileView }
|
||||
|
||||
TBriefFileView = class (TFileViewWithGrid)
|
||||
protected
|
||||
function GetOnDrawCell: TFileViewOnDrawCell;
|
||||
procedure SetOnDrawCell( OnDrawCell: TFileViewOnDrawCell );
|
||||
protected
|
||||
procedure CreateDefault(AOwner: TWinControl); override;
|
||||
function GetFileViewGridClass: TFileViewGridClass; override;
|
||||
|
|
@ -51,7 +58,9 @@ type
|
|||
procedure DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes = []); override;
|
||||
public
|
||||
function Clone(NewParent: TWinControl): TBriefFileView; override;
|
||||
procedure CloneTo(FileView: TFileView); override;
|
||||
procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); override;
|
||||
property OnDrawCell: TFileViewOnDrawCell read GetOnDrawCell write SetOnDrawCell;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
|
@ -420,6 +429,7 @@ var
|
|||
iTextTop: Integer;
|
||||
AFile: TDisplayFile;
|
||||
FileSourceDirectAccess: Boolean;
|
||||
onDrawCellFocused: Boolean;
|
||||
|
||||
//------------------------------------------------------
|
||||
//begin subprocedures
|
||||
|
|
@ -507,6 +517,11 @@ begin
|
|||
iTextTop := aRect.Top + (RowHeights[aRow] - Canvas.TextHeight('Wg')) div 2;
|
||||
|
||||
DrawIconCell;
|
||||
|
||||
if Assigned(OnDrawCell) and not(CsDesigning in ComponentState) then begin
|
||||
onDrawCellFocused:= (gdSelected in aState) and FFileView.Active;
|
||||
OnDrawCell(FBriefView,aCol,aRow,aRect,onDrawCellFocused,AFile);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
|
|
@ -521,6 +536,16 @@ end;
|
|||
|
||||
{ TBriefFileView }
|
||||
|
||||
function TBriefFileView.GetOnDrawCell: TFileViewOnDrawCell;
|
||||
begin
|
||||
Result:= TBriefDrawGrid(dgPanel).OnDrawCell;
|
||||
end;
|
||||
|
||||
procedure TBriefFileView.SetOnDrawCell(OnDrawCell: TFileViewOnDrawCell);
|
||||
begin
|
||||
TBriefDrawGrid(dgPanel).OnDrawCell:= OnDrawCell;
|
||||
end;
|
||||
|
||||
procedure TBriefFileView.CreateDefault(AOwner: TWinControl);
|
||||
begin
|
||||
inherited CreateDefault(AOwner);
|
||||
|
|
@ -630,6 +655,13 @@ begin
|
|||
Result := TBriefFileView.Create(NewParent, Self);
|
||||
end;
|
||||
|
||||
procedure TBriefFileView.CloneTo(FileView: TFileView);
|
||||
begin
|
||||
inherited CloneTo(FileView);
|
||||
if FileView is TBriefFileView then
|
||||
TBriefFileView(FileView).OnDrawCell:= self.OnDrawCell;
|
||||
end;
|
||||
|
||||
procedure TBriefFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean);
|
||||
begin
|
||||
inherited SaveConfiguration(AConfig, ANode, ASaveHistory);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ type
|
|||
FLastMouseScrollTime: QWord;
|
||||
ColumnsView: TColumnsFileView;
|
||||
|
||||
FOnDrawCell: TFileViewOnDrawCell;
|
||||
|
||||
function GetGridHorzLine: Boolean;
|
||||
function GetGridVertLine: Boolean;
|
||||
procedure SetGridHorzLine(const AValue: Boolean);
|
||||
|
|
@ -85,6 +87,7 @@ type
|
|||
property GridVertLine: Boolean read GetGridVertLine write SetGridVertLine;
|
||||
property GridHorzLine: Boolean read GetGridHorzLine write SetGridHorzLine;
|
||||
|
||||
property OnDrawCell: TFileViewOnDrawCell read FOnDrawCell write FOnDrawCell;
|
||||
end;
|
||||
|
||||
TColumnResized = procedure (Sender: TObject; ColumnIndex: Integer; ColumnNewsize: integer) of object;
|
||||
|
|
@ -103,6 +106,9 @@ type
|
|||
dgPanel: TDrawGridEx;
|
||||
FOnColumnResized: TColumnResized;
|
||||
|
||||
function GetOnDrawCell: TFileViewOnDrawCell;
|
||||
procedure SetOnDrawCell( OnDrawCell: TFileViewOnDrawCell );
|
||||
|
||||
function GetColumnsClass: TPanelColumnsClass;
|
||||
|
||||
procedure SetRowCount(Count: Integer);
|
||||
|
|
@ -206,10 +212,10 @@ type
|
|||
procedure SetGridFunctionDim(ExternalDimFunction:TFunctionDime);
|
||||
|
||||
property OnColumnResized: TColumnResized read FOnColumnResized write FOnColumnResized;
|
||||
property OnDrawCell: TFileViewOnDrawCell read GetOnDrawCell write SetOnDrawCell;
|
||||
published
|
||||
procedure cm_SaveFileDetailsToFile(const Params: array of string);
|
||||
procedure cm_CopyFileDetailsToClip(const Params: array of string);
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
|
@ -614,6 +620,9 @@ begin
|
|||
fpAttributes, // For distinguishing directories
|
||||
fpLink, // For distinguishing directories (link to dir) and link icons
|
||||
fpModificationTime // For selecting/coloring files (by SearchTemplate)
|
||||
{$IFDEF DARWIN}
|
||||
,fpMacOSFinderTag // macOS finder tag
|
||||
{$ENDIF}
|
||||
];
|
||||
|
||||
ColumnsClass := GetColumnsClass;
|
||||
|
|
@ -956,6 +965,7 @@ begin
|
|||
with TColumnsFileView(FileView) do
|
||||
begin
|
||||
FColumnsSortDirections := Self.FColumnsSortDirections;
|
||||
OnDrawCell := Self.OnDrawCell;
|
||||
|
||||
ActiveColm := Self.ActiveColm;
|
||||
ActiveColmSlave := nil;
|
||||
|
|
@ -1114,6 +1124,16 @@ begin
|
|||
Dec(Result.Last, dgPanel.FixedRows);
|
||||
end;
|
||||
|
||||
function TColumnsFileView.GetOnDrawCell: TFileViewOnDrawCell;
|
||||
begin
|
||||
Result:= dgPanel.OnDrawCell;
|
||||
end;
|
||||
|
||||
procedure TColumnsFileView.SetOnDrawCell(OnDrawCell: TFileViewOnDrawCell);
|
||||
begin
|
||||
dgPanel.OnDrawCell:= OnDrawCell;
|
||||
end;
|
||||
|
||||
function TColumnsFileView.GetColumnsClass: TPanelColumnsClass;
|
||||
begin
|
||||
if isSlave then
|
||||
|
|
@ -1519,6 +1539,7 @@ var
|
|||
AFile: TDisplayFile;
|
||||
FileSourceDirectAccess: Boolean;
|
||||
ColumnsSet: TPanelColumnsClass;
|
||||
onDrawCellFocused: Boolean;
|
||||
|
||||
//------------------------------------------------------
|
||||
// begin subprocedures
|
||||
|
|
@ -1974,6 +1995,11 @@ begin
|
|||
DrawOtherCell;
|
||||
end;
|
||||
|
||||
if Assigned(OnDrawCell) and not(CsDesigning in ComponentState) then begin
|
||||
onDrawCellFocused:= (gdSelected in aState) and ColumnsView.Active;
|
||||
OnDrawCell(Self.ColumnsView,aCol,aRow,aRect,onDrawCellFocused,AFile);
|
||||
end;
|
||||
|
||||
DrawCellGrid(aCol,aRow,aRect,aState);
|
||||
DrawLines;
|
||||
|
||||
|
|
|
|||
|
|
@ -358,7 +358,6 @@ type
|
|||
|
||||
function GetVariantFileProperties: TDynamicStringArray; virtual;
|
||||
|
||||
property Active: Boolean read FActive write SetActive;
|
||||
property FilePropertiesNeeded: TFilePropertiesTypes read FFilePropertiesNeeded write FFilePropertiesNeeded;
|
||||
property History: TFileViewHistory read FHistory;
|
||||
property LastActiveFile: String read FLastActiveFile write FLastActiveFile;
|
||||
|
|
@ -368,6 +367,7 @@ type
|
|||
|
||||
public
|
||||
property DisplayFiles: TDisplayFiles read FFiles;
|
||||
property Active: Boolean read FActive write SetActive;
|
||||
|
||||
public
|
||||
constructor Create(AOwner: TWinControl;
|
||||
|
|
|
|||
|
|
@ -618,6 +618,9 @@ begin
|
|||
fpAttributes, // For distinguishing directories
|
||||
fpLink, // For distinguishing directories (link to dir) and link icons
|
||||
fpModificationTime // For selecting/coloring files (by SearchTemplate)
|
||||
{$IFDEF DARWIN}
|
||||
,fpMacOSFinderTag // macOS finder tag
|
||||
{$ENDIF}
|
||||
];
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ interface
|
|||
uses
|
||||
Classes, SysUtils, Controls, ExtCtrls, StdCtrls, LCLType, LMessages, EditBtn,
|
||||
Graphics, LCLVersion,
|
||||
uFile,
|
||||
uFile, uDisplayFile,
|
||||
uFileViewWorker,
|
||||
uOrderedFileView,
|
||||
uFileView,
|
||||
|
|
@ -40,6 +40,9 @@ uses
|
|||
|
||||
type
|
||||
|
||||
TFileViewOnDrawCell = procedure(Sender: TFileView; aCol, aRow: Integer;
|
||||
aRect: TRect; focused: Boolean; aFile: TDisplayFile) of object;
|
||||
|
||||
TRenameFileActionType=(rfatName,rfatExt,rfatFull,rfatToSeparators,rfatNextSeparated);
|
||||
|
||||
TRenameFileEditInfo=record
|
||||
|
|
@ -237,7 +240,7 @@ uses
|
|||
{$ENDIF}
|
||||
LCLIntf, LCLProc, LazUTF8, Forms, Dialogs, Buttons, DCOSUtils, DCStrUtils,
|
||||
fMain, uShowMsg, uLng, uFileProperty, uFileSource, uFileSourceOperationTypes,
|
||||
uGlobs, uInfoToolTip, uDisplayFile, uFileSystemFileSource, uFileSourceUtil,
|
||||
uGlobs, uInfoToolTip, uFileSystemFileSource, uFileSourceUtil,
|
||||
uArchiveFileSourceUtil, uFormCommands, uKeyboard, uFileSourceSetFilePropertyOperation,
|
||||
uFileSystemWatcher;
|
||||
|
||||
|
|
|
|||
|
|
@ -1230,7 +1230,7 @@ object frmMain: TfrmMain
|
|||
end
|
||||
end
|
||||
object mnuNetwork: TMenuItem
|
||||
Caption = 'Network'
|
||||
Caption = '&Network'
|
||||
object miNetworkConnect: TMenuItem
|
||||
Action = actNetworkConnect
|
||||
end
|
||||
|
|
@ -1342,7 +1342,7 @@ object frmMain: TfrmMain
|
|||
end
|
||||
end
|
||||
object mnuFavoriteTabs: TMenuItem
|
||||
Caption = 'Favorites'
|
||||
Caption = 'F&avorites'
|
||||
object mnuCreateNewFavoriteTabs: TMenuItem
|
||||
Action = actSaveFavoriteTabs
|
||||
end
|
||||
|
|
|
|||
|
|
@ -25,10 +25,10 @@
|
|||
{"hash":44892867,"name":"tfrmmain.mnufiles.caption","sourcebytes":[38,70,105,108,101,115],"value":"&Files"},
|
||||
{"hash":2832523,"name":"tfrmmain.mnumark.caption","sourcebytes":[38,77,97,114,107],"value":"&Mark"},
|
||||
{"hash":105082387,"name":"tfrmmain.mnucmd.caption","sourcebytes":[38,67,111,109,109,97,110,100,115],"value":"&Commands"},
|
||||
{"hash":80471771,"name":"tfrmmain.mnunetwork.caption","sourcebytes":[78,101,116,119,111,114,107],"value":"Network"},
|
||||
{"hash":80471099,"name":"tfrmmain.mnunetwork.caption","sourcebytes":[38,78,101,116,119,111,114,107],"value":"&Network"},
|
||||
{"hash":2860947,"name":"tfrmmain.mnutabs.caption","sourcebytes":[38,84,97,98,115],"value":"&Tabs"},
|
||||
{"hash":64866531,"name":"tfrmmain.mnutaboptions.caption","sourcebytes":[84,97,98,32,38,79,112,116,105,111,110,115],"value":"Tab &Options"},
|
||||
{"hash":225003075,"name":"tfrmmain.mnufavoritetabs.caption","sourcebytes":[70,97,118,111,114,105,116,101,115],"value":"Favorites"},
|
||||
{"hash":225281603,"name":"tfrmmain.mnufavoritetabs.caption","sourcebytes":[70,38,97,118,111,114,105,116,101,115],"value":"F&avorites"},
|
||||
{"hash":2858855,"name":"tfrmmain.mnushow.caption","sourcebytes":[38,83,104,111,119],"value":"&Show"},
|
||||
{"hash":32269806,"name":"tfrmmain.mnuconfig.caption","sourcebytes":[67,38,111,110,102,105,103,117,114,97,116,105,111,110],"value":"C&onfiguration"},
|
||||
{"hash":2812976,"name":"tfrmmain.mnuhelp.caption","sourcebytes":[38,72,101,108,112],"value":"&Help"},
|
||||
|
|
|
|||
|
|
@ -5108,11 +5108,17 @@ begin
|
|||
|
||||
if gDelayLoadingTabs then
|
||||
FileViewFlags := [fvfDelayLoadingFiles];
|
||||
if sType = 'columns' then
|
||||
Result := TColumnsFileView.Create(Page, AConfig, ANode, FileViewFlags)
|
||||
else if sType = 'brief' then
|
||||
Result := TBriefFileView.Create(Page, AConfig, ANode, FileViewFlags)
|
||||
else if sType = 'thumbnails' then
|
||||
if sType = 'columns' then begin
|
||||
Result := TColumnsFileView.Create(Page, AConfig, ANode, FileViewFlags);
|
||||
{$IFDEF DARWIN}
|
||||
TColumnsFileView(Result).OnDrawCell:= @DarwinFileViewDrawHelper.OnDrawCell;
|
||||
{$ENDIF}
|
||||
end else if sType = 'brief' then begin
|
||||
Result := TBriefFileView.Create(Page, AConfig, ANode, FileViewFlags);
|
||||
{$IFDEF DARWIN}
|
||||
TBriefFileView(Result).OnDrawCell:= @DarwinFileViewDrawHelper.OnDrawCell;
|
||||
{$ENDIF}
|
||||
end else if sType = 'thumbnails' then
|
||||
Result := TThumbFileView.Create(Page, AConfig, ANode, FileViewFlags)
|
||||
else begin
|
||||
DCDebug(rsMsgLogError + 'Invalid file view type "%s"', [sType]);
|
||||
|
|
|
|||
|
|
@ -348,6 +348,32 @@ procedure TfrmPackDlg.SwitchOptions(ArcTypeChange: Boolean); // Ugly but working
|
|||
var
|
||||
I: LongInt;
|
||||
sCmd: String;
|
||||
procedure SwitchTarOptions(SingleFileMode: Boolean);
|
||||
begin
|
||||
if SingleFileMode then
|
||||
begin
|
||||
// If file list contain directory then
|
||||
// put to the tar archive first is needed
|
||||
if FHasFolder then
|
||||
begin
|
||||
cbPutInTarFirst.Checked:= True;
|
||||
EnableControl(cbPutInTarFirst, False);
|
||||
end
|
||||
else
|
||||
begin
|
||||
cbCreateSeparateArchives.Checked:= (FCount = 1);
|
||||
cbPutInTarFirst.Checked:= (FCount > 1);
|
||||
EnableControl(cbPutInTarFirst, True);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
sCmd:= LowerCase(FArchiveType);
|
||||
cbPutInTarFirst.Checked:= False;
|
||||
EnableControl(cbPutInTarFirst, not ((sCmd = 'tar') or StrBegins(sCmd, 'tar.')));
|
||||
cbCreateSeparateArchives.Checked:= False;
|
||||
end;
|
||||
end;
|
||||
begin
|
||||
cbPutInTarFirst.OnChange:= nil;
|
||||
|
||||
|
|
@ -367,25 +393,7 @@ begin
|
|||
// If plugin supports packing with password
|
||||
EnableControl(cbEncrypt, ((gWCXPlugins.Flags[I] and PK_CAPS_ENCRYPT) <> 0));
|
||||
// If archive can not contain multiple files
|
||||
if ((gWCXPlugins.Flags[I] and PK_CAPS_MULTIPLE) = 0) then
|
||||
begin
|
||||
// If file list contain directory then
|
||||
// put to the tar archive first is needed
|
||||
if not FHasFolder then
|
||||
cbCreateSeparateArchives.Checked:= (FCount > 1)
|
||||
else
|
||||
begin
|
||||
cbPutInTarFirst.Checked:= True;
|
||||
EnableControl(cbPutInTarFirst, False);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
sCmd:= LowerCase(FArchiveType);
|
||||
cbPutInTarFirst.Checked:= False;
|
||||
EnableControl(cbPutInTarFirst, not ((sCmd = 'tar') or StrBegins(sCmd, 'tar.')));
|
||||
cbCreateSeparateArchives.Checked:= False;
|
||||
end;
|
||||
SwitchTarOptions((gWCXPlugins.Flags[I] and PK_CAPS_MULTIPLE) = 0);
|
||||
FPlugin:= True;
|
||||
// Options that supported by plugins
|
||||
EnableControl(cbStoreDir, True);
|
||||
|
|
@ -420,24 +428,7 @@ begin
|
|||
EnableControl(cbEncrypt, (Pos('%W', sCmd) <> 0));
|
||||
|
||||
// If archive can not contain multiple files
|
||||
if (mafFileNameList in FFlags) then
|
||||
begin
|
||||
// If file list contain directory then
|
||||
// put to the tar archive first is needed
|
||||
if not FHasFolder then
|
||||
cbCreateSeparateArchives.Checked:= (FCount > 1)
|
||||
else
|
||||
begin
|
||||
cbPutInTarFirst.Checked:= True;
|
||||
EnableControl(cbPutInTarFirst, False);
|
||||
end;
|
||||
end
|
||||
else begin
|
||||
sCmd:= LowerCase(FArchiveType);
|
||||
cbPutInTarFirst.Checked:= False;
|
||||
EnableControl(cbPutInTarFirst, not ((sCmd = 'tar') or StrBegins(sCmd, 'tar.')));
|
||||
cbCreateSeparateArchives.Checked:= False;
|
||||
end;
|
||||
SwitchTarOptions(mafFileNameList in FFlags);
|
||||
FPlugin:= False;
|
||||
// Options that don't supported by addons
|
||||
cbStoreDir.Checked:= True;
|
||||
|
|
|
|||
|
|
@ -1374,6 +1374,7 @@ inherited frmOptionsArchivers: TfrmOptionsArchivers
|
|||
end
|
||||
object miArchiverDiscardModification: TMenuItem
|
||||
Caption = 'Discard modifications'
|
||||
Enabled = False
|
||||
OnClick = miArchiverDiscardModificationClick
|
||||
end
|
||||
object miSeparator1: TMenuItem
|
||||
|
|
|
|||
|
|
@ -680,6 +680,7 @@ begin
|
|||
if MultiArcListTemp <> nil then
|
||||
MultiArcListTemp.Free;
|
||||
MultiArcListTemp := gMultiArcList.Clone;
|
||||
FillListBoxWithArchiverList;
|
||||
lbxArchiverSelectionChange(lbxArchiver, False);
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -117,7 +117,6 @@ inherited frmOptionsToolTips: TfrmOptionsToolTips
|
|||
Width = 54
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 3
|
||||
Cancel = True
|
||||
Caption = 'Cop&y'
|
||||
OnClick = btnCopyToolTipsFileTypeClick
|
||||
TabOrder = 2
|
||||
|
|
|
|||
|
|
@ -747,6 +747,11 @@ begin
|
|||
|
||||
dwFileAttributes := mbFileGetAttr(aFileName);
|
||||
|
||||
if FPS_ISLNK(dwFileAttributes) then
|
||||
begin
|
||||
dwFileAttributes := mbFileGetAttrNoLinks(aFileName);
|
||||
end;
|
||||
|
||||
if dwFileAttributes = faInvalidAttributes then
|
||||
begin
|
||||
ActivatePanel(pnlFolder);
|
||||
|
|
@ -2872,6 +2877,10 @@ begin
|
|||
if sEncoding = EncodingUTF8 then
|
||||
Buffer := FSynEditOriginalText
|
||||
else begin
|
||||
if (sEncoding = EncodingUTF16LE) or (sEncoding = EncodingUTF16BE) then
|
||||
begin
|
||||
FSynEditOriginalText := Copy(FSynEditOriginalText, 3, MaxInt); // Skip BOM
|
||||
end;
|
||||
Buffer := ConvertEncoding(FSynEditOriginalText, sEncoding, EncodingUTF8);
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -964,7 +964,7 @@ begin
|
|||
end;
|
||||
end else if TDarwinFSWatchEventCategory.ecCreated in event.categories then
|
||||
FCurrentEventData.EventType := fswFileCreated
|
||||
else if TDarwinFSWatchEventCategory.ecCoreAttribChanged in event.categories then
|
||||
else if TDarwinFSWatchEventCategory.ecAttribChanged in event.categories then
|
||||
FCurrentEventData.EventType := fswFileChanged
|
||||
else
|
||||
exit;
|
||||
|
|
|
|||
|
|
@ -8,8 +8,9 @@ interface
|
|||
uses
|
||||
Classes, SysUtils,
|
||||
LCLType, Forms, Menus,
|
||||
fMain, uMyDarwin, uDCUtils, uLng,
|
||||
fMain, uDCUtils, uLng,
|
||||
uFileView, uBriefFileView, uColumnsFileView, uThumbFileView,
|
||||
uMyDarwin, uDarwinFinder, uDarwinFinderModel, uSearchResultUtil,
|
||||
CocoaAll, CocoaConfig, CocoaToolBar, Cocoa_Extra;
|
||||
|
||||
procedure initCocoaModernFormConfig;
|
||||
|
|
@ -110,13 +111,12 @@ const
|
|||
COMMON_FOLDERS: TStringArray = (
|
||||
'~/Documents',
|
||||
'~/Desktop',
|
||||
'~/Downloads',
|
||||
'~',
|
||||
'~/Pictures',
|
||||
'~/Movies',
|
||||
'~/Music',
|
||||
'/Applications/Utilities',
|
||||
|
||||
'~/Downloads',
|
||||
'~/Library',
|
||||
'/Applications',
|
||||
|
||||
|
|
@ -134,6 +134,11 @@ type
|
|||
procedure showQuickLookPanel( Sender: TObject );
|
||||
procedure showEditTagPanel( Sender: TObject );
|
||||
procedure goToFolder( Sender: TObject );
|
||||
|
||||
procedure showFinderTagSelectorPanel( Sender: TObject );
|
||||
procedure onFinderTagSelectorPanelClose( const cancel: Boolean; const tagNames: NSArray );
|
||||
procedure searchOneFinderTagAction( Sender: TObject );
|
||||
procedure onSearchFinderTagComplete( const searchName: String; const files: TStringArray );
|
||||
end;
|
||||
|
||||
var
|
||||
|
|
@ -168,6 +173,39 @@ begin
|
|||
frmMain.Commands.cm_ChangeDir( [path] );
|
||||
end;
|
||||
|
||||
procedure TToolBarMenuHandler.showFinderTagSelectorPanel(Sender: TObject);
|
||||
begin
|
||||
uDarwinFinderUtil.popoverTagsSelector(
|
||||
rsMFSTBISearchCombinedTags,
|
||||
@self.onFinderTagSelectorPanelClose,
|
||||
NSView(frmMain.Handle) , NSMaxYEdge );
|
||||
end;
|
||||
|
||||
procedure TToolBarMenuHandler.onFinderTagSelectorPanelClose(const cancel: Boolean;
|
||||
const tagNames: NSArray);
|
||||
begin
|
||||
if cancel then
|
||||
Exit;
|
||||
if tagNames.count = 0 then
|
||||
Exit;
|
||||
uDarwinFinderModelUtil.searchFilesForTagNames( tagNames, @self.onSearchFinderTagComplete );
|
||||
end;
|
||||
|
||||
procedure TToolBarMenuHandler.searchOneFinderTagAction( Sender: TObject );
|
||||
var
|
||||
menuItem: TMenuItem absolute Sender;
|
||||
tagName: NSString;
|
||||
begin
|
||||
tagName:= StringToNSString( menuItem.Caption );
|
||||
uDarwinFinderModelUtil.searchFilesForTagName( tagName, @self.onSearchFinderTagComplete );
|
||||
end;
|
||||
|
||||
procedure TToolBarMenuHandler.onSearchFinderTagComplete(
|
||||
const searchName: String; const files: TStringArray);
|
||||
begin
|
||||
TSearchResultUtil.addResultPage( searchName, files );
|
||||
end;
|
||||
|
||||
function getMacOSDisplayNameFromPath(const path: String): String;
|
||||
var
|
||||
cocoaPath: NSString;
|
||||
|
|
@ -178,50 +216,60 @@ begin
|
|||
Result:= displayName.UTF8String;
|
||||
end;
|
||||
|
||||
function onGetFolderMenu: TMenuItem;
|
||||
procedure onGetFolderMenu( const menu: TMenu );
|
||||
var
|
||||
menu: TMenuItem;
|
||||
items: TMenuItem;
|
||||
tag: PtrInt = 0;
|
||||
|
||||
function newItem( caption: String ): TMenuItem;
|
||||
procedure newItem( imageName: String );
|
||||
var
|
||||
folderName: String;
|
||||
lclItem: TMenuItem;
|
||||
cocoaItem: NSMenuItem;
|
||||
cocoaImage: NSImage;
|
||||
begin
|
||||
folderName:= getMacOSDisplayNameFromPath( COMMON_FOLDERS[tag] );
|
||||
Result:= TMenuItem.Create( menu );
|
||||
Result.Caption:= caption + ' ' + folderName;
|
||||
Result.onClick:= @toolBarMenuHandler.goToFolder;
|
||||
Result.Tag:= tag;
|
||||
lclItem:= TMenuItem.Create( menu );
|
||||
lclItem.Caption:= folderName;
|
||||
lclItem.onClick:= @toolBarMenuHandler.goToFolder;
|
||||
lclItem.Tag:= tag;
|
||||
items.Add( lclItem );
|
||||
|
||||
cocoaImage:= NSImage.imageWithSystemSymbolName_accessibilityDescription(
|
||||
NSSTR(imageName), nil );
|
||||
cocoaItem:= NSMenuItem( lclItem.Handle );
|
||||
cocoaItem.setImage( cocoaImage );
|
||||
|
||||
inc( tag );
|
||||
end;
|
||||
|
||||
begin
|
||||
menu:= TMenuItem.Create( frmMain );
|
||||
menu.Add( newItem('') );
|
||||
menu.Add( newItem('') );
|
||||
menu.Add( newItem('') );
|
||||
menu.Add( newItem('') );
|
||||
menu.Add( newItem('') );
|
||||
menu.Add( newItem('') );
|
||||
menu.Add( newItem('') );
|
||||
menu.AddSeparator;
|
||||
menu.Add( newItem(' ') );
|
||||
menu.Add( newItem(' ') );
|
||||
menu.Add( newItem(' ') );
|
||||
menu.AddSeparator;
|
||||
menu.Add( newItem(' ') );
|
||||
Result:= menu;
|
||||
items:= menu.Items;
|
||||
newItem('doc');
|
||||
newItem('menubar.dock.rectangle');
|
||||
newItem('arrow.down.circle');
|
||||
newItem('house');
|
||||
newItem('photo');
|
||||
newItem('film');
|
||||
newItem('music.quarternote.3');
|
||||
newItem('wrench.and.screwdriver.fill');
|
||||
newItem('l.circle');
|
||||
newItem('a.circle');
|
||||
items.AddSeparator;
|
||||
newItem('trash');
|
||||
end;
|
||||
|
||||
function onGetCommandMenu: TMenuItem;
|
||||
var
|
||||
menu: TMenuItem;
|
||||
function copyMenuItem( owner: TComponent; source: TMenuItem ): TMenuItem;
|
||||
begin
|
||||
Result:= TMenuItem.Create( owner );
|
||||
Result.Caption:= source.Caption;
|
||||
Result.Action:= source.Action;
|
||||
end;
|
||||
|
||||
procedure onGetCommandMenu( const menu: TMenu );
|
||||
function toItem( source: TMenuItem ): TMenuItem;
|
||||
begin
|
||||
Result:= TMenuItem.Create( menu );
|
||||
Result.Caption:= source.Caption;
|
||||
Result.Action:= source.Action;
|
||||
Result:= copyMenuItem( menu, source );
|
||||
end;
|
||||
|
||||
function createShowHotlistMenuItem: TMenuItem;
|
||||
|
|
@ -253,40 +301,88 @@ var
|
|||
Result.OnClick:= @toolBarMenuHandler.showEditTagPanel;
|
||||
end;
|
||||
|
||||
begin
|
||||
menu:= TMenuItem.Create( frmMain );
|
||||
menu.Add( toItem(frmMain.miMultiRename) );
|
||||
menu.Add( toItem(frmMain.mnuFilesCmpCnt) );
|
||||
menu.Add( toItem(frmMain.mnuCmdSyncDirs) );
|
||||
menu.AddSeparator;
|
||||
menu.Add( toItem(frmMain.mnuCmdSearch) );
|
||||
menu.Add( toItem(frmMain.mnuCmdAddNewSearch) );
|
||||
menu.Add( toItem(frmMain.mnuCmdViewSearches) );
|
||||
menu.AddSeparator;
|
||||
menu.Add( createShowHotlistMenuItem );
|
||||
menu.Add( toItem(frmMain.mnuCmdConfigDirHotlist) );
|
||||
menu.AddSeparator;
|
||||
menu.Add( createShowFavoriteMenuItem );
|
||||
menu.Add( toItem(frmMain.mnuConfigFavoriteTabs) );
|
||||
menu.AddSeparator;
|
||||
menu.Add( createQuickLookMenuItem );
|
||||
menu.Add( toItem(frmMain.mnuQuickView) );
|
||||
menu.Add( toItem(frmMain.mnuFilesShwSysFiles) );
|
||||
menu.Add( toItem(frmMain.mnuShowOperations) );
|
||||
menu.AddSeparator;
|
||||
menu.Add( toItem(frmMain.miEditComment) );
|
||||
menu.Add( createTagMenuItem );
|
||||
menu.AddSeparator;
|
||||
menu.Add( toItem(frmMain.mnuFilesSymLink) );
|
||||
menu.Add( toItem(frmMain.mnuFilesHardLink) );
|
||||
menu.AddSeparator;
|
||||
menu.Add( toItem(frmMain.mnuSetFileProperties) );
|
||||
menu.Add( toItem(frmMain.mnuFilesProperties) );
|
||||
menu.AddSeparator;
|
||||
menu.Add( toItem(frmMain.mnuCheckSumCalc) );
|
||||
menu.Add( toItem(frmMain.mnuCheckSumVerify) );
|
||||
var
|
||||
items: TMenuItem;
|
||||
|
||||
Result:= menu;
|
||||
begin
|
||||
items:= menu.Items;
|
||||
items.Add( toItem(frmMain.miMultiRename) );
|
||||
items.Add( toItem(frmMain.mnuFilesCmpCnt) );
|
||||
items.Add( toItem(frmMain.mnuCmdSyncDirs) );
|
||||
items.AddSeparator;
|
||||
items.Add( toItem(frmMain.mnuCmdSearch) );
|
||||
items.Add( toItem(frmMain.mnuCmdAddNewSearch) );
|
||||
items.Add( toItem(frmMain.mnuCmdViewSearches) );
|
||||
items.AddSeparator;
|
||||
items.Add( createShowHotlistMenuItem );
|
||||
items.Add( toItem(frmMain.mnuCmdConfigDirHotlist) );
|
||||
items.AddSeparator;
|
||||
items.Add( createShowFavoriteMenuItem );
|
||||
items.Add( toItem(frmMain.mnuConfigFavoriteTabs) );
|
||||
items.AddSeparator;
|
||||
items.Add( createQuickLookMenuItem );
|
||||
items.Add( toItem(frmMain.mnuQuickView) );
|
||||
items.Add( toItem(frmMain.mnuFilesShwSysFiles) );
|
||||
items.Add( toItem(frmMain.mnuShowOperations) );
|
||||
items.AddSeparator;
|
||||
items.Add( toItem(frmMain.miEditComment) );
|
||||
items.Add( createTagMenuItem );
|
||||
items.AddSeparator;
|
||||
items.Add( toItem(frmMain.mnuFilesSymLink) );
|
||||
items.Add( toItem(frmMain.mnuFilesHardLink) );
|
||||
items.AddSeparator;
|
||||
items.Add( toItem(frmMain.mnuSetFileProperties) );
|
||||
items.Add( toItem(frmMain.mnuFilesProperties) );
|
||||
items.AddSeparator;
|
||||
items.Add( toItem(frmMain.mnuCheckSumCalc) );
|
||||
items.Add( toItem(frmMain.mnuCheckSumVerify) );
|
||||
end;
|
||||
|
||||
procedure onGetSearchMenu( const menu: TMenu );
|
||||
var
|
||||
items: TMenuItem;
|
||||
|
||||
procedure createSidebarTagMenuItem;
|
||||
var
|
||||
tagNames: NSArray;
|
||||
tagName: NSString;
|
||||
menuItem: TMenuItem;
|
||||
begin
|
||||
tagNames:= uDarwinFinderModelUtil.getSidebarTagNames;
|
||||
for tagName in tagNames do begin
|
||||
menuItem:= TMenuItem.Create( menu );
|
||||
menuItem.Caption:= tagName.UTF8String;
|
||||
menuItem.OnClick:= @toolBarMenuHandler.searchOneFinderTagAction;
|
||||
items.Add( menuItem );
|
||||
end;
|
||||
uDarwinFinderUtil.attachSearchForTagsMenu( menu );
|
||||
end;
|
||||
|
||||
procedure createCombinedTagMenuItem;
|
||||
var
|
||||
menuItem: TMenuItem;
|
||||
begin
|
||||
menuItem:= TMenuItem.Create( menu );
|
||||
menuItem.Caption:= rsMFSTBISearchCombinedTags;
|
||||
menuItem.OnClick:= @toolBarMenuHandler.showFinderTagSelectorPanel;
|
||||
items.Add( menuItem );
|
||||
end;
|
||||
|
||||
procedure createSearchFileMenuItem;
|
||||
var
|
||||
menuItem: TMenuItem;
|
||||
begin
|
||||
menuItem:= copyMenuItem( menu, frmMain.mnuCmdSearch );
|
||||
items.Add( menuItem );
|
||||
end;
|
||||
|
||||
begin
|
||||
items:= menu.Items;
|
||||
createSidebarTagMenuItem;
|
||||
items.AddSeparator;
|
||||
createCombinedTagMenuItem;
|
||||
items.AddSeparator;
|
||||
createSearchFileMenuItem;
|
||||
end;
|
||||
|
||||
procedure terminalAction( const Sender: id );
|
||||
|
|
@ -305,13 +401,8 @@ begin
|
|||
end;
|
||||
|
||||
procedure privilegeAction( const Sender: id );
|
||||
const
|
||||
Privacy_AllFiles = 'x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles';
|
||||
var
|
||||
url: NSURL;
|
||||
begin
|
||||
url:= NSURL.URLWithString( NSSTR(Privacy_AllFiles) );
|
||||
NSWorkspace.sharedWorkspace.openURL( url );
|
||||
openSystemSecurityPreferences_PrivacyAllFiles;
|
||||
end;
|
||||
|
||||
const
|
||||
|
|
@ -499,15 +590,18 @@ const
|
|||
onAction: @terminalAction;
|
||||
);
|
||||
|
||||
searchFilesItemConfig: TCocoaConfigToolBarItem = (
|
||||
identifier: 'MainForm.SearchFiles';
|
||||
priority: NSToolbarItemVisibilityPriorityStandard;
|
||||
navigational: False;
|
||||
searchItemConfig: TCocoaConfigToolBarItemMenu = (
|
||||
identifier: 'MainForm.Search';
|
||||
iconName: 'magnifyingglass';
|
||||
title: rsMFSTBISearchTitle;
|
||||
tips: rsMFSTBISearchTips;
|
||||
bordered: True;
|
||||
onAction: @searchFilesAction;
|
||||
onAction: nil;
|
||||
|
||||
showsIndicator: False;
|
||||
dynamic: True;
|
||||
menu: nil;
|
||||
onGetMenu: @onGetSearchMenu;
|
||||
);
|
||||
|
||||
privilegeItemConfig: TCocoaConfigToolBarItem = (
|
||||
|
|
@ -605,7 +699,7 @@ const
|
|||
'NSToolbarFlexibleSpaceItem',
|
||||
'MainForm.Command',
|
||||
'NSToolbarFlexibleSpaceItem',
|
||||
'MainForm.SearchFiles',
|
||||
'MainForm.Search',
|
||||
'MainForm.Terminal',
|
||||
'MainForm.Privilege'
|
||||
);
|
||||
|
|
@ -624,7 +718,7 @@ const
|
|||
'MainForm.FinderInfo',
|
||||
'MainForm.Command',
|
||||
|
||||
'MainForm.SearchFiles',
|
||||
'MainForm.Search',
|
||||
'MainForm.Terminal',
|
||||
'MainForm.Privilege',
|
||||
|
||||
|
|
@ -660,7 +754,7 @@ begin
|
|||
TCocoaToolBarUtils.toClass(finderRevealItemConfig),
|
||||
TCocoaToolBarUtils.toClass(finderInfoItemConfig),
|
||||
TCocoaToolBarUtils.toClass(terminalItemConfig),
|
||||
TCocoaToolBarUtils.toClass(searchFilesItemConfig),
|
||||
TCocoaToolBarUtils.toClass(searchItemConfig),
|
||||
TCocoaToolBarUtils.toClass(privilegeItemConfig),
|
||||
|
||||
TCocoaToolBarUtils.toClass(refreshItemConfig),
|
||||
|
|
|
|||
|
|
@ -11,13 +11,12 @@ uses
|
|||
uDarwinFinderModel,
|
||||
MacOSAll, CocoaAll, CocoaConst, CocoaTextEdits, CocoaUtils, Cocoa_Extra;
|
||||
|
||||
const
|
||||
FINDER_FAVORITE_TAGS_MENU_ITEM_CAPTION = #$EF#$BF#$BC'FinderFavoriteTags';
|
||||
|
||||
const
|
||||
FINDER_FAVORITE_TAGS_MENU_ITEM_SIZE = 20.0;
|
||||
FINDER_FAVORITE_TAGS_MENU_ITEM_SPACING = 4.0;
|
||||
|
||||
FINDER_TAGS_MENU_ROUND_SIZE = 12;
|
||||
|
||||
const
|
||||
TAG_POPOVER_WIDTH = 228.0;
|
||||
TAG_POPOVER_HEIGHT = 303.0;
|
||||
|
|
@ -32,17 +31,30 @@ const
|
|||
TAG_TOKEN_LINE_SPACING = 1.0;
|
||||
|
||||
type
|
||||
TFinderTagMenuRoundImages = Array of NSImage;
|
||||
|
||||
TFinderEditorCloseHandler = procedure ( const cancel: Boolean; const tagNames: NSArray ) of object;
|
||||
|
||||
{ uDarwinFinderUtil }
|
||||
|
||||
uDarwinFinderUtil = class
|
||||
strict private class var
|
||||
_menuTagRoundImages: TFinderTagMenuRoundImages;
|
||||
public
|
||||
class procedure popoverFileTags(
|
||||
const path: String; const positioningView: NSView; const edge: NSRectEdge );
|
||||
class procedure attachFinderTagsMenu(
|
||||
const path: String; const lclMenu: TPopupMenu );
|
||||
class procedure popoverFileTagsEditor(
|
||||
const path: String; onClose: TFinderEditorCloseHandler;
|
||||
const positioningView: NSView; const edge: NSRectEdge );
|
||||
class procedure popoverTagsSelector(
|
||||
const title: String; onClose: TFinderEditorCloseHandler;
|
||||
const positioningView: NSView; const edge: NSRectEdge );
|
||||
|
||||
class function attachFinderTagsMenu( const path: String;
|
||||
const lclMenu: TPopupMenu; const menuIndex: Integer ): Boolean;
|
||||
class procedure attachSearchForTagsMenu( const lclMenu: TMenu );
|
||||
private
|
||||
class procedure drawTagName( const tagName: NSString;
|
||||
const fontSize: CGFloat; const color: NSColor; const rect: NSRect );
|
||||
class procedure initMenuRoundNSImages;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
|
@ -120,21 +132,24 @@ type
|
|||
TCocoaTokenFieldDelegateProtocol,
|
||||
NSTableViewDataSourceProtocol )
|
||||
private
|
||||
_url: NSUrl;
|
||||
_popover: NSPopover;
|
||||
_pathLabel: NSTextField;
|
||||
_titleLabel: NSTextField;
|
||||
_tagsTokenField: TCocoaTokenField;
|
||||
_filterListView: NSTableView;
|
||||
_filterTagNames: NSMutableArray;
|
||||
_cancel: Boolean;
|
||||
_onClose: TFinderEditorCloseHandler;
|
||||
public
|
||||
class function editorWithPath( const path: NSString): id; message 'doublecmd_editorWithPath:';
|
||||
function initWithPath( const path: NSString): id; message 'doublecmd_initWithPath:';
|
||||
class function editorWithPath( const path: NSString ): id; message 'doublecmd_editorWithPath:';
|
||||
class function selectorWithTitle( const titleString: NSString ): id; message 'doublecmd_editorWithTitle:';
|
||||
function init: id; override;
|
||||
procedure dealloc; override;
|
||||
procedure showPopover( const sender: NSView ; const edge: NSRectEdge );
|
||||
message 'doublecmd_showPopover:sender:';
|
||||
public
|
||||
procedure loadView; override;
|
||||
procedure setTitle(newValue: NSString); override;
|
||||
procedure setTagNames( tagNames: NSArray ); message 'doublecmd_setTagNames:';
|
||||
public
|
||||
function numberOfRowsInTableView (tableView: NSTableView): NSInteger;
|
||||
function tableView_objectValueForTableColumn_row (
|
||||
|
|
@ -590,18 +605,32 @@ end;
|
|||
class function TFinderTagsEditorPanel.editorWithPath( const path: NSString ): id;
|
||||
var
|
||||
panel: TFinderTagsEditorPanel;
|
||||
url: NSURL;
|
||||
begin
|
||||
panel:= TFinderTagsEditorPanel.alloc.initWithPath( path );
|
||||
url:= NSURL.fileURLWithPath( path );
|
||||
// release in popoverDidClose()
|
||||
panel:= TFinderTagsEditorPanel.new;
|
||||
panel.loadView;
|
||||
panel.setTitle( url.lastPathComponent );
|
||||
panel.setTagNames( uDarwinFinderModelUtil.getTagNamesOfFile(url) );
|
||||
Result:= panel;
|
||||
end;
|
||||
|
||||
function TFinderTagsEditorPanel.initWithPath( const path: NSString ): id;
|
||||
class function TFinderTagsEditorPanel.selectorWithTitle( const titleString: NSString ): id;
|
||||
var
|
||||
panel: TFinderTagsEditorPanel;
|
||||
begin
|
||||
// release in popoverDidClose()
|
||||
panel:= TFinderTagsEditorPanel.new;
|
||||
panel.loadView;
|
||||
panel.setTitle( titleString );
|
||||
Result:= panel;
|
||||
end;
|
||||
|
||||
function TFinderTagsEditorPanel.init: id;
|
||||
begin
|
||||
Inherited init;
|
||||
|
||||
_url:= NSURL.fileURLWithPath( path );
|
||||
_url.retain;
|
||||
_filterTagNames:= NSMutableArray.new;
|
||||
Result:= self;
|
||||
|
||||
|
|
@ -610,8 +639,8 @@ end;
|
|||
|
||||
procedure TFinderTagsEditorPanel.dealloc;
|
||||
begin
|
||||
_titleLabel.release;
|
||||
_tagsTokenField.release;
|
||||
_url.release;
|
||||
_filterTagNames.release;
|
||||
_popover.release;
|
||||
Inherited;
|
||||
|
|
@ -619,6 +648,8 @@ end;
|
|||
|
||||
procedure TFinderTagsEditorPanel.popoverDidClose(notification: NSNotification);
|
||||
begin
|
||||
_popover.setDelegate( nil );
|
||||
_popover.setContentViewController( nil );
|
||||
self.release;
|
||||
end;
|
||||
|
||||
|
|
@ -626,7 +657,6 @@ procedure TFinderTagsEditorPanel.showPopover( const sender: NSView; const edge:
|
|||
begin
|
||||
self.view.setFrameSize( NSMakeSize(TAG_POPOVER_WIDTH, TAG_POPOVER_HEIGHT) );
|
||||
|
||||
_tagsTokenField.setObjectValue( uDarwinFinderModelUtil.getTagNamesOfFile(_url) );
|
||||
_tagsTokenField.setFrameSize( NSMakeSize(TAG_POPOVER_WIDTH-TAG_POPOVER_PADDING*2,0) );
|
||||
|
||||
_popover.showRelativeToRect_ofView_preferredEdge(
|
||||
|
|
@ -645,16 +675,15 @@ var
|
|||
begin
|
||||
contentView:= NSView.new;
|
||||
|
||||
_pathLabel:= NSTextField.new;
|
||||
_pathLabel.setHidden( False );
|
||||
_pathLabel.setStringValue( _url.lastPathComponent );
|
||||
_pathLabel.setAlignment( NSTextAlignmentCenter );
|
||||
_pathLabel.setLineBreakMode( NSLineBreakByTruncatingMiddle );
|
||||
_pathLabel.setEditable( False );
|
||||
_pathLabel.setBordered( False );
|
||||
_pathLabel.setBackgroundColor( NSColor.clearColor );
|
||||
_pathLabel.setFocusRingType( NSFocusRingTypeNone );
|
||||
contentView.addSubview( _pathLabel );
|
||||
_titleLabel:= NSTextField.new;
|
||||
_titleLabel.setHidden( False );
|
||||
_titleLabel.setAlignment( NSTextAlignmentCenter );
|
||||
_titleLabel.setLineBreakMode( NSLineBreakByTruncatingMiddle );
|
||||
_titleLabel.setEditable( False );
|
||||
_titleLabel.setBordered( False );
|
||||
_titleLabel.setBackgroundColor( NSColor.clearColor );
|
||||
_titleLabel.setFocusRingType( NSFocusRingTypeNone );
|
||||
contentView.addSubview( _titleLabel );
|
||||
|
||||
NSTokenField.setCellClass( TCocoaTokenFieldCell );
|
||||
_tagsTokenField:= TCocoaTokenField.new;
|
||||
|
|
@ -688,6 +717,16 @@ begin
|
|||
contentView.release;
|
||||
end;
|
||||
|
||||
procedure TFinderTagsEditorPanel.setTitle(newValue: NSString);
|
||||
begin
|
||||
_titleLabel.setStringValue( newValue );
|
||||
end;
|
||||
|
||||
procedure TFinderTagsEditorPanel.setTagNames(tagNames: NSArray);
|
||||
begin
|
||||
_tagsTokenField.setObjectValue( tagNames );
|
||||
end;
|
||||
|
||||
function TFinderTagsEditorPanel.numberOfRowsInTableView(tableView: NSTableView
|
||||
): NSInteger;
|
||||
begin
|
||||
|
|
@ -748,7 +787,7 @@ begin
|
|||
pathLabelFrame.size.height:= TAG_LABEL_FONT_SIZE + 3;
|
||||
pathLabelFrame.origin.x:= TAG_POPOVER_PADDING;
|
||||
pathLabelFrame.origin.y:= popoverHeight - ( pathLabelFrame.size.height + TAG_POPOVER_PADDING );
|
||||
_pathLabel.setFrame( pathLabelFrame );
|
||||
_titleLabel.setFrame( pathLabelFrame );
|
||||
|
||||
tagsTokenFieldFrame.size:= _tagsTokenField.intrinsicContentSize;
|
||||
if tagsTokenFieldFrame.size.height > 190 then
|
||||
|
|
@ -812,34 +851,53 @@ end;
|
|||
|
||||
procedure TFinderTagsEditorPanel.popoverWillClose(notification: NSNotification);
|
||||
var
|
||||
tagNameArray: NSArray;
|
||||
tagNames: NSArray;
|
||||
begin
|
||||
if _cancel then
|
||||
if _onClose = nil then
|
||||
Exit;
|
||||
tagNameArray:= _tagsTokenField.objectValue;
|
||||
uDarwinFinderModelUtil.setTagNamesOfFile( _url, tagNameArray );
|
||||
|
||||
tagNames:= nil;
|
||||
if NOT _cancel then
|
||||
tagNames:= _tagsTokenField.objectValue;
|
||||
|
||||
_onClose( _cancel, tagNames );
|
||||
end;
|
||||
|
||||
{ uDarwinFinderUtil }
|
||||
|
||||
class procedure uDarwinFinderUtil.popoverFileTags(
|
||||
const path: String; const positioningView: NSView ; const edge: NSRectEdge );
|
||||
class procedure uDarwinFinderUtil.popoverFileTagsEditor(
|
||||
const path: String; onClose: TFinderEditorCloseHandler;
|
||||
const positioningView: NSView ; const edge: NSRectEdge );
|
||||
var
|
||||
panel: TFinderTagsEditorPanel;
|
||||
begin
|
||||
panel:= TFinderTagsEditorPanel.editorWithPath( StrToNSString(path) );
|
||||
panel._onClose:= onClose;
|
||||
panel.showPopover( positioningView, edge );
|
||||
end;
|
||||
|
||||
class procedure uDarwinFinderUtil.attachFinderTagsMenu( const path: String;
|
||||
const lclMenu: TPopupMenu );
|
||||
class procedure uDarwinFinderUtil.popoverTagsSelector(
|
||||
const title: String; onClose: TFinderEditorCloseHandler;
|
||||
const positioningView: NSView; const edge: NSRectEdge);
|
||||
var
|
||||
panel: TFinderTagsEditorPanel;
|
||||
begin
|
||||
panel:= TFinderTagsEditorPanel.selectorWithTitle( StrToNSString(title) );
|
||||
panel._onClose:= onClose;
|
||||
panel.showPopover( positioningView, edge );
|
||||
end;
|
||||
|
||||
class function uDarwinFinderUtil.attachFinderTagsMenu( const path: String;
|
||||
const lclMenu: TPopupMenu; const menuIndex: Integer ): Boolean;
|
||||
var
|
||||
menuIndex: Integer;
|
||||
menuView: TFinderFavoriteTagsMenuView;
|
||||
cocoaItem: NSMenuItem;
|
||||
favoriteTags: NSArray;
|
||||
begin
|
||||
menuIndex:= lclMenu.Items.IndexOfCaption( FINDER_FAVORITE_TAGS_MENU_ITEM_CAPTION );
|
||||
if menuIndex < 0 then
|
||||
Result:= False;
|
||||
|
||||
favoriteTags:= uDarwinFinderModelUtil.favoriteTags;
|
||||
if favoriteTags = nil then
|
||||
Exit;
|
||||
|
||||
menuView:= TFinderFavoriteTagsMenuView.alloc.initWithFrame(
|
||||
|
|
@ -848,12 +906,36 @@ begin
|
|||
FINDER_FAVORITE_TAGS_MENU_ITEM_SIZE + FINDER_FAVORITE_TAGS_MENU_ITEM_SPACING*2 ) );
|
||||
menuView.setLclMenu( lclMenu, lclMenu.Items[menuIndex+1] );
|
||||
menuView.setPath( StrToNSString(path) );
|
||||
menuView.setFavoriteTags( uDarwinFinderModelUtil.favoriteTags );
|
||||
menuView.setFavoriteTags( favoriteTags );
|
||||
|
||||
cocoaItem:= NSMenuItem( lclMenu.Items[menuIndex].Handle );
|
||||
cocoaItem.setView( menuView );
|
||||
|
||||
menuView.release;
|
||||
Result:= True;
|
||||
end;
|
||||
|
||||
class procedure uDarwinFinderUtil.attachSearchForTagsMenu(const lclMenu: TMenu);
|
||||
procedure setColorImage( const lclMenuItem: TMenuItem );
|
||||
var
|
||||
cocoaItem: NSMenuItem;
|
||||
tag: TFinderTag;
|
||||
begin
|
||||
cocoaItem:= NSMenuItem( lclMenuItem.Handle );
|
||||
tag:= TFinderTags.getTagOfName( cocoaItem.title );
|
||||
if tag = nil then
|
||||
Exit;
|
||||
cocoaItem.setImage( _menuTagRoundImages[tag.colorIndex] );
|
||||
end;
|
||||
|
||||
var
|
||||
i: Integer;
|
||||
count: Integer;
|
||||
begin
|
||||
count:= lclMenu.Items.Count;
|
||||
for i:=0 to count-1 do begin
|
||||
setColorImage( lclMenu.Items[i] );
|
||||
end;
|
||||
end;
|
||||
|
||||
class procedure uDarwinFinderUtil.drawTagName( const tagName: NSString;
|
||||
|
|
@ -879,6 +961,58 @@ begin
|
|||
attributes.release;
|
||||
end;
|
||||
|
||||
class procedure uDarwinFinderUtil.initMenuRoundNSImages;
|
||||
var
|
||||
imageSize: NSSize;
|
||||
colors: TFinderTagNSColors;
|
||||
count: Integer;
|
||||
i: Integer;
|
||||
|
||||
procedure drawImageContent( const color: NSColor );
|
||||
var
|
||||
rect: NSRect;
|
||||
path: NSBezierPath;
|
||||
begin
|
||||
color.set_;
|
||||
rect.origin:= NSZeroPoint;
|
||||
rect.size:= imageSize;
|
||||
path:= NSBezierPath.bezierPathWithOvalInRect( rect );
|
||||
path.fill;
|
||||
end;
|
||||
|
||||
function createOneColorImage( const color: NSColor ): NSImage;
|
||||
var
|
||||
image: NSImage;
|
||||
imageRep: NSBitmapImageRep;
|
||||
context: NSGraphicsContext;
|
||||
begin
|
||||
imageRep:= NSBitmapImageRep.alloc.initWithBitmapDataPlanes_pixelsWide_pixelsHigh__colorSpaceName_bytesPerRow_bitsPerPixel(
|
||||
nil,
|
||||
FINDER_TAGS_MENU_ROUND_SIZE, FINDER_TAGS_MENU_ROUND_SIZE,
|
||||
8, 4,
|
||||
True, False,
|
||||
NSCalibratedRGBColorSpace,
|
||||
0, 0 );
|
||||
context:= NSGraphicsContext.graphicsContextWithBitmapImageRep( imageRep );
|
||||
NSGraphicsContext.classSaveGraphicsState;
|
||||
NSGraphicsContext.setCurrentContext( context );
|
||||
drawImageContent( color );
|
||||
image:= NSImage.alloc.initWithSize( imageSize );
|
||||
image.addRepresentation( imageRep );
|
||||
Result:= image;
|
||||
NSGraphicsContext.classRestoreGraphicsState;
|
||||
end;
|
||||
|
||||
begin
|
||||
imageSize:= NSMakeSize( FINDER_TAGS_MENU_ROUND_SIZE, FINDER_TAGS_MENU_ROUND_SIZE );
|
||||
colors:= uDarwinFinderModelUtil.rectFinderTagNSColors;
|
||||
count:= Length( colors );
|
||||
SetLength( _menuTagRoundImages, count );
|
||||
for i:= 0 to count-1 do begin
|
||||
_menuTagRoundImages[i]:= createOneColorImage( colors[i] );
|
||||
end;
|
||||
end;
|
||||
|
||||
{ TFinderFavoriteTagMenuItemControl }
|
||||
|
||||
procedure TFinderFavoriteTagMenuItem.setFinderTag(
|
||||
|
|
@ -1102,5 +1236,8 @@ begin
|
|||
_url.release;
|
||||
end;
|
||||
|
||||
initialization
|
||||
uDarwinFinderUtil.initMenuRoundNSImages;
|
||||
|
||||
end.
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ uses
|
|||
Classes, SysUtils, LCLType,
|
||||
sqldb, SQLite3Conn,
|
||||
uDebug,
|
||||
CocoaAll, CocoaConst, Cocoa_Extra;
|
||||
MacOSAll, CocoaAll, CocoaConst, Cocoa_Extra;
|
||||
|
||||
type
|
||||
|
||||
|
|
@ -19,14 +19,17 @@ type
|
|||
private
|
||||
_name: NSString;
|
||||
_colorIndex: NSInteger;
|
||||
_isShowingInSidebar: Boolean;
|
||||
_isUserDefined: Boolean;
|
||||
public
|
||||
class function tagWithParams( const name: NSString; const colorIndex: Integer;
|
||||
const isUserDefined: Boolean ): TFinderTag; message 'tagWithParams:name:colorIndex:';
|
||||
const isShowingInSidebar: Boolean; const isUserDefined: Boolean ): TFinderTag;
|
||||
message 'tagWithParams:name:colorIndex:isShowingInSidebar:';
|
||||
procedure dealloc; override;
|
||||
|
||||
function name: NSString; message 'tag_name';
|
||||
function colorIndex: NSInteger; message 'tag_colorIndex';
|
||||
function isShowingInSidebar: Boolean; message 'tag_isShowingInSidebar';
|
||||
function isUserDefined: Boolean; message 'tag_isUserDefined';
|
||||
function color: NSColor; message 'tag_color';
|
||||
end;
|
||||
|
|
@ -46,6 +49,8 @@ type
|
|||
|
||||
TFinderTagNSColors = Array of NSColor;
|
||||
|
||||
TMacOSSearchResultHandler = procedure ( const searchName: String; const files: TStringArray ) of object;
|
||||
|
||||
{ uDarwinFinderModelUtil }
|
||||
|
||||
uDarwinFinderModelUtil = class
|
||||
|
|
@ -60,13 +65,18 @@ type
|
|||
class function getTagsData_macOS11: NSDictionary;
|
||||
class function doGetAllTags( const tagDictionary: NSDictionary ): NSDictionary;
|
||||
class function getTagsDataFromDatabase: TBytes;
|
||||
class function getFavoriteTagNames: NSArray;
|
||||
class procedure initFinderTagNSColors;
|
||||
public
|
||||
class function getFavoriteTagNames: NSArray;
|
||||
class function getSidebarTagNames: NSArray;
|
||||
public
|
||||
class function getTagNamesOfFile( const url: NSURL ): NSArray;
|
||||
class procedure setTagNamesOfFile( const url: NSURL; const tagNames: NSArray );
|
||||
class procedure addTagForFile( const url: NSURL; const tagName: NSString );
|
||||
class procedure removeTagForFile( const url: NSURL; const tagName: NSString );
|
||||
public
|
||||
class procedure searchFilesForTagName( const tagName: NSString; const handler: TMacOSSearchResultHandler );
|
||||
class procedure searchFilesForTagNames( const tagNames: NSArray; const handler: TMacOSSearchResultHandler );
|
||||
public
|
||||
class property rectFinderTagNSColors: TFinderTagNSColors read _rectFinderTagNSColors;
|
||||
class property dotFinderTagNSColors: TFinderTagNSColors read _dotFinderTagNSColors;
|
||||
|
|
@ -76,19 +86,21 @@ type
|
|||
implementation
|
||||
|
||||
const
|
||||
NEW_FINDER_TAGS_DATABASE_PATH = '/Library/SyncedPreferences/com.apple.kvs/com.apple.KeyValueService-Production.sqlite';
|
||||
OLD_FINDER_TAGS_FILE_PATH = '/Library/SyncedPreferences/com.apple.finder.plist';
|
||||
FAVORITE_FINDER_TAGS_FILE_PATH = '/Library/Preferences/com.apple.finder.plist';
|
||||
FINDER_TAGS_DATABASE_PATH_14plus = '/Library/Daemon Containers/F6F9E4C1-EF5D-4BF3-BEAD-0D777574F0A0/Data/com.apple.kvs/com.apple.KeyValueService-Production.sqlite';
|
||||
FINDER_TAGS_DATABASE_PATH_12to13 = '/Library/SyncedPreferences/com.apple.kvs/com.apple.KeyValueService-Production.sqlite';
|
||||
FINDER_TAGS_FILE_PATH_11minus = '/Library/SyncedPreferences/com.apple.finder.plist';
|
||||
FAVORITE_FINDER_TAGS_FILE_PATH = '/Library/Preferences/com.apple.finder.plist';
|
||||
|
||||
{ TFinderTag }
|
||||
|
||||
class function TFinderTag.tagWithParams( const name: NSString; const colorIndex: Integer;
|
||||
const isUserDefined: Boolean): TFinderTag;
|
||||
const isShowingInSidebar: Boolean; const isUserDefined: Boolean ): TFinderTag;
|
||||
begin
|
||||
Result:= TFinderTag.new;
|
||||
Result._name:= name.retain;
|
||||
if (colorIndex>=0) and (colorIndex<length(uDarwinFinderModelUtil.rectFinderTagNSColors)) then
|
||||
Result._colorIndex:= colorIndex;
|
||||
Result._isShowingInSidebar:= isShowingInSidebar;
|
||||
Result._isUserDefined:= isUserDefined;
|
||||
Result.autorelease;
|
||||
end;
|
||||
|
|
@ -109,6 +121,11 @@ begin
|
|||
Result:= _colorIndex;
|
||||
end;
|
||||
|
||||
function TFinderTag.isShowingInSidebar: Boolean;
|
||||
begin
|
||||
Result:= _isShowingInSidebar;
|
||||
end;
|
||||
|
||||
function TFinderTag.isUserDefined: Boolean;
|
||||
begin
|
||||
Result:= _isUserDefined;
|
||||
|
|
@ -149,6 +166,63 @@ begin
|
|||
Result:= _tags.objectForKey( tagName );
|
||||
end;
|
||||
|
||||
{ TMacOSQueryHandler }
|
||||
|
||||
type
|
||||
TMacOSQueryHandler = objcclass( NSObject )
|
||||
private
|
||||
_queryName: NSString;
|
||||
_query: NSMetadataQuery;
|
||||
_handler: TMacOSSearchResultHandler;
|
||||
procedure initalGatherComplete( sender: id ); message 'initalGatherComplete:';
|
||||
public
|
||||
function initWithName( name: NSString ): id; message 'doublecmd_initWithName:';
|
||||
procedure dealloc; override;
|
||||
end;
|
||||
|
||||
procedure TMacOSQueryHandler.initalGatherComplete(sender: id);
|
||||
var
|
||||
item: NSMetadataItem;
|
||||
path: NSString;
|
||||
files: TStringArray;
|
||||
i: Integer;
|
||||
count: Integer;
|
||||
begin
|
||||
_query.stopQuery;
|
||||
NSNotificationCenter.defaultCenter.removeObserver_name_object(
|
||||
self,
|
||||
NSMetadataQueryDidFinishGatheringNotification,
|
||||
_query );
|
||||
|
||||
files:= nil;
|
||||
count:= _query.resultCount;
|
||||
if count > 0 then begin
|
||||
SetLength( files, count );
|
||||
for i:=0 to count-1 do begin
|
||||
item:= NSMetadataItem( _query.results.objectAtIndex(i) );
|
||||
path:= item.valueForAttribute( NSString(kMDItemPath) );
|
||||
files[i]:= path.UTF8String;
|
||||
end;
|
||||
end;
|
||||
|
||||
_handler( _queryName.UTF8String, files );
|
||||
|
||||
self.release;
|
||||
end;
|
||||
|
||||
function TMacOSQueryHandler.initWithName(name: NSString): id;
|
||||
begin
|
||||
_queryName:= name;
|
||||
_queryName.retain;
|
||||
Result:= self;
|
||||
end;
|
||||
|
||||
procedure TMacOSQueryHandler.dealloc;
|
||||
begin
|
||||
_queryName.release;
|
||||
_query.release;
|
||||
end;
|
||||
|
||||
{ uDarwinFinderModelUtil }
|
||||
|
||||
class function uDarwinFinderModelUtil.getTagNamesOfFile(const url: NSURL
|
||||
|
|
@ -156,7 +230,6 @@ class function uDarwinFinderModelUtil.getTagNamesOfFile(const url: NSURL
|
|||
var
|
||||
ret: Boolean;
|
||||
tagNames: NSArray;
|
||||
tagColor: NSColor;
|
||||
begin
|
||||
Result:= nil;
|
||||
ret:= url.getResourceValue_forKey_error( @tagNames, NSURLTagNamesKey, nil );
|
||||
|
|
@ -194,6 +267,72 @@ begin
|
|||
uDarwinFinderModelUtil.setTagNamesOfFile( url, newTagNames );
|
||||
end;
|
||||
|
||||
class procedure uDarwinFinderModelUtil.searchFilesForTagNames(
|
||||
const tagNames: NSArray; const handler: TMacOSSearchResultHandler);
|
||||
|
||||
function toString: NSString;
|
||||
var
|
||||
tagName: NSString;
|
||||
name: NSMutableString;
|
||||
begin
|
||||
name:= NSMutableString.new;
|
||||
for tagName in tagNames do begin
|
||||
name.appendString( tagName );
|
||||
name.appendString( NSSTR('|') );
|
||||
end;
|
||||
Result:= name.substringToIndex( name.length-1 );
|
||||
name.release;
|
||||
end;
|
||||
|
||||
function formatString: NSString;
|
||||
var
|
||||
format: NSMutableString;
|
||||
count: Integer;
|
||||
i: Integer;
|
||||
begin
|
||||
format:= NSMutableString.new;
|
||||
count:= tagNames.count;
|
||||
for i:=1 to count do begin
|
||||
format.appendString( NSSTR('(kMDItemUserTags == %@) && ') );
|
||||
end;
|
||||
Result:= format.substringToIndex( format.length-4 );
|
||||
format.release;
|
||||
end;
|
||||
|
||||
var
|
||||
queryHandler: TMacOSQueryHandler;
|
||||
query: NSMetadataQuery;
|
||||
predicate: NSPredicate;
|
||||
begin
|
||||
if tagNames.count = 0 then
|
||||
Exit;
|
||||
|
||||
// release in initalGatherComplete()
|
||||
query:= NSMetadataQuery.new;
|
||||
// release in initalGatherComplete()
|
||||
queryHandler:= TMacOSQueryHandler.alloc.initWithName( toString() );
|
||||
queryHandler._query:= query;
|
||||
queryHandler._handler:= handler;
|
||||
NSNotificationCenter.defaultCenter.addObserver_selector_name_object(
|
||||
queryHandler,
|
||||
objcselector('initalGatherComplete:'),
|
||||
NSMetadataQueryDidFinishGatheringNotification,
|
||||
query );
|
||||
|
||||
predicate:= NSPredicate.predicateWithFormat_argumentArray( formatString(), tagNames );
|
||||
query.setPredicate( predicate );
|
||||
query.startQuery;
|
||||
end;
|
||||
|
||||
class procedure uDarwinFinderModelUtil.searchFilesForTagName(
|
||||
const tagName: NSString; const handler: TMacOSSearchResultHandler);
|
||||
var
|
||||
tagNames: NSArray;
|
||||
begin
|
||||
tagNames:= NSArray.arrayWithObject( tagName );
|
||||
uDarwinFinderModelUtil.searchFilesForTagNames( tagNames, handler );
|
||||
end;
|
||||
|
||||
class function uDarwinFinderModelUtil.getAllTags: NSDictionary;
|
||||
var
|
||||
tagDictionary: NSDictionary;
|
||||
|
|
@ -236,6 +375,20 @@ begin
|
|||
Result:= plistProperties.valueForKeyPath( NSSTR('FavoriteTagNames') );
|
||||
end;
|
||||
|
||||
class function uDarwinFinderModelUtil.getSidebarTagNames: NSArray;
|
||||
var
|
||||
tagNames: NSMutableArray;
|
||||
tag: TFinderTag;
|
||||
begin
|
||||
TFinderTags.update;
|
||||
tagNames:= NSMutableArray.arrayWithCapacity( 16 );
|
||||
for tag in TFinderTags.tags.allValues do begin
|
||||
if tag.isShowingInSidebar then
|
||||
tagNames.addObject( tag.name );
|
||||
end;
|
||||
Result:= tagNames;
|
||||
end;
|
||||
|
||||
class function uDarwinFinderModelUtil.getFavoriteTags: NSArray;
|
||||
var
|
||||
tagNames: NSArray;
|
||||
|
|
@ -249,6 +402,8 @@ begin
|
|||
if tagName.length = 0 then
|
||||
continue;
|
||||
tag:= TFinderTags.getTagOfName( tagName );
|
||||
if tag = nil then
|
||||
continue;
|
||||
tags.addObject( tag );
|
||||
end;
|
||||
|
||||
|
|
@ -285,7 +440,7 @@ var
|
|||
plistProperties: id;
|
||||
begin
|
||||
Result:= nil;
|
||||
path:= NSHomeDirectory.stringByAppendingString( NSSTR(OLD_FINDER_TAGS_FILE_PATH) );
|
||||
path:= NSHomeDirectory.stringByAppendingString( NSSTR(FINDER_TAGS_FILE_PATH_11minus) );
|
||||
|
||||
plistData:= NSData.dataWithContentsOfFile( path );
|
||||
if plistData = nil then
|
||||
|
|
@ -311,7 +466,11 @@ begin
|
|||
connection:= TSQLite3Connection.Create( nil );
|
||||
transaction:= TSQLTransaction.Create( connection );
|
||||
connection.Transaction:= transaction;
|
||||
databasePath:= NSHomeDirectory.UTF8String + NEW_FINDER_TAGS_DATABASE_PATH;
|
||||
if NSAppKitVersionNumber >= NSAppKitVersionNumber14_0 then
|
||||
databasePath:= FINDER_TAGS_DATABASE_PATH_14plus
|
||||
else
|
||||
databasePath:= FINDER_TAGS_DATABASE_PATH_12to13;
|
||||
databasePath:= NSHomeDirectory.UTF8String + databasePath;
|
||||
connection.DatabaseName:= databasePath;
|
||||
|
||||
query:= TSQLQuery.Create( nil );
|
||||
|
|
@ -339,7 +498,9 @@ var
|
|||
plistTagItem: NSDictionary;
|
||||
plistTagName: NSString;
|
||||
plistTagColorNumber: NSNumber;
|
||||
plistShowingInSidebar: NSNumber;
|
||||
plistTagUserDefined: NSNumber;
|
||||
showingInSidebar: Boolean;
|
||||
|
||||
allFinderTagDict: NSMutableDictionary;
|
||||
tag: TFinderTag;
|
||||
|
|
@ -356,11 +517,19 @@ begin
|
|||
for plistTagItem in plistTagArray do begin
|
||||
plistTagName:= plistTagItem.valueForKey( NSSTR('n') );
|
||||
plistTagColorNumber:= plistTagItem.valueForKey( NSSTR('l') );
|
||||
plistShowingInSidebar:= plistTagItem.valueForKey( NSSTR('v') );
|
||||
plistTagUserDefined:= plistTagItem.valueForKey( NSSTR('p') );
|
||||
|
||||
showingInSidebar:= True;
|
||||
if plistShowingInSidebar <> nil then
|
||||
showingInSidebar:= plistShowingInSidebar.boolValue;
|
||||
|
||||
tag:= TFinderTag.tagWithParams(
|
||||
plistTagName,
|
||||
plistTagColorNumber.integerValue,
|
||||
showingInSidebar,
|
||||
plistTagUserDefined.boolValue );
|
||||
|
||||
allFinderTagDict.setValue_forKey( tag, plistTagName );
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
-------------------------------------------------------------------------
|
||||
This unit contains specific DARWIN functions.
|
||||
|
||||
Copyright (C) 2016-2023 Alexander Koblov (alexx2000@mail.ru)
|
||||
Copyright (C) 2016-2024 Alexander Koblov (alexx2000@mail.ru)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
|
|
@ -28,17 +28,22 @@
|
|||
unit uMyDarwin;
|
||||
|
||||
{$mode delphi}
|
||||
{$modeswitch objectivec1}
|
||||
{$modeswitch objectivec2}
|
||||
{$linkframework DiskArbitration}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, UnixType,
|
||||
InterfaceBase, Menus, Controls, Forms,
|
||||
uFileProperty, uFileSourceProperty, uDisplayFile, uFileView, uColumnsFileView,
|
||||
uLng,
|
||||
Cocoa_Extra, MacOSAll, CocoaAll, QuickLookUI,
|
||||
CocoaUtils, CocoaInt, CocoaPrivate, CocoaConst, CocoaMenus,
|
||||
InterfaceBase, Menus, Controls, Forms,
|
||||
uDarwinFSWatch, uDarwinFinder;
|
||||
uDarwinFSWatch, uDarwinFinder, uDarwinFinderModel;
|
||||
|
||||
const
|
||||
FINDER_FAVORITE_TAGS_MENU_ITEM_CAPTION = #$EF#$BF#$BC'FinderFavoriteTags';
|
||||
|
||||
// Darwin Util Function
|
||||
function StringToNSString(const S: String): NSString;
|
||||
|
|
@ -64,6 +69,8 @@ function MountNetworkDrive(const serverAddress: String): Boolean;
|
|||
|
||||
function GetVolumeName(const Device: String): String;
|
||||
|
||||
procedure openSystemSecurityPreferences_PrivacyAllFiles;
|
||||
|
||||
function unmountAndEject(const path: String): Boolean;
|
||||
|
||||
procedure openNewInstance();
|
||||
|
|
@ -142,15 +149,22 @@ public
|
|||
procedure openWithNewTab( pboard:NSPasteboard; userData:NSString; error:NSStringPtr ); message 'openWithNewTab:userData:error:';
|
||||
end;
|
||||
|
||||
type TMacosServiceMenuHelper = class
|
||||
private
|
||||
oldMenuPopupHandler: TNotifyEvent;
|
||||
serviceSubMenuCaption: String;
|
||||
tagFilePath: String;
|
||||
procedure attachServicesMenu( Sender:TObject);
|
||||
public
|
||||
procedure PopUp( const menu: TPopupMenu; const caption: String; const path: String );
|
||||
end;
|
||||
type
|
||||
|
||||
{ TMacosServiceMenuHelper }
|
||||
|
||||
TMacosServiceMenuHelper = class
|
||||
private
|
||||
oldMenuPopupHandler: TNotifyEvent;
|
||||
serviceSubMenuCaption: String;
|
||||
tagFilePath: String;
|
||||
procedure attachSystemMenu( Sender: TObject );
|
||||
procedure attachServicesMenu( Sender: TObject );
|
||||
procedure attachFinderTagsMenu( Sender: TObject );
|
||||
procedure privilegeAction( Sender: TObject );
|
||||
public
|
||||
procedure PopUp( const menu: TPopupMenu; const caption: String; const path: String );
|
||||
end;
|
||||
|
||||
procedure InitNSServiceProvider(
|
||||
serveCallback: TNSServiceProviderCallBack;
|
||||
|
|
@ -160,7 +174,8 @@ procedure InitNSServiceProvider(
|
|||
procedure performMacOSService( serviceName: String );
|
||||
|
||||
procedure showQuickLookPanel;
|
||||
procedure showEditFinderTagsPanel( const Sender: id; control: TWinControl );
|
||||
procedure showEditFinderTagsPanel( const Sender: id; const control: TWinControl );
|
||||
function getMacOSFinderTagFileProperty( const path: String ): TFileFinderTagProperty;
|
||||
|
||||
// MacOS Sharing
|
||||
procedure showMacOSSharingServiceMenu;
|
||||
|
|
@ -177,6 +192,20 @@ var
|
|||
MacosServiceMenuHelper: TMacosServiceMenuHelper;
|
||||
NSThemeChangedHandler: TNSThemeChangedHandler;
|
||||
|
||||
type
|
||||
|
||||
{ TDarwinFileViewDrawHelper }
|
||||
|
||||
TDarwinFileViewDrawHelper = class
|
||||
procedure onDrawCell(Sender: TFileView; aCol, aRow: Integer;
|
||||
aRect: TRect; focused: Boolean; aFile: TDisplayFile);
|
||||
procedure drawTagsAsDecoration(
|
||||
const colors: TFileFinderTagPrimaryColors; const drawRect: TRect; const focused: Boolean );
|
||||
end;
|
||||
|
||||
var
|
||||
DarwinFileViewDrawHelper: TDarwinFileViewDrawHelper;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
|
|
@ -256,14 +285,18 @@ begin
|
|||
NSAppearance.setCurrentAppearance( appearance );
|
||||
end;
|
||||
|
||||
procedure TMacosServiceMenuHelper.attachSystemMenu(Sender: TObject);
|
||||
begin
|
||||
self.attachServicesMenu( Sender );
|
||||
self.attachFinderTagsMenu( Sender );
|
||||
end;
|
||||
|
||||
procedure TMacosServiceMenuHelper.attachServicesMenu( Sender: TObject );
|
||||
var
|
||||
menu: TPopupMenu;
|
||||
menu: TPopupMenu Absolute Sender;
|
||||
servicesItem: TMenuItem;
|
||||
subMenu: TCocoaMenu;
|
||||
begin
|
||||
menu:= TPopupMenu(Sender);
|
||||
|
||||
// call the previous OnMenuPopupHandler and restore it
|
||||
if Assigned(oldMenuPopupHandler) then oldMenuPopupHandler( Sender );
|
||||
OnMenuPopupHandler:= oldMenuPopupHandler;
|
||||
|
|
@ -277,8 +310,31 @@ begin
|
|||
TCocoaMenuItem(servicesItem.Handle).setSubmenu( subMenu );
|
||||
NSApp.setServicesMenu( NSMenu(servicesItem.Handle) );
|
||||
end;
|
||||
end;
|
||||
|
||||
uDarwinFinderUtil.attachFinderTagsMenu( self.tagFilePath, menu );
|
||||
procedure TMacosServiceMenuHelper.attachFinderTagsMenu( Sender: TObject );
|
||||
var
|
||||
menu: TPopupMenu Absolute Sender;
|
||||
menuItem: TMenuItem;
|
||||
menuIndex: Integer;
|
||||
success: Boolean;
|
||||
begin
|
||||
menuIndex:= menu.Items.IndexOfCaption( FINDER_FAVORITE_TAGS_MENU_ITEM_CAPTION );
|
||||
if menuIndex < 0 then
|
||||
Exit;
|
||||
|
||||
success:= uDarwinFinderUtil.attachFinderTagsMenu( self.tagFilePath, menu, menuIndex );
|
||||
if success then
|
||||
Exit;
|
||||
|
||||
menuItem:= menu.Items[menuIndex];
|
||||
menuItem.Caption:= rsMenuMacOSGrantPermissionToSupportFinderTags;
|
||||
menuItem.OnClick:= self.privilegeAction;
|
||||
end;
|
||||
|
||||
procedure TMacosServiceMenuHelper.privilegeAction(Sender: TObject);
|
||||
begin
|
||||
openSystemSecurityPreferences_PrivacyAllFiles;
|
||||
end;
|
||||
|
||||
procedure TMacosServiceMenuHelper.PopUp( const menu: TPopupMenu;
|
||||
|
|
@ -287,12 +343,61 @@ begin
|
|||
// because the menu item handle will be destroyed in TPopupMenu.PopUp()
|
||||
// we can only call NSApplication.setServicesMenu() in OnMenuPopupHandler()
|
||||
oldMenuPopupHandler:= OnMenuPopupHandler;
|
||||
OnMenuPopupHandler:= attachServicesMenu;
|
||||
OnMenuPopupHandler:= attachSystemMenu;
|
||||
serviceSubMenuCaption:= caption;
|
||||
tagFilePath:= path;
|
||||
menu.PopUp();
|
||||
end;
|
||||
|
||||
{ TDarwinFileViewDrawHelper }
|
||||
|
||||
procedure TDarwinFileViewDrawHelper.onDrawCell(Sender: TFileView; aCol, aRow: Integer;
|
||||
aRect: TRect; focused: Boolean; aFile: TDisplayFile);
|
||||
var
|
||||
tagProperty: TFileFinderTagProperty;
|
||||
begin
|
||||
if (Sender is TColumnsFileView) and (aCol<>0) then
|
||||
Exit;
|
||||
|
||||
tagProperty:= aFile.FSFile.FinderTagProperty;
|
||||
if tagProperty = nil then
|
||||
Exit;
|
||||
|
||||
drawTagsAsDecoration( tagProperty.Colors, aRect, focused );
|
||||
end;
|
||||
|
||||
procedure TDarwinFileViewDrawHelper.drawTagsAsDecoration(
|
||||
const colors: TFileFinderTagPrimaryColors; const drawRect: TRect;
|
||||
const focused: Boolean);
|
||||
var
|
||||
i: Integer;
|
||||
colorIndex: Integer;
|
||||
color: NSColor;
|
||||
tagRect: NSRect;
|
||||
path: NSBezierPath;
|
||||
begin
|
||||
tagRect.size.width:= 11;
|
||||
tagRect.size.height:= 11;
|
||||
tagRect.origin.x:= drawRect.Right - 17;
|
||||
tagRect.origin.y:= drawRect.Top + (drawRect.Height-tagRect.size.height)/2;
|
||||
|
||||
for i:=0 to 2 do begin
|
||||
colorIndex:= colors.indexes[i];
|
||||
if colorIndex < 0 then
|
||||
break;
|
||||
color:= uDarwinFinderModelUtil.rectFinderTagNSColors[colorIndex];
|
||||
color.set_;
|
||||
path:= NSBezierPath.bezierPathWithOvalInRect( tagRect );
|
||||
path.fill;
|
||||
if focused then
|
||||
NSColor.alternateSelectedControlTextColor.set_
|
||||
else
|
||||
NSColor.textBackgroundColor.set_;
|
||||
path.stroke;
|
||||
tagRect.origin.x:= tagRect.origin.x - 5;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure InitNSServiceProvider(
|
||||
serveCallback: TNSServiceProviderCallBack;
|
||||
|
|
@ -612,6 +717,16 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure openSystemSecurityPreferences_PrivacyAllFiles;
|
||||
const
|
||||
Privacy_AllFiles = 'x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles';
|
||||
var
|
||||
url: NSURL;
|
||||
begin
|
||||
url:= NSURL.URLWithString( NSSTR(Privacy_AllFiles) );
|
||||
NSWorkspace.sharedWorkspace.openURL( url );
|
||||
end;
|
||||
|
||||
function unmountAndEject(const path: String): Boolean;
|
||||
begin
|
||||
Result:= NSWorkspace.sharedWorkspace.unmountAndEjectDeviceAtPath( StringToNSString(path) );
|
||||
|
|
@ -664,6 +779,7 @@ begin
|
|||
end;
|
||||
HasMountURL:= Assigned(NetFSMountURLSync) or Assigned(FSMountServerVolumeSync);
|
||||
MacosServiceMenuHelper:= TMacosServiceMenuHelper.Create;
|
||||
DarwinFileViewDrawHelper:= TDarwinFileViewDrawHelper.Create;
|
||||
end;
|
||||
|
||||
procedure Finalize;
|
||||
|
|
@ -730,11 +846,40 @@ begin
|
|||
mate.release;
|
||||
end;
|
||||
|
||||
procedure showEditFinderTagsPanel( const Sender: id; control: TWinControl );
|
||||
|
||||
type
|
||||
|
||||
{ TFinderTagsEditorPanelHandler }
|
||||
|
||||
TFinderTagsEditorPanelHandler = class
|
||||
private
|
||||
_path: String;
|
||||
public
|
||||
constructor Create( const path: String );
|
||||
procedure onClose( const cancel: Boolean; const tagNames: NSArray );
|
||||
end;
|
||||
|
||||
constructor TFinderTagsEditorPanelHandler.Create( const path: String );
|
||||
begin
|
||||
_path:= path;
|
||||
end;
|
||||
|
||||
procedure TFinderTagsEditorPanelHandler.onClose( const cancel: Boolean; const tagNames: NSArray );
|
||||
var
|
||||
url: NSURL;
|
||||
begin
|
||||
if cancel then
|
||||
Exit;
|
||||
url:= NSURL.fileURLWithPath( StrToNSString(_path) );
|
||||
uDarwinFinderModelUtil.setTagNamesOfFile( url, tagNames );
|
||||
end;
|
||||
|
||||
procedure showEditFinderTagsPanel( const Sender: id; const control: TWinControl );
|
||||
var
|
||||
tagItem: NSToolBarItem absolute Sender;
|
||||
filenames: TStringArray;
|
||||
view: NSView;
|
||||
handler: TFinderTagsEditorPanelHandler;
|
||||
begin
|
||||
filenames:= TDCCocoaApplication(NSApp).serviceMenuGetFilenames;
|
||||
if length(filenames) = 0 then
|
||||
|
|
@ -746,7 +891,48 @@ begin
|
|||
if (view=nil) or (view.window=nil) then
|
||||
view:= NSView( control.Handle );
|
||||
|
||||
uDarwinFinderUtil.popoverFileTags( filenames[0], view , NSMaxYEdge );
|
||||
handler:= TFinderTagsEditorPanelHandler.Create( filenames[0] );
|
||||
uDarwinFinderUtil.popoverFileTagsEditor( filenames[0], handler.onClose, view , NSMaxYEdge );
|
||||
end;
|
||||
|
||||
function getMacOSFinderTagFileProperty( const path: String ): TFileFinderTagProperty;
|
||||
var
|
||||
url: NSURL;
|
||||
tagNames: NSArray;
|
||||
tagName: NSString;
|
||||
|
||||
function toPrimaryColors: TFileFinderTagPrimaryColors;
|
||||
var
|
||||
tag: TFinderTag;
|
||||
iSource: NSUInteger;
|
||||
iDest: Integer;
|
||||
colorIndex: Integer;
|
||||
begin
|
||||
iSource:= 0;
|
||||
if tagNames.count > 3 then
|
||||
iSource:= tagNames.count - 3;
|
||||
for iDest:=0 to 2 do begin
|
||||
colorIndex:= -1;
|
||||
if iSource < tagNames.count then begin
|
||||
tagName:= NSString( tagNames.objectAtIndex(iSource) );
|
||||
tag:= TFinderTags.getTagOfName( tagName );
|
||||
colorIndex:= tag.colorIndex;
|
||||
end;
|
||||
Result.indexes[iDest]:= colorIndex;
|
||||
inc( iSource );
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
Result:= nil;
|
||||
url:= NSURL.fileURLWithPath( StrToNSString(path) );
|
||||
tagNames:= uDarwinFinderModelUtil.getTagNamesOfFile( url );
|
||||
|
||||
if tagNames = nil then
|
||||
Exit;
|
||||
|
||||
Result:= TFileFinderTagProperty.Create;
|
||||
Result.Colors:= toPrimaryColors;
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
|
|
|||
78
src/platform/unix/darwin/usearchresultutil.pas
Normal file
78
src/platform/unix/darwin/usearchresultutil.pas
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
unit uSearchResultUtil;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Classes,
|
||||
uSearchResultFileSource, uFile, uFileSystemFileSource, uFileSource,
|
||||
fMain, uFileViewNotebook, ulng;
|
||||
|
||||
type
|
||||
TSearchResultUtil = class
|
||||
class procedure addResultPage( const searchName: String; const files: TStringArray);
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
type
|
||||
|
||||
{ TFinderTagSearchResultFileSource }
|
||||
|
||||
TFinderTagSearchResultFileSource = class( TSearchResultFileSource )
|
||||
private
|
||||
_tagName: String;
|
||||
public
|
||||
constructor Create( tagName: String );
|
||||
function GetRootDir(sPath: String): String; override;
|
||||
end;
|
||||
|
||||
{ TFinderTagSearchResultFileSource }
|
||||
|
||||
constructor TFinderTagSearchResultFileSource.Create(tagName: String);
|
||||
begin
|
||||
Inherited Create;
|
||||
_tagName:= tagName;
|
||||
end;
|
||||
|
||||
function TFinderTagSearchResultFileSource.GetRootDir(sPath: String): String;
|
||||
begin
|
||||
Result:= PathDelim + PathDelim + PathDelim + rsSearchResult + ': ' + _tagName + PathDelim;
|
||||
end;
|
||||
|
||||
class procedure TSearchResultUtil.addResultPage( const searchName: String; const files: TStringArray);
|
||||
var
|
||||
i: integer;
|
||||
count: Integer;
|
||||
sFileName: string;
|
||||
SearchResultFS: ISearchResultFileSource;
|
||||
FileList: TFileTree;
|
||||
aFile: TFile;
|
||||
Notebook: TFileViewNotebook;
|
||||
NewPage: TFileViewPage;
|
||||
begin
|
||||
count:= Length(files);
|
||||
FileList := TFileTree.Create;
|
||||
for i:=0 to count-1 do begin
|
||||
sFileName := files[i];
|
||||
aFile := TFileSystemFileSource.CreateFileFromFile(sFileName);
|
||||
FileList.AddSubNode(aFile);
|
||||
end;
|
||||
|
||||
// Add new tab for search results.
|
||||
Notebook := frmMain.ActiveNotebook;
|
||||
NewPage := Notebook.NewPage(Notebook.ActiveView);
|
||||
|
||||
// Create search result file source.
|
||||
// Currently only searching FileSystem is supported.
|
||||
SearchResultFS := TFinderTagSearchResultFileSource.Create( searchName );
|
||||
SearchResultFS.AddList(FileList, Notebook.ActiveView.FileSource);
|
||||
|
||||
NewPage.FileView.AddFileSource(SearchResultFS, SearchResultFS.GetRootDir);
|
||||
NewPage.FileView.FlatView := True;
|
||||
NewPage.MakeActive;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
|
@ -78,7 +78,7 @@ uses
|
|||
uOSUtils, uFileProcs, uShellExecute, uLng, uPixMapManager, uMyUnix, uOSForms,
|
||||
fMain, fFileProperties, DCOSUtils, DCStrUtils, uExts, uArchiveFileSourceUtil, uSysFolders
|
||||
{$IF DEFINED(DARWIN)}
|
||||
, LCLStrConsts, MacOSAll, CocoaAll, uMyDarwin, uDarwinFinder
|
||||
, LCLStrConsts, MacOSAll, CocoaAll, uMyDarwin
|
||||
{$ELSEIF NOT DEFINED(HAIKU)}
|
||||
, uKeyFile, uMimeActions
|
||||
{$IF DEFINED(LINUX)}
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ uses
|
|||
, uDCReadRSVG, uMagickWand, uGio, uGioFileSource, uVfsModule, uVideoThumb
|
||||
, uDCReadWebP, uFolderThumb, uAudioThumb, uDefaultTerminal, uDCReadHEIF
|
||||
, uTrashFileSource, uFileManager, uFileSystemFileSource, fOpenWith
|
||||
, uFileSourceUtil
|
||||
, uFileSourceUtil, uNetworkFileSource
|
||||
{$ENDIF}
|
||||
{$IF DEFINED(LINUX)}
|
||||
, uFlatpak
|
||||
|
|
@ -692,6 +692,8 @@ begin
|
|||
begin
|
||||
if TGioFileSource.IsSupportedPath('trash://') then
|
||||
RegisterVirtualFileSource(rsVfsRecycleBin, TTrashFileSource, True);
|
||||
if TGioFileSource.IsSupportedPath('network://') then
|
||||
RegisterVirtualFileSource(rsVfsNetwork, TNetworkFileSource, True);
|
||||
RegisterVirtualFileSource('GVfs', TGioFileSource, False);
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
|
|
|||
|
|
@ -688,6 +688,8 @@ begin
|
|||
aFile := FFiles[0];
|
||||
if FBackground then // Add "Background" context menu specific items
|
||||
begin
|
||||
SetMenuDefaultItem(FShellMenu, UINT(-1), 0);
|
||||
|
||||
InnerExtActionList := TExtActionList.Create;
|
||||
|
||||
// Add commands to root of context menu
|
||||
|
|
|
|||
|
|
@ -155,7 +155,9 @@ begin
|
|||
P := PByte(@AData);
|
||||
Len := ALength;
|
||||
repeat
|
||||
C := FConnection.Write(P^,len);
|
||||
repeat
|
||||
C := FConnection.Write(P^,len);
|
||||
until (C <> -1) or (FConnection.LastError <> ESysEAGAIN);
|
||||
if (C < 0) then
|
||||
raise EInOutError.Create(SysErrorMessage(FConnection.LastError));
|
||||
if (C > 0) then
|
||||
|
|
@ -175,7 +177,9 @@ begin
|
|||
Len := ALength;
|
||||
P:= PByte(@AData);
|
||||
repeat
|
||||
C:= FConnection.Read(P^, Len);
|
||||
repeat
|
||||
C:= FConnection.Read(P^, Len);
|
||||
until (C <> -1) or (FConnection.LastError <> ESysEAGAIN);
|
||||
if (C <= 0) then
|
||||
raise EInOutError.Create(SysErrorMessage(FConnection.LastError));
|
||||
if (C > 0) then
|
||||
|
|
|
|||
|
|
@ -135,14 +135,14 @@ function SendMessage(__fd: cInt; __message: pmsghdr; __flags: cInt): ssize_t;
|
|||
begin
|
||||
repeat
|
||||
Result:= sendmsg(__fd, __message, __flags);
|
||||
until (Result <> -1) or (fpgetCerrno <> ESysEINTR);
|
||||
until not ((Result = -1) and ((Cerrno = ESysEINTR) or (Cerrno = ESysEAGAIN)));
|
||||
end;
|
||||
|
||||
function RecvMessage(__fd: cInt; __message: pmsghdr; __flags: cInt): ssize_t;
|
||||
begin
|
||||
repeat
|
||||
Result:= recvmsg(__fd, __message, __flags);
|
||||
until (Result <> -1) or (fpgetCerrno <> ESysEINTR);
|
||||
until not ((Result = -1) and ((Cerrno = ESysEINTR) or (Cerrno = ESysEAGAIN)));
|
||||
end;
|
||||
|
||||
procedure SetSocketClientProcessId(fd: cint);
|
||||
|
|
@ -339,9 +339,12 @@ begin
|
|||
DCDebug('VerifyChild');
|
||||
ProcessId:= GetSocketClientProcessId(Handle);
|
||||
DCDebug(['Credentials from socket: pid=', ProcessId]);
|
||||
{$IF DEFINED(DARWIN)}
|
||||
Result:= (GetProcessFileName(ProcessId) = GetProcessFileName(GetProcessId));
|
||||
{$ELSE}
|
||||
Result:= CheckParent(ProcessId, GetProcessId);{ and
|
||||
(GetProcessFileName(ProcessId) = GetProcessFileName(GetProcessId));}
|
||||
|
||||
{$ENDIF}
|
||||
DCDebug(['VerifyChild: ', Result]);
|
||||
end;
|
||||
|
||||
|
|
@ -352,8 +355,13 @@ begin
|
|||
DCDebug('VerifyParent');
|
||||
ProcessId:= GetSocketClientProcessId(Handle);
|
||||
DCDebug(['Credentials from socket: pid=', ProcessId]);
|
||||
{$IF DEFINED(DARWIN)}
|
||||
Result:= (StrToInt(ParamStr(2)) = ProcessId) and
|
||||
(GetProcessFileName(ProcessId) = GetProcessFileName(GetProcessId));
|
||||
{$ELSE}
|
||||
Result:= CheckParent(FpGetppid, ProcessId) and
|
||||
(GetProcessFileName(ProcessId) = GetProcessFileName(GetProcessId));
|
||||
{$ENDIF}
|
||||
DCDebug(['VerifyParent: ', Result]);
|
||||
end;
|
||||
|
||||
|
|
|
|||
|
|
@ -111,7 +111,10 @@ function GetProcessFileName(ProcessId: pid_t): String;
|
|||
begin
|
||||
SetLength(Result, MAX_PATH + 1);
|
||||
if proc_pidinfo(ProcessId, PROC_PIDPATHINFO, 0, Pointer(Result), MAX_PATH) < 0 then
|
||||
SetLength(Result, 0);
|
||||
SetLength(Result, 0)
|
||||
else begin
|
||||
Result:= PAnsiChar(Result);
|
||||
end;
|
||||
end;
|
||||
|
||||
{$ELSEIF DEFINED(FREEBSD)}
|
||||
|
|
|
|||
|
|
@ -317,8 +317,10 @@ end;
|
|||
{$ENDIF}
|
||||
|
||||
initialization
|
||||
{$IF DEFINED(DARWIN) OR DEFINED(HAIKU)}
|
||||
{$IF DEFINED(HAIKU)}
|
||||
FAdministratorPrivileges:= True;
|
||||
{$ELSEIF DEFINED(DARWIN)}
|
||||
FAdministratorPrivileges:= (fpGetUID = 0);
|
||||
{$ELSEIF DEFINED(UNIX)}
|
||||
{$IFDEF LINUX}
|
||||
if FindExecutable('pkexec', SuperExe) then
|
||||
|
|
|
|||
102
src/ufile.pas
102
src/ufile.pas
|
|
@ -89,6 +89,10 @@ type
|
|||
procedure SetTypeProperty(NewValue: TFileTypeProperty);
|
||||
function GetCommentProperty: TFileCommentProperty;
|
||||
procedure SetCommentProperty(NewValue: TFileCommentProperty);
|
||||
{$IFDEF DARWIN}
|
||||
function GetFinderTagProperty: TFileFinderTagProperty;
|
||||
procedure SetFinderTagProperty(NewValue: TFileFinderTagProperty);
|
||||
{$ENDIF}
|
||||
public
|
||||
constructor Create(const APath: String);
|
||||
constructor CreateForCloning;
|
||||
|
|
@ -162,6 +166,9 @@ type
|
|||
property OwnerProperty: TFileOwnerProperty read GetOwnerProperty write SetOwnerProperty;
|
||||
property TypeProperty: TFileTypeProperty read GetTypeProperty write SetTypeProperty;
|
||||
property CommentProperty: TFileCommentProperty read GetCommentProperty write SetCommentProperty;
|
||||
{$IFDEF DARWIN}
|
||||
property FinderTagProperty: TFileFinderTagProperty read GetFinderTagProperty write SetFinderTagProperty;
|
||||
{$ENDIF}
|
||||
|
||||
{ Accessors to each property's value. }
|
||||
|
||||
|
|
@ -346,6 +353,7 @@ begin
|
|||
begin
|
||||
if Assigned(Self.FProperties[PropertyType]) then
|
||||
begin
|
||||
AFile.FProperties[PropertyType].Free;
|
||||
AFile.FProperties[PropertyType] := Self.FProperties[PropertyType].Clone;
|
||||
end;
|
||||
end;
|
||||
|
|
@ -355,6 +363,7 @@ begin
|
|||
begin
|
||||
if Assigned(Self.FVariantProperties[AIndex]) then
|
||||
begin
|
||||
AFile.FVariantProperties[AIndex].Free;
|
||||
AFile.FVariantProperties[AIndex] := Self.FVariantProperties[AIndex].Clone;
|
||||
end;
|
||||
end;
|
||||
|
|
@ -488,11 +497,17 @@ var
|
|||
AIndex: Integer;
|
||||
begin
|
||||
if PropType < fpInvalid then
|
||||
begin
|
||||
FProperties[PropType].Free;
|
||||
FProperties[PropType] := NewValue
|
||||
end
|
||||
else begin
|
||||
AIndex := Ord(PropType) - Ord(fpVariant);
|
||||
if AIndex > High(FVariantProperties) then
|
||||
SetLength(FVariantProperties, AIndex + 4);
|
||||
SetLength(FVariantProperties, AIndex + 4)
|
||||
else begin
|
||||
FVariantProperties[AIndex].Free;
|
||||
end;
|
||||
FVariantProperties[AIndex]:= NewValue;
|
||||
end;
|
||||
if Assigned(NewValue) then
|
||||
|
|
@ -626,11 +641,7 @@ end;
|
|||
|
||||
procedure TFile.SetNameProperty(NewValue: TFileNameProperty);
|
||||
begin
|
||||
FProperties[fpName] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpName)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpName);
|
||||
Properties[fpName] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetAttributesProperty: TFileAttributesProperty;
|
||||
|
|
@ -640,14 +651,11 @@ end;
|
|||
|
||||
procedure TFile.SetAttributesProperty(NewValue: TFileAttributesProperty);
|
||||
begin
|
||||
FProperties[fpAttributes] := NewValue;
|
||||
Properties[fpAttributes] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
begin
|
||||
Include(FSupportedProperties, fpAttributes);
|
||||
UpdateNameAndExtension(Name);
|
||||
end
|
||||
else
|
||||
Exclude(FSupportedProperties, fpAttributes);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TFile.GetSizeProperty: TFileSizeProperty;
|
||||
|
|
@ -657,11 +665,7 @@ end;
|
|||
|
||||
procedure TFile.SetSizeProperty(NewValue: TFileSizeProperty);
|
||||
begin
|
||||
FProperties[fpSize] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpSize)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpSize);
|
||||
Properties[fpSize] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetCompressedSizeProperty: TFileCompressedSizeProperty;
|
||||
|
|
@ -671,11 +675,7 @@ end;
|
|||
|
||||
procedure TFile.SetCompressedSizeProperty(NewValue: TFileCompressedSizeProperty);
|
||||
begin
|
||||
FProperties[fpCompressedSize] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpCompressedSize)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpCompressedSize);
|
||||
Properties[fpCompressedSize] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetModificationTimeProperty: TFileModificationDateTimeProperty;
|
||||
|
|
@ -685,11 +685,7 @@ end;
|
|||
|
||||
procedure TFile.SetModificationTimeProperty(NewValue: TFileModificationDateTimeProperty);
|
||||
begin
|
||||
FProperties[fpModificationTime] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpModificationTime)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpModificationTime);
|
||||
Properties[fpModificationTime] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetCreationTimeProperty: TFileCreationDateTimeProperty;
|
||||
|
|
@ -699,11 +695,7 @@ end;
|
|||
|
||||
procedure TFile.SetCreationTimeProperty(NewValue: TFileCreationDateTimeProperty);
|
||||
begin
|
||||
FProperties[fpCreationTime] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpCreationTime)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpCreationTime);
|
||||
Properties[fpCreationTime] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetLastAccessTimeProperty: TFileLastAccessDateTimeProperty;
|
||||
|
|
@ -713,11 +705,7 @@ end;
|
|||
|
||||
procedure TFile.SetLastAccessTimeProperty(NewValue: TFileLastAccessDateTimeProperty);
|
||||
begin
|
||||
FProperties[fpLastAccessTime] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpLastAccessTime)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpLastAccessTime);
|
||||
Properties[fpLastAccessTime] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetChangeTime: TDateTime;
|
||||
|
|
@ -737,11 +725,7 @@ end;
|
|||
|
||||
procedure TFile.SetChangeTimeProperty(AValue: TFileChangeDateTimeProperty);
|
||||
begin
|
||||
FProperties[fpChangeTime] := AValue;
|
||||
if Assigned(AValue) then
|
||||
Include(FSupportedProperties, fpChangeTime)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpChangeTime);
|
||||
Properties[fpChangeTime] := AValue;
|
||||
end;
|
||||
|
||||
function TFile.GetLinkProperty: TFileLinkProperty;
|
||||
|
|
@ -751,11 +735,7 @@ end;
|
|||
|
||||
procedure TFile.SetLinkProperty(NewValue: TFileLinkProperty);
|
||||
begin
|
||||
FProperties[fpLink] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpLink)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpLink);
|
||||
Properties[fpLink] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetOwnerProperty: TFileOwnerProperty;
|
||||
|
|
@ -765,11 +745,7 @@ end;
|
|||
|
||||
procedure TFile.SetOwnerProperty(NewValue: TFileOwnerProperty);
|
||||
begin
|
||||
FProperties[fpOwner] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpOwner)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpOwner);
|
||||
Properties[fpOwner] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetTypeProperty: TFileTypeProperty;
|
||||
|
|
@ -779,11 +755,7 @@ end;
|
|||
|
||||
procedure TFile.SetTypeProperty(NewValue: TFileTypeProperty);
|
||||
begin
|
||||
FProperties[fpType] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpType)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpType);
|
||||
Properties[fpType] := NewValue;
|
||||
end;
|
||||
|
||||
function TFile.GetCommentProperty: TFileCommentProperty;
|
||||
|
|
@ -793,13 +765,21 @@ end;
|
|||
|
||||
procedure TFile.SetCommentProperty(NewValue: TFileCommentProperty);
|
||||
begin
|
||||
FProperties[fpComment] := NewValue;
|
||||
if Assigned(NewValue) then
|
||||
Include(FSupportedProperties, fpComment)
|
||||
else
|
||||
Exclude(FSupportedProperties, fpComment);
|
||||
Properties[fpComment] := NewValue;
|
||||
end;
|
||||
|
||||
{$IFDEF DARWIN}
|
||||
function TFile.GetFinderTagProperty: TFileFinderTagProperty;
|
||||
begin
|
||||
Result := TFileFinderTagProperty(FProperties[fpMacOSFinderTag]);
|
||||
end;
|
||||
|
||||
procedure TFile.SetFinderTagProperty(NewValue: TFileFinderTagProperty);
|
||||
begin
|
||||
Properties[fpMacOSFinderTag] := NewValue;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
function TFile.IsNameValid: Boolean;
|
||||
begin
|
||||
if Name <> '..' then
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue