80 lines
1.9 KiB
Python
Executable file
80 lines
1.9 KiB
Python
Executable file
#!/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
|