-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathredflux-gui
executable file
·401 lines (360 loc) · 45.9 KB
/
redflux-gui
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
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
#!/bin/bash
ACTION="$1"
SCRIPT="`realpath \"$0\"`"
SCRIPTPATH="`dirname \"$SCRIPT\"`"/"`basename \"$0\"`"
SCRIPTNAME=bash\ "$SCRIPTPATH"
#echo $SCRIPTNAME
#SCRIPTNAME="./controlshift-gui.sh"
#echo $SCRIPT
#echo $SCRIPTPATH
#echo $SCRIPTNAME
REDFLUXNAME="redflux"
TKBASHNAME="redflux-tkbash"
GUINAME="redflux-gui"
GUIALREADYRUNNINGNAME="redflux-gui-already-running"
GUIABOUTNAME="redflux-gui-about"
PID="$$"
TMPDIR="/tmp"
SPECTRUMIMG="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"
SPECTRUMLOC="$TMPDIR/spectrum.png"
ICONIMG="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"
ICONLOC="$TMPDIR/redflux-gui.png"
TRAYPIDFILE="$TMPDIR/redflux-gui_tray_pid_$USER"
TRAYSTATEFILE="$TMPDIR/redflux-gui_tray_state_$USER"
# Can be up to 25000K, but seems quite useless to me
MAXTEMP="6500"
# Limitation of RedShift
MINTEMP="1000"
# Amount of temperature added or substracted when buttons "Warmer" or "Colder" used
TWEAKTEMP="200"
# Amount of brigtness added or substracted when buttons Brightness "+" or "-" used
TWEAKBRIGHT="0.05"
draw_gui() {
echo "Drawing GUI"
echo "$SPECTRUMIMG" | base64 -d > "$SPECTRUMLOC"
echo "$ICONIMG" | base64 -d > "$ICONLOC"
echo "Unpacked Resources"
$TKBASHNAME $GUINAME --theme clam --title "RedFlux GUI" -w 470 -h 440 --icon "$ICONLOC" --onclose --command "$SCRIPTNAME close"
echo "Drawing window"
$TKBASHNAME $GUINAME label currtemp-label -x 15 -y 5 -w 130 -h 30 --text "Temperature:"
$TKBASHNAME $GUINAME label currtemp -x 105 -y 5 -w 130 -h 30 --text "Unknown"
$TKBASHNAME $GUINAME label currbright-label -x 15 -y 25 -w 130 -h 30 --text "Brightness:"
$TKBASHNAME $GUINAME label currbright -x 105 -y 25 -w 130 -h 30 --text "Unknown"
$TKBASHNAME $GUINAME label state-label -x 15 -y 45 -w 130 -h 30 --text "State:"
$TKBASHNAME $GUINAME label state -x 105 -y 45 -w 130 -h 30 --text "Unknown"
$TKBASHNAME $GUINAME label status -x 20 -y 400 -w 200 -h 30 --text ""
$TKBASHNAME $GUINAME button reset -x 40 -y 70 -w 140 -h 30 --text "Reset" --command "$SCRIPTNAME reset"
$TKBASHNAME $GUINAME button inctemp -x 40 -y 110 -w 140 -h 30 --text "Colder" --command "$SCRIPTNAME increase"
$TKBASHNAME $GUINAME button dectemp -x 40 -y 150 -w 140 -h 30 --text "Warmer" --command "$SCRIPTNAME decrease"
$TKBASHNAME $GUINAME button toggle -x 40 -y 190 -w 140 -h 30 --text "Toggle On/Off" --command "$SCRIPTNAME toggle"
$TKBASHNAME $GUINAME label presets -x 335 -y 5 -w 130 -h 30 --text "Presets"
$TKBASHNAME $GUINAME button presets-redscale -x 275 -y 35 -w 160 -h 30 --text "1000K Ultra Red" --command "$SCRIPTNAME set 1000"
$TKBASHNAME $GUINAME button presets-ember -x 275 -y 75 -w 160 -h 30 --text "1200K Ember" --command "$SCRIPTNAME set 1200"
$TKBASHNAME $GUINAME button presets-candle -x 275 -y 115 -w 160 -h 30 --text "1900K Candle" --command "$SCRIPTNAME set 1900"
$TKBASHNAME $GUINAME button presets-dim-incandescent -x 275 -y 155 -w 160 -h 30 --text "2300K Dim Incandescent" --command "$SCRIPTNAME set 2300"
$TKBASHNAME $GUINAME button presets-incandescent -x 275 -y 195 -w 160 -h 30 --text "2700K Incandescent" --command "$SCRIPTNAME set 2700"
$TKBASHNAME $GUINAME button presets-halogen -x 275 -y 235 -w 160 -h 30 --text "3400K Halogen" --command "$SCRIPTNAME set 3400"
$TKBASHNAME $GUINAME button presets-fluorescent -x 275 -y 275 -w 160 -h 30 --text "4200K Fluorescent" --command "$SCRIPTNAME set 4200"
$TKBASHNAME $GUINAME button presets-sunlight -x 275 -y 315 -w 160 -h 30 --text "5000K Sunlight" --command "$SCRIPTNAME set 5000"
$TKBASHNAME $GUINAME button presets-disabled -x 275 -y 355 -w 160 -h 30 --text "6500K Disabled" --command "$SCRIPTNAME set 6500"
$TKBASHNAME $GUINAME label brightness -x 15 -y 407 -w 130 -h 30 --text "Brightness:"
$TKBASHNAME $GUINAME button decbright -x 100 -y 400 -w 40 -h 30 --text "-" --command "$SCRIPTNAME decreasebright"
$TKBASHNAME $GUINAME button incbright -x 160 -y 400 -w 40 -h 30 --text "+" --command "$SCRIPTNAME increasebright"
$TKBASHNAME $GUINAME text own-temp-text -x 265 -y 400 -w 35 -h 20 --text "4200" --ignore-newline
$TKBASHNAME $GUINAME label own-temp-label -x 300 -y 401 -w 38 -h 20 --text "K"
$TKBASHNAME $GUINAME button own-temp-button -x 315 -y 395 -w 120 -h 30 --text "Set Temperature" --command "$SCRIPTNAME set-custom"
$TKBASHNAME $GUINAME label spectrum-label -x 30 -y 225 -w 190 -h 30 --text "Color Distortion Visualization"
$TKBASHNAME $GUINAME image spectrum -x 15 -y 245 -w 200 -h 150 --image "$SPECTRUMLOC" --command "$SCRIPTNAME set 6500"
$TKBASHNAME $GUINAME label presets-redscale-color -x 250 -y 40 -w 20 -h 20 --background \#ff3800
$TKBASHNAME $GUINAME label presets-ember-color -x 250 -y 80 -w 20 -h 20 --background \#ff8400
$TKBASHNAME $GUINAME label presets-candle-color -x 250 -y 120 -w 20 -h 20 --background \#ffcf01
$TKBASHNAME $GUINAME label presets-dim-incandescent-color -x 250 -y 160 -w 20 -h 20 --background \#ffdf53
$TKBASHNAME $GUINAME label presets-incandescent-color -x 250 -y 200 -w 20 -h 20 --background \#ffe977
$TKBASHNAME $GUINAME label presets-halogen-color -x 250 -y 240 -w 20 -h 20 --background \#fff3a3
$TKBASHNAME $GUINAME label presets-fluorescent-color -x 250 -y 280 -w 20 -h 20 --background \#fff9c6
$TKBASHNAME $GUINAME label presets-sunlight-color -x 250 -y 320 -w 20 -h 20 --background \#fffcdf
$TKBASHNAME $GUINAME label presets-disabled-color -x 250 -y 360 -w 20 -h 20 --background \#ffffff
$TKBASHNAME $GUINAME button about -x 190 -y 190 -w 25 -h 30 --text "?" --command "$SCRIPTNAME about-window"
}
update() {
RUNNINGPID=$(pgrep redflux-tkbash)
if ! [[ -z $RUNNINGPID ]]
then
if [[ $($TKBASHNAME $GUINAME --exist) = 1 ]]
then
echo "Updating..."
$TKBASHNAME $GUINAME button currtemp --text "$($REDFLUXNAME getinfo currtemp)K"
$TKBASHNAME $GUINAME button currbright --text "$($REDFLUXNAME getinfo currbright)"
$TKBASHNAME $GUINAME button state --text "$($REDFLUXNAME getinfo state)"
else
exit
fi
else
exit
fi
}
reghotkeys() {
$TKBASHNAME $GUINAME --hotkey Prior --command "$SCRIPTNAME increase"
$TKBASHNAME $GUINAME --hotkey Next --command "$SCRIPTNAME decrease"
$TKBASHNAME $GUINAME --hotkey Home --command "$SCRIPTNAME reset"
$TKBASHNAME $GUINAME --hotkey End --command "$SCRIPTNAME toggle"
$TKBASHNAME $GUINAME button inctemp --text "Colder (PgUp)"
$TKBASHNAME $GUINAME button dectemp --text "Warmer (PgDown)"
$TKBASHNAME $GUINAME button reset --text "Reset (Home)"
$TKBASHNAME $GUINAME button toggle --text "Toggle On/Off (End)"
}
tray-init() {
yad --notification --image="$ICONLOC" --no-middle --command="$SCRIPTNAME tray-toggle" --text="RedFlux GUI Show/Hide" &
echo "$!" > "$TRAYPIDFILE"
echo "1" > "$TRAYSTATEFILE"
}
tray-show() {
$TKBASHNAME $GUINAME --show
}
tray-hide() {
$TKBASHNAME $GUINAME --hide
}
tray-toggle() {
TRAYSTATE=$(cat $TRAYSTATEFILE)
if [[ $TRAYSTATE -eq 1 ]]
then
tray-hide
echo "0" > $TRAYSTATEFILE
else
tray-show
echo "1" > $TRAYSTATEFILE
fi
}
close() {
echo "Closing..."
if [[ -f $TRAYPIDFILE ]]
then
echo "Tray PID file found!"
TRAYPIDTOSTOP="$(cat $TRAYPIDFILE)"
if ! [[ -z $TRAYPIDTOSTOP ]]
then
echo "Stopping tray process $TRAYPIDTOSTOP..."
kill "$TRAYPIDTOSTOP"
pkill -9 -f "yad.*redflux-gui"
rm "$TRAYPIDFILE"
rm "$TRAYSTATEFILE"
fi
fi
exit 0
}
check_running() {
RUNNINGPID=$(pgrep redflux-tkbash)
if ! [[ -z $RUNNINGPID ]]
then
RUNPARAMS="$@"
echo $RUNPARAMS
echo "Already running (PID $RUNNINGPID)..."
$TKBASHNAME $GUIALREADYRUNNINGNAME --theme clam --title "RedFlux GUI Warning" -w 250 -h 100
$TKBASHNAME $GUIALREADYRUNNINGNAME label already-label-1 -x 15 -y 5 -w 200 -h 30 --text "RedFlux GUI is already running!"
$TKBASHNAME $GUIALREADYRUNNINGNAME label already-label-2 -x 15 -y 25 -w 200 -h 30 --text "Do you want to restart it?"
$TKBASHNAME $GUIALREADYRUNNINGNAME button already-restart -x 30 -y 55 -w 80 -h 30 --text "Restart" --command "$TKBASHNAME $GUIALREADYRUNNINGNAME --close;$SCRIPTNAME restart \"$RUNPARAMS\""
$TKBASHNAME $GUIALREADYRUNNINGNAME button already-cancel -x 130 -y 55 -w 80 -h 30 --text "Cancel" --command "$TKBASHNAME $GUIALREADYRUNNINGNAME --close"
exit 1
fi
}
cleanup() {
echo "Cleaning up!"
# Using path from tkbash, not TMPDIR
rm -rf "/tmp/__redflux-tkbash1.0_/"
}
restart() {
sleep 2
echo "Stopping instance!"
$TKBASHNAME $GUINAME --close &
sleep 2
killall -r redflux-tkbash
pkill -9 -f "yad.*redflux-gui"
sleep 2
if ! [[ -z $(pgrep redflux-tkbash) ]]
then
killall -s SIGKILL -r redflux-tkbash
sleep 2
fi
}
about-window() {
$TKBASHNAME $GUIABOUTNAME --theme clam --title "About" -w 220 -h 240
$TKBASHNAME $GUIABOUTNAME label title -x 35 -y 5 -w 200 -h 30 --text "RedFlux GUI" --style "font:-weight bold -size 25"
$TKBASHNAME $GUIABOUTNAME image logo -x 35 -y 55 -w 128 -h 128 --image "$ICONLOC" --command "$SCRIPTNAME set 6500"
$TKBASHNAME $GUIABOUTNAME label description-1 -x 45 -y 190 -w 220 -h 30 --text "Wrapper for RedShift"
$TKBASHNAME $GUIABOUTNAME label description-2 -x 60 -y 210 -w 220 -h 30 --text "inspired by f.lux"
}
show_help() {
echo ""
echo "RedFlux GUI is a wrapper for RedShift inspired by f.lux"
echo "Actually it is a GUI of RedFlux CLI script."
echo ""
echo "To use it just run executable like 'redshif-gui'."
echo "Or you can use options described."
echo "Order of options is not important, if there are conflicting options, the last one is taken into account."
echo "RedFlux GUI detects absence of optional components and disables its support automatically, ignoring corresponding options."
echo ""
echo "Options:"
echo "--tray - enable tray support (default)"
echo "--no-tray - disable tray support"
echo "--hotkeys - enable hotkeys (default)"
echo "--no-hotkeys - disable hotkeys"
echo "--start-hidden - start hidden in tray if supported, otherwise start minimized"
echo "--no-start-hidden - do not start hidden (default)"
}
if [[ $ACTION = "update" ]]
then
update
exit 0
elif [[ $ACTION = "increase" ]]
then
$REDFLUXNAME $TWEAKTEMP
#update
exit 0
elif [[ $ACTION = "decrease" ]]
then
$REDFLUXNAME -$TWEAKTEMP
#update
exit 0
elif [[ $ACTION = "increasebright" ]]
then
$REDFLUXNAME $TWEAKBRIGHT
#update
exit 0
elif [[ $ACTION = "decreasebright" ]]
then
$REDFLUXNAME -$TWEAKBRIGHT
#update
exit 0
elif [[ $ACTION = "toggle" ]]
then
$REDFLUXNAME toggle
#update
exit 0
elif [[ $ACTION = "reset" ]]
then
$REDFLUXNAME reset
#update
exit 0
elif [[ $ACTION = "set" ]]
then
$REDFLUXNAME set "$2"
#update
exit 0
elif [[ $ACTION = "close" ]]
then
close "$2"
exit 0
elif [[ $ACTION = "tray-toggle" ]]
then
tray-toggle
exit 0
elif [[ $ACTION = "restart" ]]
then
restart
shift
echo "$@"
$SCRIPTNAME "$@"
exit 0
elif [[ $ACTION = "about-window" ]]
then
about-window
exit 0
elif [[ $ACTION = "set-custom" ]]
then
ENTERED_TEMP=$($TKBASHNAME $GUINAME get own-temp-text)
echo "$ENTERED_TEMP"
if ! echo "$ENTERED_TEMP" | grep [^0-9] -q
then
if (( "$ENTERED_TEMP" < $MINTEMP )) || (("$ENTERED_TEMP" > $MAXTEMP))
then
$TKBASHNAME $GUINAME status --text "Out of range!"
exit 1
fi
else
$TKBASHNAME $GUINAME status --text "Wrong format! Use only numbers"
exit 1
fi
$REDFLUXNAME set "$ENTERED_TEMP"
#update
exit 0
else
check_running "$@"
cleanup
# Variable to check if there are valid option keys
HAVEVALIDKEYS=0
# Variable to count amount of all keys
KEYSCOUNT=0
REGHOTKEYS=1
TRAY=1
STARTHIDDEN=0
for var in "$@"
do
KEYSCOUNT=$((KEYSCOUNT+1))
if [[ $var = "--hotkeys" ]]
then
REGHOTKEYS=1
HAVEVALIDKEYS=1
elif [[ $var = "--no-hotkeys" ]]
then
REGHOTKEYS=0
HAVEVALIDKEYS=1
elif [[ $var = "--tray" ]]
then
TRAY=1
HAVEVALIDKEYS=1
elif [[ $var = "--no-tray" ]]
then
TRAY=0
HAVEVALIDKEYS=1
elif [[ $var = "--start-hidden" ]]
then
STARTHIDDEN=1
HAVEVALIDKEYS=1
elif [[ $var = "--no-start-hidden" ]]
then
STARTHIDDEN=0
HAVEVALIDKEYS=1
fi
done
# Zero key count is valid too, just start program
if [[ $KEYSCOUNT -eq 0 ]]
then
HAVEVALIDKEYS=1
fi
if [[ $HAVEVALIDKEYS -eq 0 ]]
then
show_help
exit 1
fi
if ! which yad
then
TRAY=0
echo "yad is missing! Disabling tray support..."
fi
echo "REGHOTKEYS = $REGHOTKEYS"
echo "TRAY = $TRAY"
echo "STARTHIDDEN = $STARTHIDDEN"
draw_gui
update
if [[ $REGHOTKEYS -eq 1 ]]
then
reghotkeys
fi
if [[ $TRAY -eq 1 ]]
then
tray-init
fi
# If start-hidden and tray enabled, then hide to tray
# Else if tray not enabled, then just minimize window
if [[ $STARTHIDDEN -eq 1 ]]
then
if [[ $TRAY -eq 1 ]]
then
tray-toggle
else
$TKBASHNAME $GUINAME --iconify
fi
fi
$TKBASHNAME $GUINAME button update -x 170 -y 17 -w 60 -h 30 --text "Refresh" --command "$SCRIPTNAME update"
exit 0
fi