diff --git a/src/dialogs.py b/src/dialogs.py index 74ed2b0f9..8f648dcfe 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -1481,52 +1481,26 @@ class ProgressDialog: in the textview''' self.xml = gtk.glade.XML(GTKGUI_GLADE, 'progress_dialog', APP) self.dialog = self.xml.get_widget('progress_dialog') - self.messages_queue = messages_queue self.label = self.xml.get_widget('label') self.label.set_markup('' + during_text + '') self.progressbar = self.xml.get_widget('progressbar') - self.textview = self.xml.get_widget('textview') - self.textview_buffer = self.textview.get_buffer() - end_iter = self.textview_buffer.get_end_iter() - self.textview_buffer.create_mark('end', end_iter, False) - self.dialog.set_title(title_text) - self.dialog.set_default_size(450, 500) + self.dialog.set_default_size(450, 250) self.dialog.show_all() self.xml.signal_autoconnect(self) self.update_progressbar_timeout_id = gobject.timeout_add(100, self.update_progressbar) - - self.read_from_queue_id = gobject.timeout_add(200, - self.read_from_queue_and_update_textview) - - def update_progressbar(self): - self.progressbar.pulse() - return True # loop forever - - def read_from_queue_and_update_textview(self): - while not self.messages_queue.empty(): - message = self.messages_queue.get() - end_iter = self.textview_buffer.get_end_iter() - self.textview_buffer.insert(end_iter, message + '\n') - self.textview.scroll_to_mark(self.textview_buffer.get_mark('end'), 0, - True, 0, 1) - return True # loop for ever - + def update_progressbar(self): + if self.dialog: + self.progressbar.pulse() + return True # loop forever + return False + def on_progress_dialog_delete_event(self, widget, event): return True # WM's X button or Escape key should not destroy the window - def done(self, done_text): - '''whatever we were doing is done (either we problems or not), - make close button sensitive and show the done_text in label''' - self.xml.get_widget('close_button').set_sensitive(True) - self.label.set_markup('' + done_text + '') - gobject.source_remove(self.update_progressbar_timeout_id) - gobject.source_remove(self.read_from_queue_id) - self.read_from_queue_and_update_textview() - self.progressbar.set_fraction(1) class SoundChooserDialog: def __init__(self, path_to_snd_file = ''): diff --git a/src/gajim.py b/src/gajim.py index 5e3486f85..dc393b90d 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -149,6 +149,19 @@ import config GTKGUI_GLADE = 'gtkgui.glade' +class MigrateCommand(nslookup.IdleCommand): + def __init__(self, on_result): + nslookup.IdleCommand.__init__(self, on_result) + self.commandtimeout = 10 + + def _compose_command_args(self): + return ['python', 'migrate_logs_to_dot9_db.py', 'dont_wait'] + + def _return_result(self): + print self.result + if self.result_handler: + self.result_handler(self.result) + self.result_handler = None class GlibIdleQueue(idlequeue.IdleQueue): ''' @@ -1868,39 +1881,30 @@ if __name__ == '__main__': gtkgui_helpers.possibly_set_gajim_as_xmpp_handler() + # Migrate old logs if we have such olds logs from common import logger LOG_DB_PATH = logger.LOG_DB_PATH if not os.path.exists(LOG_DB_PATH): - from common import migrate_logs_to_dot9_db + import migrate_logs_to_dot9_db if os.path.isdir(migrate_logs_to_dot9_db.PATH_TO_LOGS_BASE_DIR): import Queue q = Queue.Queue(100) - m = migrate_logs_to_dot9_db.Migration() dialog = dialogs.ProgressDialog(_('Migrating Logs...'), _('Please wait while logs are being migrated...'), q) - t = threading.Thread(target = m.migrate, args = (q,)) - t.start() - id = gobject.timeout_add(500, wait_migration, m) - # In 1 seconds, we test if migration began - gobject.timeout_add(1000, test_migration, m) - gtk.main() - if not m.DONE: - # stop test_migration handler - gobject.source_remove(id) - # destroy the migration window + def on_result(*arg): dialog.dialog.destroy() - # Force GTK to really destroy the window - while gtk.events_pending(): - gtk.main_iteration(False) - # We can't use a SQLite object in another thread than the one in - # which it was created, so create a new Migration instance - del m - m = migrate_logs_to_dot9_db.Migration() - m.migrate() - # Init logger values (self.con/cur, jid_already_in) - gajim.logger.init_vars() - check_paths.check_and_possibly_create_paths() - - Interface() - gtk.main() + dialog.dialog = None + gobject.source_remove(dialog.update_progressbar_timeout_id) + gajim.logger.init_vars() + check_paths.check_and_possibly_create_paths() + Interface() + m = MigrateCommand(on_result) + m.set_idlequeue(GlibIdleQueue()) + m.start() + gtk.main() + else: + check_paths.check_and_possibly_create_paths() + Interface() + gtk.main() + diff --git a/src/gtkgui.glade b/src/gtkgui.glade index de26dc9eb..4bf464a78 100644 --- a/src/gtkgui.glade +++ b/src/gtkgui.glade @@ -18062,42 +18062,6 @@ Maybe I'll refactor later - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - False - True - GTK_JUSTIFY_LEFT - GTK_WRAP_NONE - True - 0 - 0 - 0 - 0 - 0 - 0 - - - - - - 0 - True - True - - - True diff --git a/src/common/migrate_logs_to_dot9_db.py b/src/migrate_logs_to_dot9_db.py similarity index 90% rename from src/common/migrate_logs_to_dot9_db.py rename to src/migrate_logs_to_dot9_db.py index beb893884..94281cd4d 100755 --- a/src/common/migrate_logs_to_dot9_db.py +++ b/src/migrate_logs_to_dot9_db.py @@ -27,10 +27,15 @@ import sre import sys import time import signal -import logger -import i18n +from common import logger +from common import i18n + _ = i18n._ -from helpers import from_one_line, decode_string +try: + PREFERRED_ENCODING = sys.getpreferredencoding() +except: + PREFERRED_ENCODING = 'utf-8' +from common.helpers import from_one_line, decode_string signal.signal(signal.SIGINT, signal.SIG_DFL) # ^C exits the application @@ -48,6 +53,8 @@ else: PATH_TO_LOGS_BASE_DIR = os.path.expanduser('~/.gajim/logs') PATH_TO_DB = os.path.expanduser('~/.gajim/logs.db') # database is called logs.db + + class Migration: def __init__(self): self.constants = logger.Constants() @@ -115,11 +122,11 @@ class Migration: jid_type = self.constants.JID_NORMAL_TYPE #Type of log typ = _('normal') - s = _('Processing %s of type %s') % (jid.encode('utf-8'), typ) + s = _('Processing %s of type %s') % (jid, typ) if self.queue: - self.queue.put(s) + self.queue.put(s.encode(PREFERRED_ENCODING)) else: - print s + print s.encode(PREFERRED_ENCODING) JID_ID = None f = open(path_to_text_file, 'r') @@ -243,12 +250,14 @@ Thank you''' % (os.path.dirname(PATH_TO_LOGS_BASE_DIR), PATH_TO_LOGS_BASE_DIR) self.DONE = True if __name__ == '__main__': - print 'IMPORTNANT: PLEASE READ http://trac.gajim.org/wiki/MigrateLogToDot9DB' - print 'Migration will start in 40 seconds unless you press Ctrl+C' - time.sleep(40) # give the user time to act - print - print 'Starting Logs Migration' - print '=======================' - print 'Please do NOT run Gajim until this script is over' + # magic argumen 'dont_wait' tells us that script is run from Gajim + if len(sys.argv) < 2 or sys.argv[1] != 'dont_wait': + print 'IMPORTNANT: PLEASE READ http://trac.gajim.org/wiki/MigrateLogToDot9DB' + print 'Migration will start in 40 seconds unless you press Ctrl+C' + time.sleep(40) # give the user time to act + print + print 'Starting Logs Migration' + print '=======================' + print 'Please do NOT run Gajim until this script is over' m = Migration() m.migrate()