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
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_sharedres, process, ce_dubproject, ce_observer, ce_dlang, ce_stringrange,
ce_libman, ce_projutils, ce_dsgncontrols;
ce_sharedres, process, ce_dubproject, ce_observer, ce_dlang, ce_libman,
ce_projutils, ce_dsgncontrols;
type
TDubPackageQueryForm = class(TForm)
private
class var fList: TStringList;
class var fList: TJSONData;
cbb: TComboBox;
fGetLatestTag: boolean;
function getPackageName: string;
function getPackageVersion: string;
procedure getList(sender: TObject);
procedure fillList;
procedure btnTagCLick(sender: TObject);
public
class function showAndWait(out pName, pVersion: string): TModalResult; static;
class constructor classCtor;
class destructor classDtor;
constructor Create(TheOwner: TComponent); override;
property packageName: string read getPackageName;
@ -187,11 +188,6 @@ begin
itm.Selected := True;
end;
class constructor TDubPackageQueryForm.classCtor;
begin
fList := TStringList.Create;
end;
class destructor TDubPackageQueryForm.classDtor;
begin
fList.Free;
@ -217,7 +213,6 @@ begin
cbb.AutoComplete := true;
cbb.Align := alClient;
cbb.BorderSpacing.Around := 6;
cbb.Items.AddStrings(fList);
cbb.Sorted:= true;
bsv := TSpeedButton.Create(self);
@ -269,6 +264,8 @@ begin
bno.Layout:= blGlyphTop;
bno.Spacing:= 2;
AssignPng(bno, 'CANCEL');
fillList;
end;
procedure TDubPackageQueryForm.btnTagCLick(sender: TObject);
@ -280,25 +277,46 @@ procedure TDubPackageQueryForm.getList(sender: TObject);
var
pge: string;
cli: TFPHTTPClient;
prs: TJSONParser;
begin
fList.Clear;
if assigned(fList) then
fList.free;
cli := TFPHTTPClient.Create(nil);
try
try
pge := cli.Get('https://code.dlang.org/packages/index.json');
pge := cli.Get('https://code.dlang.org/api/packages/search');
except
pge := '';
pge := '[]';
end;
finally
cli.Free;
end;
with TStringRange.create(pge) do while not empty do
begin
fList.Add(popUntil('"')^.popFront^.takeUntil('"').yield);
popFront;
prs := TJSONParser.Create(pge, []);
try
fList := prs.Parse;
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;
cbb.Items.clear;
cbb.Items.AddStrings(fList);
end;
function TDubPackageQueryForm.getPackageName: string;
@ -307,25 +325,18 @@ begin
end;
function TDubPackageQueryForm.getPackageVersion: string;
var
jsn: TJSONData;
begin
if fGetLatestTag then
begin
with TFPHTTPClient.Create(nil) do
try
try
result := Get('https://code.dlang.org/api/packages/' + packageName + '/latest');
except
result := 'master';
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';
result := 'master';
if fGetLatestTag and (cbb.ItemIndex <> -1) and
cbb.Items.Objects[cbb.ItemIndex].isNotNil then
try
jsn := TJSONData(cbb.Items.Objects[cbb.ItemIndex]);
jsn := jsn.FindPath('version');
result := jsn.AsString;
except
end;
end;
class function TDubPackageQueryForm.showAndWait(out pName, pVersion: string): TModalResult;