-
Notifications
You must be signed in to change notification settings - Fork 11
/
DAW.Tools.pas
142 lines (127 loc) · 3.04 KB
/
DAW.Tools.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
unit DAW.Tools;
interface
uses
System.Win.Registry;
type
TDawTools = class
private
class var
FAdbExe: string;
class function ReadFromRegAdbExe: string;
public
class function CompilerVersionToProduct(const AVer: Single): Integer;
class function AdbExe: string;
class function AdbPath: string;
class function GetInTag(AInput, AStartTag, AEndTag: string): TArray<string>;
class procedure SaveData(const AName, AValue: string);
class function LoadData(const AName: string): string;
end;
implementation
uses
Winapi.Windows,
System.Generics.Collections,
System.SysUtils;
{ TDawTools }
class function TDawTools.AdbExe: string;
begin
if not FileExists(FAdbExe) then
FAdbExe := ReadFromRegAdbExe;
Result := FAdbExe;
end;
class function TDawTools.AdbPath: string;
begin
Result := ExtractFilePath(AdbExe);
end;
class function TDawTools.CompilerVersionToProduct(const AVer: Single): Integer;
begin
if AVer < 30.0 then
raise Exception.Create('Unsupported IDE version.');
Result := Round(AVer) - 13;
end;
class function TDawTools.GetInTag(AInput, AStartTag, AEndTag: string): TArray<string>;
var
LData: TList<string>;
LInpCash: string;
var
start: Integer;
count: Integer;
ForAdd: string;
begin
LInpCash := AInput;
LData := TList<string>.Create;
try
while not LInpCash.IsEmpty do
begin
start := LInpCash.indexOf(AStartTag); // + ;
if start < 0 then
Break;
Inc(start, AStartTag.Length);
LInpCash := LInpCash.Substring(start);
count := LInpCash.indexOf(AEndTag);
if (count < 0) then
count := LInpCash.Length;
ForAdd := LInpCash.Substring(0, count);
LData.Add(ForAdd);
LInpCash := LInpCash.Substring(count);
end;
Result := LData.ToArray;
finally
LData.Free;
end;
end;
class function TDawTools.LoadData(const AName: string): string;
const
REG_KEY = '\Software\rareMax\DAW\';
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(REG_KEY, False) then
Result := Reg.ReadString(AName);
finally
Reg.Free;
end;
end;
class function TDawTools.ReadFromRegAdbExe: string;
const
REG_KEY = '\Software\Embarcadero\BDS\%d.0\PlatformSDKs\';
var
Reg: TRegistry;
tmpVer: Integer;
tmpSdk: string;
begin
Result := 'Cant find path :(';
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
tmpVer := CompilerVersionToProduct(CompilerVersion);
if Reg.OpenKeyReadOnly(Format(REG_KEY, [tmpVer])) then
begin
tmpSdk := Reg.ReadString('Default_Android');
if Reg.OpenKeyReadOnly(tmpSdk) then
begin
Result := Reg.ReadString('SDKAdbPath');
end;
end;
finally
Reg.Free;
end;
end;
class procedure TDawTools.SaveData(const AName, AValue: string);
const
REG_KEY = '\Software\rareMax\DAW\';
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(REG_KEY, True) then
Reg.WriteString(AName, AValue);
finally
Reg.Free;
end;
end;
end.