#!/usr/bin/env python import gtk import pygtk import time import sys from daemon import Daemon from subprocess import call from random import choice from string import ascii_letters, digits from os import listdir as ls, rename from os.path import exists, isfile, join, splitext pygtk.require('2.0') # Config SSH_PORT = 1337 PATH = "/home/ian/Dropbox/projects/files/screenshots" BASE_URL = "http://files.ianonavy.com/" SCP_PATH = "vpn.ianonavy.com:sites/ianonavy.com/files" WAIT_INTERVAL = 1 class FilesDaemon(Daemon): def run(self): """ Constantly loops checking for a new file. It's not very efficient, but it gets the job done. """ print "Loading list of all files..." # Get list of all files. files = [f for f in ls(PATH) if isfile(join(PATH, f))] print "Done! Waiting for some new files." while 1: for f in ls(PATH): filename = join(PATH, f) # Get the full file path. if isfile(filename): if f not in files: #print f, files base, extension = splitext(f) new_filename = self.random_filename(extension=extension) rename(filename, join(PATH, new_filename)) files.append(new_filename) self.upload(join(PATH, new_filename)) image_url = "%s%s" % (BASE_URL, new_filename) self.copy_to_clipboard(image_url) time.sleep(WAIT_INTERVAL) def upload(self, filename): """ Uploads a file to the remote host. """ print "scp -P %d %s %s" % (SSH_PORT, filename, SCP_PATH) call("scp -P %d %s %s" % (SSH_PORT, filename, SCP_PATH), shell=True) def copy_to_clipboard(self, text): """ Copies the passed argument to the clipboard. """ clipboard = gtk.clipboard_get() clipboard.set_text(text) clipboard.store() # Let other programs use it. def random_filename(self, length=4, extension='', attempts=10): """ Generates a random filename and verifies that it doesn't exist. """ chars = ''.join([ascii_letters, digits]) for attempt in range(attempts): filename = ''.join([choice(chars) for i in range(length)]) filename = filename + extension if not exists(filename): return filename if __name__ == "__main__": daemon = FilesDaemon('/tmp/filesd.pid') if len(sys.argv) == 2: if 'start' == sys.argv[1]: daemon.start() elif 'stop' == sys.argv[1]: daemon.stop() elif 'restart' == sys.argv[1]: daemon.restart() else: print "Unknown command" sys.exit(2) sys.exit(0) else: print "usage: %s {start|stop|restart}" % sys.argv[0] sys.exit(2)