97 lines
2.6 KiB
Python
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()
|