ADD: class TSimpleDarwinFSWatcher added

(cherry picked from commit 9d7a07b50a)
This commit is contained in:
rich2014 2023-12-21 01:07:01 +08:00 committed by Alexander Koblov
commit bc533a396e

View file

@ -35,7 +35,8 @@ interface
uses
Classes, SysUtils, UnixType,
Cocoa_Extra, MacOSAll, CocoaAll, CocoaUtils, CocoaInt, CocoaConst, CocoaMenus,
InterfaceBase, Menus, Controls, Forms, LazLoggerBase;
InterfaceBase, Menus, Controls, Forms,
uDarwinFSWatch;
// Darwin Util Function
function StringToNSString(const S: String): NSString;
@ -91,6 +92,25 @@ type TDarwinStatfs = TStatFs;
{$endif}
// MacOS Simple File Sytem Watcher (only one watchPath)
{ TSimpleDarwinFSWatcher }
TSimpleDarwinFSWatcher = class( TThread )
private
_monitor: TDarwinFSWatcher;
_callback: TDarwinFSWatchCallBack;
_event: TDarwinFSWatchEvent;
protected
procedure Execute; override;
procedure handleEvent( event:TDarwinFSWatchEvent );
procedure doSyncCallback;
public
procedure stop();
constructor Create( const path:String; const callback:TDarwinFSWatchCallBack );
destructor Destroy; override;
end;
// MacOS Service Integration
type TNSServiceProviderCallBack = Procedure( filenames:TStringList ) of object;
type TNSServiceMenuIsReady = Function(): Boolean of object;
@ -145,6 +165,47 @@ implementation
uses
DynLibs;
{ TSimpleDarwinFSWatcher }
procedure TSimpleDarwinFSWatcher.Execute;
begin
_monitor.start();
end;
procedure TSimpleDarwinFSWatcher.handleEvent( event:TDarwinFSWatchEvent );
begin
_event:= event;
Synchronize( doSyncCallback );
end;
procedure TSimpleDarwinFSWatcher.doSyncCallback;
begin
_callback( _event );
_event:= nil;
end;
procedure TSimpleDarwinFSWatcher.stop();
begin
_monitor.terminate();
end;
constructor TSimpleDarwinFSWatcher.Create(
const path:String;
const callback:TDarwinFSWatchCallBack );
begin
Inherited Create( false );
_callback:= callback;
_monitor:= TDarwinFSWatcher.create( handleEvent );
_monitor.addPath( path );
end;
destructor TSimpleDarwinFSWatcher.Destroy;
begin
FreeAndNil( _monitor );
inherited;
end;
procedure setMacOSAppearance( mode:Integer );
var
appearance: NSAppearance;