Cornea/src/utils/CrossClassSignals.py

97 lines
2.6 KiB
Python

# Gtk imports
from gi.repository import GLib as glib
# Python imports
import os, threading, time, datetime
import pyscreenshot as capture
# Application imports
def threaded(fn):
def wrapper(*args, **kwargs):
threading.Thread(target=fn, args=args, kwargs=kwargs).start()
return wrapper
class CrossClassSignals:
def __init__(self, settings):
self.settings = settings
self.builder = self.settings.returnBuilder()
self.SCREENSHOTS_DIR = self.settings.returnScreenshotsDir()
self.fileStore = self.builder.get_object("fileStore")
self.refreshingState = False
def returnRefreshingState(self):
return self.refreshingState
def setRefreshingState(self, state):
self.refreshingState = state
@threaded
def refereshDirectoryList(self):
self.refreshingState = True
images = self.returnDirectoryList()
images.sort()
if len(images) != len(self.fileStore):
self.fileStore.clear()
for image in images:
glib.idle_add(self.addToStore, (image))
# self.fileStore.sort()
self.refreshingState = False
@threaded
def addToStore(self, image):
self.fileStore.append([image])
def returnDirectoryList(self):
files = []
for file in os.listdir(self.SCREENSHOTS_DIR):
if os.path.isfile(os.path.join(self.SCREENSHOTS_DIR, file)):
files.append(file)
return files
def boundingBoxGrab(self, x1, y1, x2, y2):
# childprocess=False needed to not crash program
im = capture.grab(bbox=(x1, y1, x2, y2), childprocess=False)
im.save(self.generateScreenshotName())
def generateScreenshotName(self):
return self.SCREENSHOTS_DIR + '/scrshot_' + self.getTime() + '.png'
def getTime(self):
now = datetime.datetime.now()
return now.strftime("%Y-%m-%d %H:%M:%S")
def sleep(self, wait=None):
delayAmount = self.builder.get_object("delayAmount")
if not wait:
wait = delayAmount.get_value_as_int()
time.sleep(wait)
def getClipboardData(self):
proc = subprocess.Popen(['xclip','-selection', 'clipboard', '-o'], stdout=subprocess.PIPE)
retcode = proc.wait()
data = proc.stdout.read()
return data.decode("utf-8").strip()
def setClipboardData(self, data):
proc = subprocess.Popen(['xclip','-selection','clipboard'], stdin=subprocess.PIPE)
proc.stdin.write(data)
proc.stdin.close()
retcode = proc.wait()
def close(self, widget):
gtk.main_quit()