Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/rpms/sugar/0020-Journal-XS-backup-and-restore.patch
diff options
context:
space:
mode:
Diffstat (limited to 'rpms/sugar/0020-Journal-XS-backup-and-restore.patch')
-rw-r--r--rpms/sugar/0020-Journal-XS-backup-and-restore.patch213
1 files changed, 213 insertions, 0 deletions
diff --git a/rpms/sugar/0020-Journal-XS-backup-and-restore.patch b/rpms/sugar/0020-Journal-XS-backup-and-restore.patch
new file mode 100644
index 0000000..9d253ee
--- /dev/null
+++ b/rpms/sugar/0020-Journal-XS-backup-and-restore.patch
@@ -0,0 +1,213 @@
+From b7560ab35c80232c3c5b223207e5f4a4259f24b5 Mon Sep 17 00:00:00 2001
+From: Martin Abente <mabente@paraguayeduca.org>
+Date: Wed, 23 Jun 2010 17:12:59 -0400
+Subject: [PATCH sugar 20/74] 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.
+---
+ src/jarabe/desktop/favoritesview.py | 2 +
+ src/jarabe/journal/processdialog.py | 30 ++++++++++++++++++++++++
+ src/jarabe/journal/volumestoolbar.py | 39 +++++++++++++++++++++++++++++--
+ src/jarabe/view/palettes.py | 41 +++++++++++++++++++++++++++++++++-
+ 4 files changed, 108 insertions(+), 4 deletions(-)
+
+diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py
+index 132d14f..75795cd 100644
+--- a/src/jarabe/desktop/favoritesview.py
++++ b/src/jarabe/desktop/favoritesview.py
+@@ -41,6 +41,7 @@
+ from jarabe.model.buddy import get_owner_instance
+ 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
+@@ -342,6 +343,7 @@ def __register_activate_cb(self, icon):
+ alert.props.msg = _('You are now registered ' \
+ 'with your school server.')
+ self._my_icon.set_registered()
++ 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 @@ def _resetup_information(self, volume_path):
+ 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 48e25ec..1356099 100644
+--- a/src/jarabe/journal/volumestoolbar.py
++++ b/src/jarabe/journal/volumestoolbar.py
+@@ -30,13 +30,15 @@
+ import tempfile
+ import shutil
+
++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 sugar import env
+
+ from jarabe.journal import model
+-from jarabe.view.palettes import JournalVolumePalette
++from jarabe.view.palettes import JournalVolumePalette, JournalXSPalette
+
+
+ _JOURNAL_0_METADATA_DIR = '.olpc.store'
+@@ -182,6 +184,7 @@ def __init__(self):
+
+ self.connect('destroy', self.__destroy_cb)
+
++ self.setup_xs_button()
+ gobject.idle_add(self._set_up_volumes)
+
+ def __destroy_cb(self, widget):
+@@ -189,6 +192,21 @@ def __destroy_cb(self, widget):
+ 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):
+ self._set_up_documents_button()
+
+@@ -260,8 +278,9 @@ def __unmount_cb(self, source, result):
+ 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
+
+@@ -402,3 +421,17 @@ def __init__(self, documents_path):
+ client = gconf.client_get_default()
+ 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 a9e3629..02648b7 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.i18n import pgettext
+
+-from jarabe.journal.processdialog import VolumeBackupDialog, VolumeRestoreDialog
++from jarabe.journal.processdialog import VolumeBackupDialog, VolumeRestoreDialog, XSBackupDialog, XSRestoreDialog
+ from jarabe.model import shell
+ from jarabe.view.viewsource import setup_view_source
+ from jarabe.journal import misc
+@@ -297,3 +297,42 @@ def __journal_backup_activate_cb(self, menu_item, mount_path):
+ def __journal_restore_activate_cb(self, menu_item, mount_path):
+ 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()
+--
+1.7.6
+