auto away - windows
This commit is contained in:
		
							parent
							
								
									6613744ba9
								
							
						
					
					
						commit
						09a9578b2b
					
				
					 2 changed files with 110 additions and 0 deletions
				
			
		
							
								
								
									
										109
									
								
								AutoAwayStatusWindows/awayw.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								AutoAwayStatusWindows/awayw.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,109 @@ | ||||||
|  | import plugin_super_class | ||||||
|  | import threading | ||||||
|  | import time | ||||||
|  | from PySide import QtCore, QtGui | ||||||
|  | from ctypes import Structure, windll, c_uint, sizeof, byref | ||||||
|  | import json | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class LASTINPUTINFO(Structure): | ||||||
|  |     _fields_ = [('cbSize', c_uint), ('dwTime', c_uint)] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_idle_duration(): | ||||||
|  |     lastInputInfo = LASTINPUTINFO() | ||||||
|  |     lastInputInfo.cbSize = sizeof(lastInputInfo) | ||||||
|  |     windll.user32.GetLastInputInfo(byref(lastInputInfo)) | ||||||
|  |     millis = windll.kernel32.GetTickCount() - lastInputInfo.dwTime | ||||||
|  |     return millis / 1000.0 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class InvokeEvent(QtCore.QEvent): | ||||||
|  |     EVENT_TYPE = QtCore.QEvent.Type(QtCore.QEvent.registerEventType()) | ||||||
|  | 
 | ||||||
|  |     def __init__(self, fn, *args, **kwargs): | ||||||
|  |         QtCore.QEvent.__init__(self, InvokeEvent.EVENT_TYPE) | ||||||
|  |         self.fn = fn | ||||||
|  |         self.args = args | ||||||
|  |         self.kwargs = kwargs | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Invoker(QtCore.QObject): | ||||||
|  | 
 | ||||||
|  |     def event(self, event): | ||||||
|  |         event.fn(*event.args, **event.kwargs) | ||||||
|  |         return True | ||||||
|  | 
 | ||||||
|  | _invoker = Invoker() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def invoke_in_main_thread(fn, *args, **kwargs): | ||||||
|  |     QtCore.QCoreApplication.postEvent(_invoker, InvokeEvent(fn, *args, **kwargs)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class AutoAwayStatusWindows(plugin_super_class.PluginSuperClass): | ||||||
|  | 
 | ||||||
|  |     def __init__(self, *args): | ||||||
|  |         super().__init__('AutoAwayStatusWindows', 'awayw', *args) | ||||||
|  |         self._thread = None | ||||||
|  |         self._exec = None | ||||||
|  |         self._active = False | ||||||
|  |         self._time = json.loads(self.load_settings())['time'] | ||||||
|  | 
 | ||||||
|  |     def close(self): | ||||||
|  |         self.stop() | ||||||
|  | 
 | ||||||
|  |     def stop(self): | ||||||
|  |         self._exec = False | ||||||
|  |         if self._active: | ||||||
|  |             self._thread.join() | ||||||
|  | 
 | ||||||
|  |     def start(self): | ||||||
|  |         self._exec = True | ||||||
|  |         self._thread = threading.Thread(target=self.loop) | ||||||
|  |         self._thread.start() | ||||||
|  | 
 | ||||||
|  |     def save(self): | ||||||
|  |         self.save_settings('{"time": ' + str(self._time) + '}') | ||||||
|  | 
 | ||||||
|  |     def change_status(self): | ||||||
|  |         invoke_in_main_thread(self._profile.set_status, 1) | ||||||
|  | 
 | ||||||
|  |     def get_window(self): | ||||||
|  |         inst = self | ||||||
|  | 
 | ||||||
|  |         class Window(QtGui.QWidget): | ||||||
|  |             def __init__(self): | ||||||
|  |                 super(Window, self).__init__() | ||||||
|  |                 self.setGeometry(QtCore.QRect(450, 300, 350, 100)) | ||||||
|  |                 self.label = QtGui.QLabel(self) | ||||||
|  |                 self.label.setGeometry(QtCore.QRect(20, 0, 310, 35)) | ||||||
|  |                 self.label.setText(QtGui.QApplication.translate("AutoAwayStatusWindows", "Auto away time in minutes\n(0 - to disable)", None, QtGui.QApplication.UnicodeUTF8)) | ||||||
|  |                 self.time = QtGui.QLineEdit(self) | ||||||
|  |                 self.time.setGeometry(QtCore.QRect(20, 40, 310, 25)) | ||||||
|  |                 self.time.setText(str(inst._time)) | ||||||
|  |                 self.setWindowTitle("AutoAwayStatusWindows") | ||||||
|  |                 self.ok = QtGui.QPushButton(self) | ||||||
|  |                 self.ok.setGeometry(QtCore.QRect(20, 70, 310, 25)) | ||||||
|  |                 self.ok.setText( | ||||||
|  |                     QtGui.QApplication.translate("AutoAwayStatusWindows", "Save", None, QtGui.QApplication.UnicodeUTF8)) | ||||||
|  |                 self.ok.clicked.connect(self.update) | ||||||
|  | 
 | ||||||
|  |             def update(self): | ||||||
|  |                 try: | ||||||
|  |                     t = int(self.time.text()) | ||||||
|  |                 except: | ||||||
|  |                     t = 0 | ||||||
|  |                 inst._time = t | ||||||
|  |                 inst.save() | ||||||
|  |                 self.close() | ||||||
|  | 
 | ||||||
|  |         return Window() | ||||||
|  | 
 | ||||||
|  |     def loop(self): | ||||||
|  |         self._active = True | ||||||
|  |         while self._exec: | ||||||
|  |             time.sleep(30) | ||||||
|  |             d = get_idle_duration() | ||||||
|  |             if self._time and d > 60 * self._time: | ||||||
|  |                 self.change_status() | ||||||
							
								
								
									
										1
									
								
								AutoAwayStatusWindows/awayw/settings.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								AutoAwayStatusWindows/awayw/settings.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | {"time": 5} | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 ingvar1995
						ingvar1995