+class Log:
+
+ def __init__(self, widget, logfile):
+ #Log dialog UI
+ dialog = gtk.Dialog(title='Log', parent=None)
+
+ dialog.set_size_request(600, 350)
+
+ parea = hildon.PannableArea()
+ parea.set_property("mov-mode", hildon.MOVEMENT_MODE_BOTH)
+
+ textview = hildon.TextView()
+ textview.set_property("editable", False)
+ textview.set_property("wrap-mode", gtk.WRAP_WORD)
+
+ log = open(logfile, 'r')
+ logtext = log.read()
+ log.close()
+
+ textview.get_buffer().set_text(logtext)
+ parea.add(textview)
+
+ dialog.vbox.pack_start(parea, True, True, 0)
+
+ hbox = gtk.HBox()
+
+ save_btn = hildon.Button(fhsize, horbtn)
+ save_btn.set_title("Save")
+ save_btn.connect('clicked', self.save, logfile, dialog)
+
+ clear_btn = hildon.Button(fhsize, horbtn)
+ clear_btn.set_title("Clear")
+ clear_btn.connect('clicked', self.clear, textview, logfile)
+
+ send_btn = hildon.Button(fhsize, horbtn)
+ send_btn.set_title('Send')
+ send_btn.connect('clicked', self.send, dialog, logfile)
+
+ hbox.pack_start(save_btn, True, True, 0)
+ hbox.pack_start(clear_btn, True, True, 0)
+ hbox.pack_start(send_btn, True, True, 0)
+
+ dialog.vbox.pack_start(hbox, False, False, 0)
+
+ dialog.show_all()
+ dialog.run()
+ dialog.destroy()
+
+ def show_filechooser(self, window, title, name, EXT):
+ action = gtk.FILE_CHOOSER_ACTION_SAVE
+
+ m = hildon.FileSystemModel()
+ file_dialog = hildon.FileChooserDialog(window, action, m)
+ file_dialog.set_title(title)
+
+ file_dialog.set_current_name(name)
+ HOME = os.path.expanduser("~")
+
+ if os.path.exists(HOME + '/MyDocs/.documents'):
+ file_dialog.set_current_folder(HOME + '/MyDocs/.documents')
+ else:
+ file_dialog.set_current_folder(HOME)
+
+ file_dialog.set_default_response(gtk.RESPONSE_CANCEL)
+
+ result = file_dialog.run()
+ if result == gtk.RESPONSE_OK:
+ namefile = file_dialog.get_filename()
+ namefile, extension = os.path.splitext(namefile)
+ namefile = namefile + "." + EXT
+ else:
+ namefile = None
+ file_dialog.destroy()
+
+ return namefile
+
+
+ def clear(self, widget, textview, logfile):
+ textview.get_buffer().set_text('')
+ f = open(logfile, 'w')
+ f.close()
+
+ def save(self, widget, logfile, dlg):
+ import shutil
+ filename = self.show_filechooser(dlg, "Save log file",
+ "stockthis-log", "txt")
+
+ if not filename:
+ return
+
+ try:
+ shutil.copyfile(logfile, filename)
+ stockspy.show_info_banner(widget, 'Log file saved')
+ except:
+ logger.exception("Saving log file")
+ stockspy.show_info_banner(widget, 'Error saving the log file')
+
+ def send(self, widget, dlg, logfile):
+ import thread
+ hildon.hildon_gtk_window_set_progress_indicator(dlg, 1)
+ thread.start_new_thread(self._do_send, (dlg, logfile))
+
+ def _do_send(self, dlg, logfile):
+ import pycurl, shutil, random, commands
+ try:
+ rname = ''
+ for i in random.sample('abcdefghijkl123456789', 18):
+ rname += i
+
+ rnamepath = HOME + "/.stockthis/" + rname
+ shutil.copyfile(logfile, rnamepath)
+
+ gtkversion = "%s.%s.%s" % gtk.ver
+ if os.path.exists("/etc/maemo_version"):
+ mfile = open("/etc/maemo_version", 'r')
+ maemoversion = mfile.read()
+ mfile.close()
+ else:
+ maemoversion = ''
+
+ opsystem = ' '.join(os.uname())
+ pyversion = os.sys.version
+ pid = os.getpid()
+ comm = ("awk '/Private_Dirty/{sum+=$2}END{print sum \"kB\"}'"
+ " /proc/%s/smaps") % pid
+ status, dirtymem = commands.getstatusoutput(comm)
+
+ lfile = open(rnamepath, 'r')
+ log = lfile.read()
+ lfile.close()
+
+
+ log = ("%s\nPython version: %s\nGtk version: %s\n"
+ "Maemo version: %sOperating system: %s\n"
+ "Dirty Memory: %s\nLog:\n%s") % (_version, pyversion, gtkversion,
+ maemoversion, opsystem, dirtymem, log)
+
+ lfile = open(rnamepath, 'w')
+ lfile.write(log)
+ lfile.close()
+
+ url = "http://yerga.net/logs/uploader.php"
+ data = [('uploadedfile', (pycurl.FORM_FILE, rnamepath)),]
+ mycurl = pycurl.Curl()
+ mycurl.setopt(pycurl.URL, url)
+ mycurl.setopt(pycurl.HTTPPOST, data)
+
+ mycurl.perform()
+ mycurl.close()
+ os.remove(rnamepath)
+
+ gtk.gdk.threads_enter()
+ stockspy.show_info_banner(dlg, 'Log sent')
+ gtk.gdk.threads_leave()
+ hildon.hildon_gtk_window_set_progress_indicator(dlg, 0)
+ except:
+ logger.exception("Sending log file")
+ gtk.gdk.threads_enter()
+ stockspy.show_info_banner(dlg, 'Error sending the log file')
+ gtk.gdk.threads_leave()
+ hildon.hildon_gtk_window_set_progress_indicator(dlg, 0)
+
+