diff options
author | Ajay Garg <ajay@activitycentral.com> | 2012-09-18 07:56:52 (GMT) |
---|---|---|
committer | Ajay Garg <ajay@activitycentral.com> | 2012-09-18 07:56:52 (GMT) |
commit | 5c908a8b278f076ef9720b6ae6d1e5d48d7647e4 (patch) | |
tree | 175b3754ecba3742c197aad4d3bb461c497483ae | |
parent | 5cb448cb2d4ea2c029ce3bbe36d3a57581cc1e48 (diff) |
sdxo#2332: Now, School-Server icon is shown, only when its IP-Address/DNS-Name is actually configured.
-rw-r--r-- | rpms/sugar/0130-1-to-N-feature-via-School-Server.patch | 103 |
1 files changed, 55 insertions, 48 deletions
diff --git a/rpms/sugar/0130-1-to-N-feature-via-School-Server.patch b/rpms/sugar/0130-1-to-N-feature-via-School-Server.patch index 81cd2f8..08ff4a6 100644 --- a/rpms/sugar/0130-1-to-N-feature-via-School-Server.patch +++ b/rpms/sugar/0130-1-to-N-feature-via-School-Server.patch @@ -1,6 +1,6 @@ -From d56362d85ecd6ce9921a67c2f4252d01c26a71af Mon Sep 17 00:00:00 2001 +From f1fd1f92fb52f0ba81c62caa90a4269d99dac938 Mon Sep 17 00:00:00 2001 From: Ajay Garg <ajay@activitycentral.com> -Date: Tue, 4 Sep 2012 18:16:19 +0530 +Date: Tue, 18 Sep 2012 13:23:31 +0530 Subject: [sugar PATCH] 1-to-N-feature via Peer-to-Peer mechanism; and Via-School-Server mechanism. Organization: Sugar Labs Foundation Signed-off-by: Ajay Garg <ajay@activitycentral.com> @@ -11,16 +11,16 @@ Signed-off-by: Ajay Garg <ajay@activitycentral.com> src/jarabe/journal/expandedentry.py | 24 ++- src/jarabe/journal/journalactivity.py | 17 ++- src/jarabe/journal/journaltoolbox.py | 44 ++++- - src/jarabe/journal/model.py | 375 ++++++++++++++++++++++----------- - src/jarabe/journal/palettes.py | 283 ++++++++++++++++++++++--- - src/jarabe/journal/volumestoolbar.py | 92 ++++++--- + src/jarabe/journal/model.py | 379 +++++++++++++++++++++++---------- + src/jarabe/journal/palettes.py | 284 ++++++++++++++++++++++--- + src/jarabe/journal/volumestoolbar.py | 94 ++++++--- src/jarabe/journal/webdavmanager.py | 172 ++++++++++----- src/jarabe/view/buddymenu.py | 45 ++++- src/jarabe/view/palettes.py | 38 ++-- src/webdav/Connection.py | 11 +- src/webdav/WebdavClient.py | 16 +- src/webdav/davlib.py | 9 +- - 15 files changed, 867 insertions(+), 279 deletions(-) + 15 files changed, 874 insertions(+), 279 deletions(-) diff --git a/src/jarabe/frame/activitiestray.py b/src/jarabe/frame/activitiestray.py index 55e0c31..7cbeefb 100644 @@ -255,7 +255,7 @@ index 6b2494e..b1c0cac 100644 return self._selected_entries diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py -index 422e947..c06b2ee 100644 +index 422e947..7756f5c 100644 --- a/src/jarabe/journal/model.py +++ b/src/jarabe/journal/model.py @@ -43,7 +43,7 @@ from sugar import dispatch @@ -277,7 +277,7 @@ index 422e947..c06b2ee 100644 JOURNAL_METADATA_DIR = '.Sugar-Metadata' _datastore = None -@@ -66,6 +69,52 @@ updated = dispatch.Signal() +@@ -66,6 +69,56 @@ updated = dispatch.Signal() deleted = dispatch.Signal() @@ -285,7 +285,11 @@ index 422e947..c06b2ee 100644 + '/desktop/sugar/network/school_server_ip_address_or_dns_name' + +client = gconf.client_get_default() -+SCHOOL_SERVER_IP_ADDRESS_OR_DNS_NAME = client.get_string(SCHOOL_SERVER_IP_ADDRESS_OR_DNS_NAME_PATH) or '127.0.0.1' ++SCHOOL_SERVER_IP_ADDRESS_OR_DNS_NAME = client.get_string(SCHOOL_SERVER_IP_ADDRESS_OR_DNS_NAME_PATH) ++ ++ ++def is_school_server_present(): ++ return not (SCHOOL_SERVER_IP_ADDRESS_OR_DNS_NAME is None) + + +def _get_mount_point(path): @@ -330,7 +334,7 @@ index 422e947..c06b2ee 100644 class _Cache(object): __gtype_name__ = 'model_Cache' -@@ -430,8 +479,8 @@ class InplaceResultSet(BaseResultSet): +@@ -430,8 +483,8 @@ class InplaceResultSet(BaseResultSet): class RemoteShareResultSet(object): @@ -341,7 +345,7 @@ index 422e947..c06b2ee 100644 self._file_list = [] self.ready = dispatch.Signal() -@@ -464,7 +513,11 @@ class RemoteShareResultSet(object): +@@ -464,7 +517,11 @@ class RemoteShareResultSet(object): self._sort = query.get('order_by', ['+timestamp'])[0] def setup(self): @@ -354,7 +358,7 @@ index 422e947..c06b2ee 100644 for metadata in metadata_list_complete: add_to_list = False -@@ -553,15 +606,8 @@ def _get_file_metadata(path, stat, fetch_preview=True): +@@ -553,15 +610,8 @@ def _get_file_metadata(path, stat, fetch_preview=True): metadata based on the file properties. """ @@ -371,7 +375,7 @@ index 422e947..c06b2ee 100644 if 'filesize' not in metadata: if stat is not None: metadata['filesize'] = stat.st_size -@@ -582,17 +628,26 @@ def _get_file_metadata(path, stat, fetch_preview=True): +@@ -582,17 +632,26 @@ def _get_file_metadata(path, stat, fetch_preview=True): 'description': path} @@ -401,7 +405,7 @@ index 422e947..c06b2ee 100644 filename + '.preview') if not os.path.exists(metadata_path): -@@ -670,7 +725,8 @@ def find(query_, page_size): +@@ -670,7 +729,8 @@ def find(query_, page_size): Regex Matching is used, to ensure that the mount-point is an IP-Address. """ @@ -411,7 +415,7 @@ index 422e947..c06b2ee 100644 else: """ For Documents/Shares/Mounted-Drives. -@@ -678,56 +734,13 @@ def find(query_, page_size): +@@ -678,56 +738,13 @@ def find(query_, page_size): return InplaceResultSet(query, page_size, mount_points[0]) @@ -468,7 +472,7 @@ index 422e947..c06b2ee 100644 stat = None metadata = _get_file_metadata(object_id, stat) -@@ -812,7 +825,21 @@ def delete(object_id): +@@ -812,7 +829,21 @@ def delete(object_id): def copy(metadata, mount_point): """Copies an object to another mount point """ @@ -490,7 +494,7 @@ index 422e947..c06b2ee 100644 if mount_point == '/' and metadata['icon-color'] == '#000000,#ffffff': client = gconf.client_get_default() metadata['icon-color'] = client.get_string('/desktop/sugar/user/color') -@@ -823,7 +850,7 @@ def copy(metadata, mount_point): +@@ -823,7 +854,7 @@ def copy(metadata, mount_point): metadata['mountpoint'] = mount_point del metadata['uid'] @@ -499,7 +503,7 @@ index 422e947..c06b2ee 100644 def write(metadata, file_path='', update_mtime=True, transfer_ownership=True): -@@ -845,27 +872,105 @@ def write(metadata, file_path='', update_mtime=True, transfer_ownership=True): +@@ -845,27 +876,105 @@ def write(metadata, file_path='', update_mtime=True, transfer_ownership=True): object_id = _get_datastore().create(dbus.Dictionary(metadata), file_path, transfer_ownership) @@ -616,7 +620,7 @@ index 422e947..c06b2ee 100644 old_fname + '.preview')] for ofile in old_files: if os.path.exists(ofile): -@@ -876,41 +981,32 @@ def _rename_entry_on_external_device(file_path, destination_path, +@@ -876,41 +985,32 @@ def _rename_entry_on_external_device(file_path, destination_path, 'for file=%s', ofile, old_fname) @@ -680,7 +684,7 @@ index 422e947..c06b2ee 100644 metadata_dir_path = os.path.join(metadata['mountpoint'], JOURNAL_METADATA_DIR) -@@ -939,25 +1035,64 @@ def _write_entry_on_external_device(metadata, file_path): +@@ -939,25 +1039,64 @@ def _write_entry_on_external_device(metadata, file_path): os.close(fh) os.rename(fn, os.path.join(metadata_dir_path, preview_fname)) @@ -695,6 +699,14 @@ index 422e947..c06b2ee 100644 - _rename_entry_on_external_device(file_path, destination_path, - metadata_dir_path) + preview_destination_path = None ++ ++ return (metadata_destination_path, preview_destination_path) ++ ++ ++def update_only_metadata_and_preview_files_and_return_file_paths(metadata): ++ file_name = get_file_name(metadata['title'], metadata['mime_type']) ++ _write_metadata_and_preview_files_and_return_file_paths(metadata, ++ file_name) - # For "Shares" folder, we need to set the permissions of the newly - # copied file to 0777, else it will not be accessible by "httpd" @@ -703,19 +715,11 @@ index 422e947..c06b2ee 100644 - fd = os.open(destination_path, os.O_RDONLY) - os.fchmod(fd, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) - os.close(fd) -+ return (metadata_destination_path, preview_destination_path) - metadata_file_path = os.path.join(metadata_dir_path, file_name + '.metadata') - fd = os.open(metadata_file_path, os.O_RDONLY) - os.fchmod(fd, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) - os.close(fd) - -+def update_only_metadata_and_preview_files_and_return_file_paths(metadata): -+ file_name = get_file_name(metadata['title'], metadata['mime_type']) -+ _write_metadata_and_preview_files_and_return_file_paths(metadata, -+ file_name) -+ -+ +def _write_entry_on_external_device(metadata, file_path, + transfer_ownership): + """Create and update an entry copied from the @@ -728,7 +732,7 @@ index 422e947..c06b2ee 100644 + This function handles renames of an entry on the + external device and avoids name collisions. Renames are + handled failsafe. -+ + + """ + if 'uid' in metadata and os.path.exists(metadata['uid']): + file_path = metadata['uid'] @@ -760,7 +764,7 @@ index 422e947..c06b2ee 100644 object_id = destination_path created.send(None, object_id=object_id) -@@ -1013,7 +1148,11 @@ def is_editable(metadata): +@@ -1013,7 +1152,11 @@ def is_editable(metadata): # called, upon an entry in the context of a singular # mount-point. from jarabe.journal.journalactivity import get_mount_point @@ -774,7 +778,7 @@ index 422e947..c06b2ee 100644 def get_documents_path(): diff --git a/src/jarabe/journal/palettes.py b/src/jarabe/journal/palettes.py -index 66dcadc..91e5460 100644 +index 66dcadc..bdd09bd 100644 --- a/src/jarabe/journal/palettes.py +++ b/src/jarabe/journal/palettes.py @@ -30,6 +30,7 @@ import gio @@ -1195,7 +1199,7 @@ index 66dcadc..91e5460 100644 class FriendsMenu(gtk.Menu): __gtype_name__ = 'JournalFriendsMenu' -@@ -970,12 +1180,23 @@ class CopyMenuHelper(gtk.Menu): +@@ -970,12 +1180,24 @@ class CopyMenuHelper(gtk.Menu): menu.append(documents_menu) documents_menu.show() @@ -1212,7 +1216,8 @@ index 66dcadc..91e5460 100644 + menu.append(local_shares_menu) + local_shares_menu.show() + -+ if not model.is_mount_point_for_locally_mounted_remote_share(get_mount_point()): ++ if (model.is_school_server_present()) and \ ++ (not model.is_mount_point_for_locally_mounted_remote_share(get_mount_point())): + documents_menu = SchoolServerMenu(metadata_list, show_editing_alert, show_progress_info_alert, @@ -1223,7 +1228,7 @@ index 66dcadc..91e5460 100644 documents_menu.connect('volume-error', self.__volume_error_cb) menu.append(documents_menu) diff --git a/src/jarabe/journal/volumestoolbar.py b/src/jarabe/journal/volumestoolbar.py -index c24475d..b004657 100644 +index c24475d..07b178f 100644 --- a/src/jarabe/journal/volumestoolbar.py +++ b/src/jarabe/journal/volumestoolbar.py @@ -37,7 +37,6 @@ from sugar.graphics.palette import Palette @@ -1244,7 +1249,7 @@ index c24475d..b004657 100644 def _get_id(document): """Get the ID for the document in the xapian database.""" -@@ -211,7 +213,13 @@ class VolumesToolbar(gtk.Toolbar): +@@ -211,7 +213,15 @@ class VolumesToolbar(gtk.Toolbar): def _set_up_volumes(self): self._set_up_documents_button() @@ -1253,13 +1258,15 @@ index c24475d..b004657 100644 + + client = gconf.client_get_default() + color = XoColor(client.get_string('/desktop/sugar/user/color')) -+ self._add_remote_share_button(_('School-Server Shares'), -+ model.SCHOOL_SERVER_IP_ADDRESS_OR_DNS_NAME, -+ color, SHARE_TYPE_SCHOOL_SERVER) ++ ++ if model.is_school_server_present(): ++ self._add_remote_share_button(_('School-Server Shares'), ++ model.SCHOOL_SERVER_IP_ADDRESS_OR_DNS_NAME, ++ color, SHARE_TYPE_SCHOOL_SERVER) volume_monitor = gio.volume_monitor_get() self._mount_added_hid = volume_monitor.connect('mount-added', -@@ -242,18 +250,28 @@ class VolumesToolbar(gtk.Toolbar): +@@ -242,18 +252,28 @@ class VolumesToolbar(gtk.Toolbar): 'user-documents', _('Documents')) @@ -1298,7 +1305,7 @@ index c24475d..b004657 100644 button.connect('toggled', self._button_toggled_cb) button.show() -@@ -262,12 +280,7 @@ class VolumesToolbar(gtk.Toolbar): +@@ -262,12 +282,7 @@ class VolumesToolbar(gtk.Toolbar): self._volume_buttons.append(button) self.show() @@ -1312,7 +1319,7 @@ index c24475d..b004657 100644 def __mount_added_cb(self, volume_monitor, mount): self._add_button(mount) -@@ -302,13 +315,13 @@ class VolumesToolbar(gtk.Toolbar): +@@ -302,13 +317,13 @@ class VolumesToolbar(gtk.Toolbar): def _button_toggled_cb(self, button, force_toggle=False): if button.props.active or force_toggle: @@ -1327,7 +1334,7 @@ index c24475d..b004657 100644 self.emit('volume-changed', button.mount_point) -@@ -328,6 +341,14 @@ class VolumesToolbar(gtk.Toolbar): +@@ -328,6 +343,14 @@ class VolumesToolbar(gtk.Toolbar): logging.error('Couldnt find button with mount_point %r', mount_point) return None @@ -1342,7 +1349,7 @@ index c24475d..b004657 100644 def _remove_button(self, mount): button = self._get_button_for_mount(mount) self._volume_buttons.remove(button) -@@ -337,16 +358,20 @@ class VolumesToolbar(gtk.Toolbar): +@@ -337,16 +360,20 @@ class VolumesToolbar(gtk.Toolbar): if len(self.get_children()) < 2: self.hide() @@ -1367,7 +1374,7 @@ index c24475d..b004657 100644 self.hide() break; -@@ -478,6 +503,7 @@ class DirectoryButton(BaseButton): +@@ -478,6 +505,7 @@ class DirectoryButton(BaseButton): def __init__(self, dir_path, icon_name): BaseButton.__init__(self, mount_point=dir_path) @@ -1375,7 +1382,7 @@ index c24475d..b004657 100644 self.props.named_icon = icon_name -@@ -488,16 +514,22 @@ class DirectoryButton(BaseButton): +@@ -488,16 +516,22 @@ class DirectoryButton(BaseButton): class RemoteSharesButton(BaseButton): @@ -1384,14 +1391,14 @@ index c24475d..b004657 100644 + def __init__(self, primary_text, ip_address_or_dns_name, color, + share_type): + BaseButton.__init__(self, mount_point=(model.WEBDAV_MOUNT_POINT + ip_address_or_dns_name)) -+ -+ self._primary_text = primary_text -+ self._ip_address_or_dns_name = ip_address_or_dns_name - self._buddy = buddy - self.props.named_icon = 'emblem-neighborhood-shared' - self.props.xo_color = buddy.props.color - self._buddy_ip_address = buddy.props.ip_address ++ self._primary_text = primary_text ++ self._ip_address_or_dns_name = ip_address_or_dns_name ++ + if share_type == SHARE_TYPE_PEER: + self.props.named_icon = 'emblem-neighborhood-shared' + elif share_type == SHARE_TYPE_SCHOOL_SERVER: |