[~] 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