ADD: iCloud.json for iCloudDriver configuration

This commit is contained in:
rich2014 2025-02-26 22:36:13 +08:00
commit e692f4ae02
4 changed files with 144 additions and 51 deletions

View file

@ -311,7 +311,7 @@ end;"/>
<PackageName Value="Image32"/>
</Item13>
</RequiredPackages>
<Units Count="284">
<Units Count="286">
<Unit0>
<Filename Value="doublecmd.lpr"/>
<IsPartOfProject Value="True"/>
@ -2052,6 +2052,16 @@ end;"/>
<IsPartOfProject Value="True"/>
<UnitName Value="uDarwinUtil"/>
</Unit283>
<Unit284>
<Filename Value="platform\unix\darwin\uiclouddriverconfig.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="uiCloudDriverConfig"/>
</Unit284>
<Unit285>
<Filename Value="platform\unix\darwin\udarwinfileview.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="uDarwinFileView"/>
</Unit285>
</Units>
</ProjectOptions>
<CompilerOptions>

View file

@ -50,6 +50,7 @@ uses
{$IFDEF darwin}
uAppleMagnifiedModeFix,
uMyDarwin,
uiCloudDriverConfig,
{$ENDIF}
{$IFDEF LCLWIN32}
uDClass,
@ -228,6 +229,7 @@ begin
LoadPixMapManager;
{$IF DEFINED(DARWIN)}
initCocoaModernFormConfig;
loadiCloudConfig;
{$ENDIF}
Application.CreateForm(TfrmMain, frmMain); // main form
Application.CreateForm(TdmComData, dmComData); // common data

View file

@ -8,6 +8,7 @@ interface
uses
Classes, SysUtils, syncobjs, fgl, LazMethodList,
Menus, Forms, Dialogs, System.UITypes,
uiCloudDriverConfig,
uFile, uDisplayFile,
uFileSource, uFileSourceOperationTypes, uFileSourceManager,
uFileSourceWatcher, uMountedFileSource, uVfsModule,
@ -16,28 +17,6 @@ uses
CocoaAll, CocoaUtils;
type
TiCloudDriverConfigPath = record
base: String;
driver: String;
container: String;
end;
TiCloudDriverConfigIcon = record
main: String;
download: String;
end;
TiCloudDriverConfigAppItem = record
name: String;
app: String;
end;
TiCloudDriverConfig = record
scheme: String;
path: TiCloudDriverConfigPath;
icon: TiCloudDriverConfigIcon;
apps: Array of TiCloudDriverConfigAppItem;
end;
{ TiCloudDriverFileSource }
@ -71,35 +50,8 @@ type
function QueryContextMenu(AFiles: TFiles; var AMenu: TPopupMenu): Boolean; override;
end;
var
iCloudDriverConfig: TiCloudDriverConfig;
implementation
const
defaultiCloudDriverConfig: TiCloudDriverConfig = (
scheme: 'iCloud://';
path: (
base: '~/Library/Mobile Documents';
driver: '~/Library/Mobile Documents/com~apple~CloudDocs';
container: '~/Library/Application Support/CloudDocs/session/containers'
);
icon: (
main: '$COMMANDER_PATH/pixmaps/macOS/cloud.fill.png';
download: '$COMMANDER_PATH/pixmaps/macOS/icloud.and.arrow.down.png'
);
apps: (
( name: 'Pages'; app: 'com~apple~Pages' ),
( name: 'Numbers'; app: 'com~apple~Numbers' ),
( name: 'Keynote'; app: 'com~apple~Keynote' ),
( name: 'ScriptEditor'; app: 'com~apple~ScriptEditor2' ),
( name: 'workflows'; app: 'iCloud~is~workflow~my~workflows' ),
( name: 'Playgrounds'; app: 'iCloud~com~apple~Playgrounds' ),
( name: 'iThoughts'; app: 'iCloud~com~toketaware~ios~ithoughts' ),
( name: 'xmind'; app: 'iCloud~net~xmind~brownieapp' )
);
);
type
TWatcherItem = class
@ -823,7 +775,6 @@ begin
end;
initialization
iCloudDriverConfig:= defaultiCloudDriverConfig;
iCloudDriverWatcher:= TiCloudDriverWatcher.Create;
iCloudDriverProcessor:= TiCloudDriverProcessor.Create;
iCloudDriverUIProcessor:= TiCloudDriverUIHandler.Create;

View file

@ -0,0 +1,130 @@
unit uiCloudDriverConfig;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, fpjson, Dialogs,
uGlobsPaths, uLng, DCJsonConfig, uDebug;
procedure loadiCloudConfig;
type
TiCloudDriverConfigPath = record
base: String;
driver: String;
container: String;
end;
TiCloudDriverConfigIcon = record
main: String;
download: String;
end;
TiCloudDriverConfigAppItem = record
name: String;
app: String;
end;
TiCloudDriverConfig = record
scheme: String;
path: TiCloudDriverConfigPath;
icon: TiCloudDriverConfigIcon;
apps: Array of TiCloudDriverConfigAppItem;
end;
var
iCloudDriverConfig: TiCloudDriverConfig;
implementation
const
defaultiCloudDriverConfig: TiCloudDriverConfig = (
scheme: 'iCloud://';
path: (
base: '~/Library/Mobile Documents';
driver: '~/Library/Mobile Documents/com~apple~CloudDocs';
container: '~/Library/Application Support/CloudDocs/session/containers'
);
icon: (
main: '$COMMANDER_PATH/pixmaps/macOS/cloud.fill.png';
download: '$COMMANDER_PATH/pixmaps/macOS/icloud.and.arrow.down.png'
);
apps: (
( name: 'Pages'; app: 'com~apple~Pages' ),
( name: 'Numbers'; app: 'com~apple~Numbers' ),
( name: 'Keynote'; app: 'com~apple~Keynote' ),
( name: 'ScriptEditor'; app: 'com~apple~ScriptEditor2' ),
( name: 'workflows'; app: 'iCloud~is~workflow~my~workflows' ),
( name: 'Playgrounds'; app: 'iCloud~com~apple~Playgrounds' ),
( name: 'iThoughts'; app: 'iCloud~com~toketaware~ios~ithoughts' ),
( name: 'xmind'; app: 'iCloud~net~xmind~brownieapp' )
);
);
const
JSON_FILENAME = 'iCloud.json';
function getJsonPath: String;
begin
Result:= gpCfgDir + JSON_FILENAME;
end;
procedure loadiCloudConfigFromJson( json: TJSONObject );
var
jsonPath: TJSONObject;
jsonIcon: TJSONObject;
jsonApps: TJSONArray;
jsonApp: TJSONObject;
i: Integer;
begin
iCloudDriverConfig.scheme:= json.Get( 'scheme', iCloudDriverConfig.scheme );
jsonPath:= json.Get( 'path', TJSONObject(nil) );
if jsonPath <> nil then begin
iCloudDriverConfig.path.base:= jsonPath.Get( 'base', iCloudDriverConfig.path.base );
iCloudDriverConfig.path.driver:= jsonPath.Get( 'driver', iCloudDriverConfig.path.driver );
iCloudDriverConfig.path.container:= jsonPath.Get( 'container', iCloudDriverConfig.path.container );
end;
jsonIcon:= json.Get( 'icon', TJSONObject(nil) );
if jsonIcon <> nil then begin
iCloudDriverConfig.icon.main:= jsonIcon.Get( 'main', iCloudDriverConfig.icon.main );
iCloudDriverConfig.icon.download:= jsonIcon.Get( 'download', iCloudDriverConfig.icon.download );
end;
jsonApps:= json.Get( 'apps', TJSONArray(nil) );
if jsonApps <> nil then begin
SetLength( iCloudDriverConfig.apps, jsonApps.Count );
for i:=0 to jsonApps.Count -1 do begin
jsonApp:= TJSONObject( jsonApps[i] );
iCloudDriverConfig.apps[i].name:= jsonApp.Get( 'name', '' );
iCloudDriverConfig.apps[i].app:= jsonApp.Get( 'app', '' );
end;
end;
end;
procedure loadiCloudConfig;
var
config: TJsonConfig;
begin
iCloudDriverConfig:= defaultiCloudDriverConfig;
config:= TJsonConfig.Create;
try
try
config.LoadFromFile( getJsonPath );
if config.Root = nil then
Exit;
loadiCloudConfigFromJson( config.Root );
except
end;
finally
FreeAndNil( config );
end;
end;
end.