commit 188ae06e9a1f99608388c24d0343a448d8c0679d Author: Josh Sherman Date: Sun Aug 28 13:24:32 2011 -0400 Hack and slack, first commit. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7b8fa86 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +Buggy as hell, embarassingly incomplete, proof of concept more than anything. + +I urge you to fork and improve. diff --git a/u1transfers.py b/u1transfers.py new file mode 100755 index 0000000..66384dd --- /dev/null +++ b/u1transfers.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python + +import threading +import time +import gobject +import gtk +import subprocess +import re +import md5 + +gobject.threads_init() + +class MyThread(threading.Thread): + def __init__(self, vbox): + super(MyThread, self).__init__() + self.vbox = vbox + self.quit = False + self.files = {} + + def update_label(self, counter): + transfers = subprocess.check_output(["u1sdtool", "--current-transfers"]) + transfers = transfers.split("\n"); + + for line in transfers: + if re.match("Current uploads:", line) != None: + transfer_type = 'Uploading' + elif re.match("Current downloads:", line) != None: + transfer_type = 'Downloading' + else: + if re.match(" path: ", line) != None: + transfer_file = line.replace(" path: ", "") + elif re.match(" deflated size: ", line) != None: + total = line.replace(" deflated size: ", "") + elif re.match(" bytes written: ", line) != None: + transferred = line.replace(" bytes written: ", "") + + complete = int((float(transferred) / float(total)) * 100) + + m = md5.new() + m.update(transfer_file) + file_hash = m.digest() + + if file_hash not in self.files: + label = gtk.Label(transfer_file) + label.set_justify(gtk.JUSTIFY_LEFT) + self.vbox.pack_end(label, True, True, 2) + label.show() + + self.files[file_hash] = label + + if complete < 100: + self.files[file_hash].set_text("[" + str(complete) + "%] " + transfer_type + " " + transfer_file) + else: + self.files[file_hash].destroy() + + return False + + def run(self): + counter = 0 + while not self.quit: + counter += 1 + gobject.idle_add(self.update_label, counter) + time.sleep(5) + +w = gtk.Window() +w.set_title("Ubuntu One Active Transfers") +w.set_border_width(0) +w.set_size_request(800, 300) + +v = gtk.VBox(False, 0) +w.add(v) +v.show() + +w.show_all() +w.connect("destroy", lambda _: gtk.main_quit()) +t = MyThread(v) +t.start() + +gtk.main() +t.quit = True