[~] Refactor
This commit is contained in:
parent
a979b64261
commit
c542fbcd79
@ -114,6 +114,109 @@ def resilient_vlc(stream=None):
|
|||||||
pass
|
pass
|
||||||
time.sleep(1.0)
|
time.sleep(1.0)
|
||||||
|
|
||||||
|
def eternal_firefox(
|
||||||
|
tabs=None,
|
||||||
|
profile=None,
|
||||||
|
group_name=None,
|
||||||
|
window_position=None,
|
||||||
|
debug=None,
|
||||||
|
):
|
||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
import pprint
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
|
if debug is None:
|
||||||
|
debug = False
|
||||||
|
if tabs is None:
|
||||||
|
raise RuntimeError('no tabs provided')
|
||||||
|
if profile is None:
|
||||||
|
raise RuntimeError('no profile provided')
|
||||||
|
if group_name is None:
|
||||||
|
raise RuntimeError('no group provided')
|
||||||
|
if window_position is None:
|
||||||
|
#window_position = '1,600,0,600,540'
|
||||||
|
raise RuntimeError('no window-position provided')
|
||||||
|
while True:
|
||||||
|
os.system(r'''date''')
|
||||||
|
with subprocess.Popen([
|
||||||
|
'firefox',
|
||||||
|
'-P', profile,
|
||||||
|
*tabs,
|
||||||
|
]) as p:
|
||||||
|
try:
|
||||||
|
if debug:
|
||||||
|
assert subprocess.check_call(['notify-send', '%s:Starting' % group_name]) == 0
|
||||||
|
|
||||||
|
#t3 = ''
|
||||||
|
for k in range(300):
|
||||||
|
t1 = subprocess.check_output(r'''
|
||||||
|
swaymsg -t get_tree | jq -r '..|try select(.pid== %d)'
|
||||||
|
''' % p.pid, shell=True).decode('utf-8')
|
||||||
|
if len(t1) > 10:
|
||||||
|
break
|
||||||
|
#time.sleep(0.1)
|
||||||
|
#t1 = subprocess.check_output(['wmctrl', '-p', '-l']).decode('utf-8')
|
||||||
|
#t4 = [o for o in t1.splitlines() if str(p.pid) in o]
|
||||||
|
#if len(t4) == 1:
|
||||||
|
# t3 = t4[0]
|
||||||
|
# break
|
||||||
|
|
||||||
|
#if t3 == '':
|
||||||
|
# raise RuntimeError
|
||||||
|
|
||||||
|
#t2 = t3.split()[0]
|
||||||
|
#assert os.system('wmctrl -i -r %s -e %s' % (t2, window_position)) == 0
|
||||||
|
assert os.system(r'''
|
||||||
|
swaymsg '[pid="{{PID}}"] move absolute position {{X}}px {{Y}}px'
|
||||||
|
'''.replace('{{PID}}', str(p.pid)) \
|
||||||
|
.replace('{{X}}', str(window_position[1])) \
|
||||||
|
.replace('{{Y}}', str(window_position[2]))) == 0
|
||||||
|
|
||||||
|
#assert os.system('wmctrl -i -r %s -b add,below' % t2) == 0
|
||||||
|
|
||||||
|
if False:
|
||||||
|
for tab in tabs[1:]:
|
||||||
|
time.sleep(10)
|
||||||
|
assert subprocess.check_call([
|
||||||
|
'firefox',
|
||||||
|
'-P', profile,
|
||||||
|
'--new-tab',
|
||||||
|
tab,
|
||||||
|
]) == 0
|
||||||
|
|
||||||
|
|
||||||
|
if debug:
|
||||||
|
assert subprocess.check_call(['notify-send', '%s:Started' % group_name]) == 0
|
||||||
|
|
||||||
|
start = datetime.datetime.now()
|
||||||
|
is_to_restart = lambda : (datetime.datetime.now() - start).total_seconds() >= 900 * 4
|
||||||
|
while not is_to_restart():
|
||||||
|
if not p.poll() is None:
|
||||||
|
break
|
||||||
|
time.sleep(10)
|
||||||
|
|
||||||
|
if debug:
|
||||||
|
assert subprocess.check_call(['notify-send', '%s:Closing' % group_name]) == 0
|
||||||
|
|
||||||
|
#assert os.system('wmctrl -i -c %s' % t2) == 0
|
||||||
|
assert os.system(r'''
|
||||||
|
swaymsg '[pid="%d"] kill'
|
||||||
|
''' % (p.pid,)) == 0
|
||||||
|
|
||||||
|
except:
|
||||||
|
import traceback
|
||||||
|
import pprint
|
||||||
|
pprint.pprint(traceback.format_exc())
|
||||||
|
finally:
|
||||||
|
try:
|
||||||
|
p.wait(20)
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
pprint.pprint([p.pid, '20 seconds timeout', 'kill'])
|
||||||
|
p.kill()
|
||||||
|
if debug:
|
||||||
|
assert subprocess.check_call(['notify-send', '%s:Closed' % group_name]) == 0
|
||||||
|
|
||||||
def status():
|
def status():
|
||||||
return ' | '.join([
|
return ' | '.join([
|
||||||
subprocess.check_output(o, shell=True).decode('utf-8').strip()
|
subprocess.check_output(o, shell=True).decode('utf-8').strip()
|
||||||
@ -196,6 +299,14 @@ try:
|
|||||||
eternal_oom()
|
eternal_oom()
|
||||||
elif sys.argv[1] == 'resilient-vlc':
|
elif sys.argv[1] == 'resilient-vlc':
|
||||||
resilient_vlc(sys.argv[2:])
|
resilient_vlc(sys.argv[2:])
|
||||||
|
elif sys.argv[1] == 'eternal-firefox':
|
||||||
|
eternal_firefox(
|
||||||
|
profile=sys.argv[2],
|
||||||
|
group_name=sys.argv[3],
|
||||||
|
window_position=json.loads(sys.argv[4]),
|
||||||
|
debug=bool(sys.argv[5]),
|
||||||
|
tabs=sys.argv[6:],
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
except:
|
except:
|
||||||
|
Loading…
Reference in New Issue
Block a user