Wanneer je Dropbox wilt gebruiken in jouw Lazarus applicatie op een Mac, dan moet je natuurlijk wel eerst het pad weten naar de DropBox directory.
Dropbox heeft dit gelukkig gedocumenteerd (zie deze link), en er is een JSON bestand beschikbaar in de gebruikers home directory waar dit in staat:
~/.dropbox/info.json
Het bestand ziet er ongeveer zo uit (uiteraard, als je alleen een persoonlijk account of een business account hebt, dan staat de andere info er natuurlijk niet in):
{
"business": {
"host": 123456789,
"path": "/Users/<USERNAME>/Dropbox (<BUSINESS_NAME>)"
},
"personal": {
"host": 123456789,
"path": "/Users/<USERNAME>/Dropbox (Personal)"
}
}
- business/personal: Soort account.
- host: Een unieke identifier welke gebruiker en computer uniek identificeert.
- path: Pad naar de Dropbox folder.
We hebben een JSON parser nodig om deze DropBox configuratie te lezen (zie Lazarus Wiki).
Een simpel voorbeeld om het DropBox pad te lezen:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, fpjson, jsonparser;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
jData : TJSONData;
jObject : TJSONObject;
jArray : TJSONArray;
jText : TStringList;
DropBoxPath : string;
begin
if FileExists(ExpandFileName('~/.dropbox/info.json')) then
begin
jText:=TStringList.Create;
jText.LoadFromFile(ExpandFileName('~/.dropbox/info.json'));
jData := GetJSON(jText.Text);
jObject := TJSONObject(jData);
DropBoxPath:='';
try
DropBoxPath:=jData.FindPath('personal.path').AsString;
except
// Do nothing
end;
if DropBoxPath='' then
try
DropBoxPath:=jData.FindPath('business.path').AsString;
except
// Do Nothing
end;
if DropBoxPath<>'' then
Label1.Caption:=DropBoxPath;
else
Label1.Caption:='Pad niet gevonden';
jText.Free;
jObject.Free;
jData.Free;
end;
end;
end.