-
Notifications
You must be signed in to change notification settings - Fork 0
/
ProgressBar.scpt
280 lines (271 loc) · 8.88 KB
/
ProgressBar.scpt
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
use scripting additions
use framework "Foundation"
set progress total steps to 100
script scr
property pth : ""
property fom : ""
property str : ""
property mes : ""
property con : 0
property stp : 0
property cou : 0
property reg : 0
property tru : 0
property ten : false
property num : {}
property hom : (path to home folder) as text
property pat1 : "^\\[ *([0-9]+)%].*"
property pat2 : "^\\[([0-9]+/[0-9]+)].*"
end script
set {k, e, t1, t2, t3, t4, t5} to {true, false, false, false, false, false, false}
repeat
display dialog "Formula" default answer ""
set m to text returned of result
tell application "System Events"
if not (exists file ("~/Library/Logs/Homebrew/" & m & "/03.cmake")) and ¬
(exists file ("~/Library/Logs/Homebrew/" & m & "/01.cmake")) then
set {e, ten of scr, mes of scr} to {true, false, "cmake"}
set f to exists file ("~/Library/Logs/Homebrew/" & m & "/02." & mes of scr)
set d to exists file ("~/Library/Logs/Homebrew/" & m & "/02.make")
else if not (exists file ("~/Library/Logs/Homebrew/" & m & "/03.meson")) and ¬
(exists file ("~/Library/Logs/Homebrew/" & m & "/01.meson")) then
set {e, ten of scr, mes of scr} to {true, false, "meson"}
set f to exists file ("~/Library/Logs/Homebrew/" & m & "/2." & mes of scr)
set d to exists file ("~/Library/Logs/Homebrew/" & m & "/2.ninja")
else if not (exists file ("~/Library/Logs/Homebrew/" & m & "/01.meson")) and ¬
not (exists file ("~/Library/Logs/Homebrew/" & m & "/04.meson")) and ¬
(exists file ("~/Library/Logs/Homebrew/" & m & "/02.meson")) then
set {e, ten of scr, mes of scr} to {true, true, "meson"}
set f to exists file ("~/Library/Logs/Homebrew/" & m & "/03." & mes of scr)
set d to exists file ("~/Library/Logs/Homebrew/" & m & "/03.ninja")
end if
end tell
if e is true then
if f is false and d is false then display notification " configure...." with title "Wait"
if ten of scr is true then
set po to POSIX path of (hom of scr & "Library:Logs:Homebrew:" & m & ":02." & mes of scr)
else
set po to POSIX path of (hom of scr & "Library:Logs:Homebrew:" & m & ":01." & mes of scr)
end if
delay 0.1
repeat
try
read po from eof to -300
on error
read po from eof to -100
end try
if result contains "nettirw neeb" or result contains "ajnin dnuoF" then
if f is false and d is false then display notification " configure...." with title "Success"
set k to false
exit repeat
end if
set g to get eof po
delay 0.5
if (get eof po) = g then
if mes of scr = "cmake" then
do shell script "killall -INFO cmake 2>/dev/null||echo 1"
else
do shell script "killall -INFO Python 2>/dev/null||echo 1"
end if
if result is "1" then
display dialog m & " : configure : Error..."
return
end if
end if
end repeat
else
display dialog "File not exist : $HOME/Library/Logs/Homebrew/" & m & "/....."
end if
if k is false then exit repeat
end repeat
delay 2
tell application "System Events"
set t1 to exists file ("~/Library/Logs/Homebrew/" & m & "/03." & mes of scr)
set t2 to exists file ("~/Library/Logs/Homebrew/" & m & "/03.ninja")
set t3 to exists file ("~/Library/Logs/Homebrew/" & m & "/02." & mes of scr)
set t4 to exists file ("~/Library/Logs/Homebrew/" & m & "/02.make")
set t5 to exists file ("~/Library/Logs/Homebrew/" & m & "/02.ninja")
end tell
if t1 is false and t2 is false and t3 is false and t4 is false and t5 is false then return
if t1 is true then
set e to "$HOME/Library/Logs/Homebrew/" & m & "/03." & mes of scr
set po to POSIX path of (hom of scr & "Library:Logs:Homebrew:" & m & ":03." & mes of scr)
else if t2 is true then
set mes of scr to "ninja"
set e to "$HOME/Library/Logs/Homebrew/" & m & "/03." & mes of scr
set po to POSIX path of (hom of scr & "Library:Logs:Homebrew:" & m & ":03." & mes of scr)
else if t3 is true then
set e to "$HOME/Library/Logs/Homebrew/" & m & "/02." & mes of scr
set po to POSIX path of (hom of scr & "Library:Logs:Homebrew:" & m & ":02." & mes of scr)
else if t4 is true then
set mes of scr to "make"
set e to "$HOME/Library/Logs/Homebrew/" & m & "/02." & mes of scr
set po to POSIX path of (hom of scr & "Library:Logs:Homebrew:" & m & ":02." & mes of scr)
else if t5 is true then
set mes of scr to "ninja"
set e to "$HOME/Library/Logs/Homebrew/" & m & "/02." & mes of scr
set po to POSIX path of (hom of scr & "Library:Logs:Homebrew:" & m & ":02." & mes of scr)
end if
set {Shell, loop} to {"", 0}
repeat 10 times
delay 1
set loop to loop + 1
set Shell to do shell script "
perl -ne '$i=$h=$e=2,last if /^make: \\*/||/^ninja: build stopped:/||/^KeyboardInterrupt/;
next if $_!~m|^\\[\\d+/\\d+]|&&$_!~/^\\[ *\\d+%]/;
m|^\\[\\d+/(\\d+)]|,$e=$1||'t' unless $e;
s|^\\[([\\d]+)/(\\d+)].+|int $1/$2*100|e;s/^\\[ *([\\d]+)%].+/$1/;
next if $i&&$i==$_;$h||=0;$h=1 if $i&&$i>$_;
if($h&&$_<=100){$h=0 if $_==100;next}$i=$_;END{print qq{$i$h
$e}}' " & e & " 2>/dev/null"
if not Shell is "" then exit repeat
end repeat
if loop = 10 and Shell is "" then return
if Shell is "22" & return & "2" then
return
else
set p to words of Shell
set y to item 1 of p as number
set b to item 2 of p as number
set stp of scr to item 3 of p
end if
if y = 100 and b = 0 then return
set tmp to text item delimiters of AppleScript
set text item delimiters of AppleScript to "/"
set {pth of scr, fom of scr, pat} to {po, m, true}
repeat
set {g, num of scr, tru of scr} to {get eof po, {}, 1}
set scr to error_1(scr)
if tru of scr is true then
return
else if tru of scr is false then
set {y, pat} to {100, false}
end if
if (get eof po) > g and pat is true then
set con of scr to g
set scr to reader_1(scr)
end if
repeat with a in num of scr
try
set a to a as number
repeat 1 times
if y > a then
set b to 1
exit repeat
end if
if b = 1 then
if 100 > a then
exit repeat
else
set b to 0
exit repeat
end if
end if
if a > y then set y to a
end repeat
end try
end repeat
if y = 100 and pat is true then
repeat
set {g, k, num of scr, tru of scr} to {get eof po, false, {}, 2}
set scr to error_1(scr)
if tru of scr is true then
return
else if tru of scr is false then
set y to 100
exit repeat
end if
if (get eof po) > g then
set con of scr to g
set scr to reader_1(scr)
end if
repeat with s in num of scr
try
set s to s as number
if y > s then
set {y, k} to {s, true}
exit repeat
end if
end try
end repeat
if k is true then exit repeat
end repeat
end if
set progress completed steps to y
if y = 100 then
delay 1
exit repeat
end if
end repeat
set text item delimiters of AppleScript to tmp
on reader_1(scr)
read pth of scr from con of scr using delimiter linefeed
repeat with se in result
if se contains "] " then
set str of scr to se
if stp of scr is "t" then
set scr to regex_1(scr)
else
set scr to regex_2(scr)
end if
set end of num of scr to reg of scr
end if
end repeat
scr
end reader_1
on error_1(scr)
set cou of scr to (cou of scr) + 1
if not cou of scr = 31 then delay 0.1
if (cou of scr) mod 5 = 0 then
if ten of scr is true then
try
(hom of scr & "Library:Logs:Homebrew:" & fom of scr & ":04." & mes of scr) as alias
set tru of scr to false
return scr
end try
else
try
(hom of scr & "Library:Logs:Homebrew:" & fom of scr & ":03." & mes of scr) as alias
set tru of scr to false
return scr
end try
end if
else if cou of scr = 31 then
set cou of scr to 0
if mes of scr is "cmake" then
do shell script "killall -INFO cmake 2>/dev/null||echo 1"
else if mes of scr is "make" then
do shell script "killall -INFO make 2>/dev/null||echo 1"
else
do shell script "killall -INFO ninja 2>/dev/null||echo 1"
end if
if result is "1" then
if tru of scr = 1 then
display dialog fom of scr & " : make : Error..."
set tru of scr to true
else
set tru of scr to false
end if
return scr
end if
end if
read pth of scr from eof to -200
if result contains "* :ekam" or result contains ":deppots dliub" or result contains "tpurretnIdraobyeK" then
display dialog fom of scr & " : make : Error..."
set tru of scr to true
end if
scr
end error_1
on regex_1(scr)
current application's NSRegularExpression's regularExpressionWithPattern:(pat1 of scr) options:0 |error|:(missing value)
set reg of scr to (result's stringByReplacingMatchesInString:(str of scr) options:0 range:{location:0, |length|:length of (str of scr)} withTemplate:"$1") as text
scr
end regex_1
on regex_2(scr)
current application's NSRegularExpression's regularExpressionWithPattern:(pat2 of scr) options:0 |error|:(missing value)
(result's stringByReplacingMatchesInString:(str of scr) options:0 range:{location:0, |length|:length of (str of scr)} withTemplate:"$1") as text
try
set reg of scr to (text item 1 of result) / (text item 2 of result) * 100 div 1
end try
scr
end regex_2