libman, register from code.dlang, use result from new empty search

This commit is contained in:
Basile Burg 2016-08-31 02:37:04 +02:00
parent 7d84ab1a04
commit 82bc48a16a
No known key found for this signature in database
GPG Key ID: 1868039F415CB8CF
1 changed files with 49 additions and 38 deletions

View File

@ -6,25 +6,26 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
Menus, ComCtrls, Buttons, LazFileUtils, strutils, fphttpclient, StdCtrls, xfpjson, Menus, ComCtrls, Buttons, LazFileUtils, strutils, fphttpclient, StdCtrls,
xfpjson, xjsonparser,
ce_widget, ce_interfaces, ce_nativeproject, ce_dmdwrap, ce_common, ce_dialogs, ce_widget, ce_interfaces, ce_nativeproject, ce_dmdwrap, ce_common, ce_dialogs,
ce_sharedres, process, ce_dubproject, ce_observer, ce_dlang, ce_stringrange, ce_sharedres, process, ce_dubproject, ce_observer, ce_dlang, ce_libman,
ce_libman, ce_projutils, ce_dsgncontrols; ce_projutils, ce_dsgncontrols;
type type
TDubPackageQueryForm = class(TForm) TDubPackageQueryForm = class(TForm)
private private
class var fList: TStringList; class var fList: TJSONData;
cbb: TComboBox; cbb: TComboBox;
fGetLatestTag: boolean; fGetLatestTag: boolean;
function getPackageName: string; function getPackageName: string;
function getPackageVersion: string; function getPackageVersion: string;
procedure getList(sender: TObject); procedure getList(sender: TObject);
procedure fillList;
procedure btnTagCLick(sender: TObject); procedure btnTagCLick(sender: TObject);
public public
class function showAndWait(out pName, pVersion: string): TModalResult; static; class function showAndWait(out pName, pVersion: string): TModalResult; static;
class constructor classCtor;
class destructor classDtor; class destructor classDtor;
constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent); override;
property packageName: string read getPackageName; property packageName: string read getPackageName;
@ -187,11 +188,6 @@ begin
itm.Selected := True; itm.Selected := True;
end; end;
class constructor TDubPackageQueryForm.classCtor;
begin
fList := TStringList.Create;
end;
class destructor TDubPackageQueryForm.classDtor; class destructor TDubPackageQueryForm.classDtor;
begin begin
fList.Free; fList.Free;
@ -217,7 +213,6 @@ begin
cbb.AutoComplete := true; cbb.AutoComplete := true;
cbb.Align := alClient; cbb.Align := alClient;
cbb.BorderSpacing.Around := 6; cbb.BorderSpacing.Around := 6;
cbb.Items.AddStrings(fList);
cbb.Sorted:= true; cbb.Sorted:= true;
bsv := TSpeedButton.Create(self); bsv := TSpeedButton.Create(self);
@ -269,6 +264,8 @@ begin
bno.Layout:= blGlyphTop; bno.Layout:= blGlyphTop;
bno.Spacing:= 2; bno.Spacing:= 2;
AssignPng(bno, 'CANCEL'); AssignPng(bno, 'CANCEL');
fillList;
end; end;
procedure TDubPackageQueryForm.btnTagCLick(sender: TObject); procedure TDubPackageQueryForm.btnTagCLick(sender: TObject);
@ -280,25 +277,46 @@ procedure TDubPackageQueryForm.getList(sender: TObject);
var var
pge: string; pge: string;
cli: TFPHTTPClient; cli: TFPHTTPClient;
prs: TJSONParser;
begin begin
fList.Clear; if assigned(fList) then
fList.free;
cli := TFPHTTPClient.Create(nil); cli := TFPHTTPClient.Create(nil);
try try
try try
pge := cli.Get('https://code.dlang.org/packages/index.json'); pge := cli.Get('https://code.dlang.org/api/packages/search');
except except
pge := ''; pge := '[]';
end; end;
finally finally
cli.Free; cli.Free;
end; end;
with TStringRange.create(pge) do while not empty do prs := TJSONParser.Create(pge, []);
begin try
fList.Add(popUntil('"')^.popFront^.takeUntil('"').yield); fList := prs.Parse;
popFront; finally
prs.Free;
end;
fillList;
end;
procedure TDubPackageQueryForm.fillList;
var
itm: TJSONData;
i: integer;
begin
cbb.Clear;
if fList.isNotNil and (fList.JSONType = jtArray) then
for i := 0 to fList.Count -1 do
begin
itm := fList.Items[i].FindPath('version');
if itm.isNil then
continue;
itm := fList.Items[i].FindPath('name');
if itm.isNil then
continue;
cbb.Items.AddObject(itm.AsString, fList.Items[i]);
end; end;
cbb.Items.clear;
cbb.Items.AddStrings(fList);
end; end;
function TDubPackageQueryForm.getPackageName: string; function TDubPackageQueryForm.getPackageName: string;
@ -307,25 +325,18 @@ begin
end; end;
function TDubPackageQueryForm.getPackageVersion: string; function TDubPackageQueryForm.getPackageVersion: string;
var
jsn: TJSONData;
begin begin
if fGetLatestTag then result := 'master';
begin if fGetLatestTag and (cbb.ItemIndex <> -1) and
with TFPHTTPClient.Create(nil) do cbb.Items.Objects[cbb.ItemIndex].isNotNil then
try try
try jsn := TJSONData(cbb.Items.Objects[cbb.ItemIndex]);
result := Get('https://code.dlang.org/api/packages/' + packageName + '/latest'); jsn := jsn.FindPath('version');
except result := jsn.AsString;
result := 'master'; except
end; end;
finally
Free;
end;
if (result.length >= 7) and (result[2] in ['0'..'9']) then
result := result[2..result.length-1]
else
result := 'master';
end
else result := 'master';
end; end;
class function TDubPackageQueryForm.showAndWait(out pName, pVersion: string): TModalResult; class function TDubPackageQueryForm.showAndWait(out pName, pVersion: string): TModalResult;