Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Abente <mabente@paraguayeduca.org>2010-06-23 21:12:59 (GMT)
committer Sascha Silbe <sascha-pgp@silbe.org>2010-11-01 16:52:17 (GMT)
commit67f22dbdb7ec45659d8e1799acfab379ad9f893e (patch)
treed757f3769118e8a7c5e9b18d81be86a357a9bc9c
parent940eb54bf1eac76c56cbd1a27b1c40335efbbab4 (diff)
Journal XS backup and restore
Include a new journal volumes toolbar icon. The icon represents the schoolserver. The icon palette provides a backup and restore options.
-rw-r--r--src/jarabe/desktop/favoritesview.py2
-rw-r--r--src/jarabe/journal/processdialog.py30
-rw-r--r--src/jarabe/journal/volumestoolbar.py37
-rw-r--r--src/jarabe/view/palettes.py39
4 files changed, 104 insertions, 4 deletions
diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py
index aca945a..a311b52 100644
--- a/src/jarabe/desktop/favoritesview.py
+++ b/src/jarabe/desktop/favoritesview.py
@@ -42,6 +42,7 @@ from jarabe.view import launcher
from jarabe.model.buddy import BuddyModel
from jarabe.model import shell
from jarabe.model import bundleregistry
+from jarabe.journal.journalactivity import get_journal
from jarabe.journal import misc
from jarabe.desktop import schoolserver
@@ -328,6 +329,7 @@ class FavoritesView(hippo.Canvas):
alert.props.msg = _('You are now registered ' \
'with your school server.')
self._my_icon.remove_register_menu()
+ get_journal()._volumes_toolbar.setup_xs_button()
ok_icon = Icon(icon_name='dialog-ok')
alert.add_button(gtk.RESPONSE_OK, _('Ok'), ok_icon)
diff --git a/src/jarabe/journal/processdialog.py b/src/jarabe/journal/processdialog.py
index b96abd9..08c6d11 100644
--- a/src/jarabe/journal/processdialog.py
+++ b/src/jarabe/journal/processdialog.py
@@ -246,3 +246,33 @@ class VolumeRestoreDialog(ProcessDialog):
self._message.set_markup('%s %s.\n\n' % (_('Journal content will be restored from'), volume_path) + \
'<big><b>%s</b> %s</big>' % (_('Warning:'), _('Current Journal content will be deleted!')))
+class XSBackupDialog(ProcessDialog):
+
+ def __init__(self, xs_hostname):
+ ProcessDialog.__init__(self, 'journal-backup')
+ self._resetup_information(xs_hostname)
+
+ def _resetup_information(self, xs_hostname):
+ self._start_message = '%s %s.' % (_('Please wait, saving Journal content to'), xs_hostname)
+
+ self._finished_message = _('The journal content has been saved.')
+
+ self._title.set_markup('<big><b>%s</b></big>' % _('Backup'))
+
+ self._message.set_text('%s %s.' % (_('Journal content will be saved to'), xs_hostname))
+
+class XSRestoreDialog(ProcessDialog):
+
+ def __init__(self, xs_hostname):
+ ProcessDialog.__init__(self, 'journal-restore')
+ self._resetup_information(xs_hostname)
+
+ def _resetup_information(self, xs_hostname):
+ self._start_message = '%s %s.' % (_('Please wait, restoring journal content from'), xs_hostname)
+
+ self._finished_message = _('The journal content has been restored.')
+
+ self._title.set_markup('<big><b>%s</b></big>' % _('Restore'))
+
+ self._message.set_text('%s %s.' % (_('Journal content will be restored from'), xs_hostname))
+
diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py
index 84aeafa..f019687 100644
--- a/src/jarabe/journal/volumestoolbar.py
+++ b/src/jarabe/journal/volumestoolbar.py
@@ -22,12 +22,14 @@ import gio
import gtk
import gconf
+from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.radiotoolbutton import RadioToolButton
+from sugar.graphics.icon import Icon
from sugar.graphics.palette import Palette
from sugar.graphics.xocolor import XoColor
from jarabe.journal import model
-from jarabe.view.palettes import JournalVolumePalette
+from jarabe.view.palettes import JournalVolumePalette, JournalXSPalette
class VolumesToolbar(gtk.Toolbar):
__gtype_name__ = 'VolumesToolbar'
@@ -55,6 +57,7 @@ class VolumesToolbar(gtk.Toolbar):
self.connect('destroy', self.__destroy_cb)
+ self.setup_xs_button()
gobject.idle_add(self._set_up_volumes)
def __destroy_cb(self, widget):
@@ -62,6 +65,21 @@ class VolumesToolbar(gtk.Toolbar):
volume_monitor.disconnect(self._mount_added_hid)
volume_monitor.disconnect(self._mount_removed_hid)
+ def setup_xs_button(self):
+ client = gconf.client_get_default()
+ backup_url = client.get_string('/desktop/sugar/backup_url')
+
+ if backup_url:
+ xs_button = XSButton()
+ xs_button.set_palette(JournalXSPalette(backup_url))
+ #xs_button.props.group = self._volume_buttons[0]
+ xs_button.show()
+
+ self._volume_buttons.append(xs_button)
+ position = len(self._volume_buttons) - 1
+ self.insert(xs_button, position)
+ self.show()
+
def _set_up_volumes(self):
volume_monitor = gio.volume_monitor_get()
self._mount_added_hid = \
@@ -111,8 +129,9 @@ class VolumesToolbar(gtk.Toolbar):
def _get_button_for_mount(self, mount):
mount_point = mount.get_root().get_path()
for button in self.get_children():
- if button.mount_point == mount_point:
- return button
+ if type(button) == VolumeButton and \
+ button.mount_point == mount_point:
+ return button
logging.error('Couldnt find button with mount_point %r', mount_point)
return None
@@ -200,3 +219,15 @@ class JournalButton(BaseButton):
color = XoColor(client.get_string('/desktop/sugar/user/color'))
self.props.xo_color = color
+class XSButton(ToolButton):
+ def __init__(self):
+ ToolButton.__init__(self)
+ self.set_icon('school-server')
+
+ def set_icon(self, icon_name):
+ client = gconf.client_get_default()
+ color = XoColor(client.get_string('/desktop/sugar/user/color'))
+ icon = Icon(icon_name=icon_name, xo_color=color, icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR)
+ icon.show()
+
+ self.set_icon_widget(icon)
diff --git a/src/jarabe/view/palettes.py b/src/jarabe/view/palettes.py
index 2fc4d5f..51c40f1 100644
--- a/src/jarabe/view/palettes.py
+++ b/src/jarabe/view/palettes.py
@@ -33,7 +33,7 @@ from sugar.graphics.xocolor import XoColor
from sugar.activity import activityfactory
from sugar.activity.activityhandle import ActivityHandle
-from jarabe.journal.processdialog import VolumeBackupDialog, VolumeRestoreDialog
+from jarabe.journal.processdialog import VolumeBackupDialog, VolumeRestoreDialog, XSBackupDialog, XSRestoreDialog
from jarabe.model import shell
from jarabe.view import launcher
from jarabe.view.viewsource import setup_view_source
@@ -302,3 +302,40 @@ class JournalVolumePalette(VolumePalette):
dialog = VolumeRestoreDialog(mount_path)
dialog.show()
+class JournalXSPalette(Palette):
+ def __init__(self, xs_hostname):
+ Palette.__init__(self, _('School Server'))
+
+ self.props.secondary_text = xs_hostname
+
+ vbox = gtk.VBox()
+ self.set_content(vbox)
+ vbox.show()
+
+ icon = Icon(icon_name='transfer-to', icon_size=gtk.ICON_SIZE_MENU)
+ icon.show()
+
+ menu_item_journal_backup = MenuItem(_('Backup Journal'))
+ menu_item_journal_backup.set_image(icon)
+ menu_item_journal_backup.connect('activate', self.__journal_backup_activate_cb, xs_hostname)
+ menu_item_journal_backup.show()
+
+ self.menu.append(menu_item_journal_backup)
+
+ icon = Icon(icon_name='transfer-from', icon_size=gtk.ICON_SIZE_MENU)
+ icon.show()
+
+ menu_item_journal_restore = MenuItem(_('Restore Journal'))
+ menu_item_journal_restore.set_image(icon)
+ menu_item_journal_restore.connect('activate', self.__journal_restore_activate_cb, xs_hostname)
+ menu_item_journal_restore.show()
+
+ self.menu.append(menu_item_journal_restore)
+
+ def __journal_backup_activate_cb(self, menu_item, xs_hostname):
+ dialog = XSBackupDialog(xs_hostname)
+ dialog.show()
+
+ def __journal_restore_activate_cb(self, menu_item, xs_hostname):
+ dialog = XSRestoreDialog(xs_hostname)
+ dialog.show()