mirror of https://gitlab.com/basile.b/dexed.git
libman, register from code.dlang, use result from new empty search
This commit is contained in:
parent
7d84ab1a04
commit
82bc48a16a
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue