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()