Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAjay Garg <ajay@activitycentral.com>2012-08-29 11:30:14 (GMT)
committer Ajay Garg <ajay@activitycentral.com>2012-08-29 11:30:14 (GMT)
commitfae6b3d83f8ff06b0fe7ffd142018107dec2dc8f (patch)
tree56883600813d516e3ec03b293ecd6ea98c8a3361
parentf607aa742d50db63ddfc8d1ed776de9f24047710 (diff)
[Version-6] 1-to-N feature via School-Server.
Changes of version-6 over version-5 : ==================================== a) Added the option to show the "nick" and "serial number" of the uploader XO in the Expanded-Entry.
-rw-r--r--rpms/sugar/0130-1-to-N-feature-via-School-Server.patch131
1 files changed, 112 insertions, 19 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 4d61d7f..ef570a4 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,22 +1,64 @@
-From 2201c690a2705fe90a7c009e2fd60e3e5bcb8e6c Mon Sep 17 00:00:00 2001
+From ef7fc9392d515430290406bc7813987b5e661451 Mon Sep 17 00:00:00 2001
From: Ajay Garg <ajay@activitycentral.com>
-Date: Wed, 29 Aug 2012 12:34:20 +0530
+Date: Wed, 29 Aug 2012 16:56:59 +0530
Subject: [sugar PATCH] 1-to-N-feature-via-School-Server.
Organization: Sugar Labs Foundation
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 | 350 ++++++++++++++++++++++-----------
- src/jarabe/journal/palettes.py | 202 ++++++++++++++++---
+ src/jarabe/journal/model.py | 352 ++++++++++++++++++++++-----------
+ src/jarabe/journal/palettes.py | 238 +++++++++++++++++++---
src/jarabe/journal/volumestoolbar.py | 41 ++---
src/jarabe/journal/webdavmanager.py | 164 ++++++++++------
src/jarabe/view/palettes.py | 31 +---
src/webdav/Connection.py | 11 +-
src/webdav/WebdavClient.py | 16 ++-
src/webdav/davlib.py | 9 +-
- 10 files changed, 605 insertions(+), 280 deletions(-)
+ 11 files changed, 667 insertions(+), 280 deletions(-)
+diff --git a/src/jarabe/journal/expandedentry.py b/src/jarabe/journal/expandedentry.py
+index 03f8cd1..1e857ba 100644
+--- a/src/jarabe/journal/expandedentry.py
++++ b/src/jarabe/journal/expandedentry.py
+@@ -166,13 +166,35 @@ class ExpandedEntry(hippo.CanvasBox):
+ self._buddy_list.append(self._create_buddy_list())
+
+ description = self._description.text_view_widget
+- description.props.buffer.props.text = metadata.get('description', '')
++
++ # TRANS: Do not translate the """%s""".
++ uploader_nick_text = self.__create_text_description(
++ _('Source XO Nick :: \n%s'), metadata.get('uploader-nick', ''))
++
++ # TRANS: Do not translate the """%s""".
++ uploader_serial_text = self.__create_text_description(
++ _('Source XO Serial Number :: \n%s'), metadata.get('uploader-serial', ''))
++
++ # TRANS: Do not translate the """%s""".
++ misc_info_text = self.__create_text_description(
++ _('Misellaneous Information :: \n%s'), metadata.get('description', ''))
++
++ description.props.buffer.props.text = uploader_nick_text + \
++ uploader_serial_text + \
++ misc_info_text
++
+ description.props.editable = model.is_editable(metadata)
+
+ tags = self._tags.text_view_widget
+ tags.props.buffer.props.text = metadata.get('tags', '')
+ tags.props.editable = model.is_editable(metadata)
+
++ def __create_text_description(self, heading, value):
++ if (value == '') or (value is None):
++ return ''
++
++ return ((heading % value) + '\n\n')
++
+ def _create_keep_icon(self):
+ keep_icon = KeepIcon(False)
+ keep_icon.connect('activated', self._keep_icon_activated_cb)
diff --git a/src/jarabe/journal/journalactivity.py b/src/jarabe/journal/journalactivity.py
index fc4773d..5f2a734 100644
--- a/src/jarabe/journal/journalactivity.py
@@ -152,7 +194,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..2dc256a 100644
+index 422e947..071376b 100644
--- a/src/jarabe/journal/model.py
+++ b/src/jarabe/journal/model.py
@@ -43,7 +43,7 @@ from sugar import dispatch
@@ -557,7 +599,7 @@ index 422e947..2dc256a 100644
metadata_dir_path = os.path.join(metadata['mountpoint'],
JOURNAL_METADATA_DIR)
-@@ -939,26 +1015,62 @@ def _write_entry_on_external_device(metadata, file_path):
+@@ -939,25 +1015,61 @@ def _write_entry_on_external_device(metadata, file_path):
os.close(fh)
os.rename(fn, os.path.join(metadata_dir_path, preview_fname))
@@ -569,7 +611,10 @@ index 422e947..2dc256a 100644
else:
- _rename_entry_on_external_device(file_path, destination_path,
- metadata_dir_path)
--
++ preview_destination_path = None
++
++ return (metadata_destination_path, preview_destination_path)
+
- # For "Shares" folder, we need to set the permissions of the newly
- # copied file to 0777, else it will not be accessible by "httpd"
- # service.
@@ -577,16 +622,11 @@ index 422e947..2dc256a 100644
- fd = os.open(destination_path, os.O_RDONLY)
- os.fchmod(fd, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
- os.close(fd)
--
+
- 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)
-+ 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,
@@ -597,7 +637,7 @@ index 422e947..2dc256a 100644
+ transfer_ownership):
+ """Create and update an entry copied from the
+ DS to an external storage device.
-+
+
+ Besides copying the associated file a file for the preview
+ and one for the metadata are stored in the hidden directory
+ .Sugar-Metadata.
@@ -633,12 +673,24 @@ index 422e947..2dc256a 100644
+ _rename_entry_on_external_device(file_path, destination_path)
+ else:
+ shutil.copy(file_path, destination_path)
-+
+
object_id = destination_path
created.send(None, object_id=object_id)
+@@ -1013,7 +1125,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
+- return os.access(get_mount_point(), os.W_OK)
++ mount_point = get_mount_point()
++
++ if is_mount_point_for_locally_mounted_remote_share(mount_point):
++ return False
++ return os.access(mount_point, os.W_OK)
+
+ def get_documents_path():
diff --git a/src/jarabe/journal/palettes.py b/src/jarabe/journal/palettes.py
-index 66dcadc..645ed3a 100644
+index 66dcadc..f8a437e 100644
--- a/src/jarabe/journal/palettes.py
+++ b/src/jarabe/journal/palettes.py
@@ -30,6 +30,7 @@ import gio
@@ -950,7 +1002,7 @@ index 66dcadc..645ed3a 100644
show_editing_alert,
show_progress_info_alert,
batch_mode)
-@@ -835,8 +951,34 @@ class SharesMenu(BaseCopyMenuItem):
+@@ -835,13 +951,75 @@ class SharesMenu(BaseCopyMenuItem):
def _operate(self, metadata):
if not self._file_path_valid(metadata):
return False
@@ -977,6 +1029,12 @@ index 66dcadc..645ed3a 100644
+ from jarabe.journal.journalactivity import get_mount_point, \
+ get_journal
+ metadata['mountpoint'] = get_mount_point()
++
++ # Attach the info of the uploader.
++ from jarabe.model.buddy import get_owner_instance
++ metadata['uploader-nick'] = get_owner_instance().props.nick
++ metadata['uploader-serial'] = self.__get_serial_number()
++
+ if not self._metadata_write_valid(metadata):
+ return False
+
@@ -986,7 +1044,42 @@ index 66dcadc..645ed3a 100644
return False
# This is sync-operation. Call the post-operation now.
-@@ -970,8 +1112,8 @@ class CopyMenuHelper(gtk.Menu):
+ self._post_operate_per_metadata_per_action(metadata)
+
++ def __get_serial_number(self):
++ _OFW_TREE = '/ofw'
++ _PROC_TREE = '/proc/device-tree'
++ _SN = 'serial-number'
++ _not_available = _('Not available')
++
++ serial_no = None
++ if os.path.exists(os.path.join(_OFW_TREE, _SN)):
++ serial_no = self.__read_file(os.path.join(_OFW_TREE, _SN))
++ elif os.path.exists(os.path.join(_PROC_TREE, _SN)):
++ serial_no = self.__read_file(os.path.join(_PROC_TREE, _SN))
++
++ if serial_no is None:
++ serial_no = _not_available
++ return serial_no
++
++ def __read_file(self, path):
++ if os.access(path, os.R_OK) == 0:
++ return None
++
++ fd = open(path, 'r')
++ value = fd.read()
++ fd.close()
++ if value:
++ value = value.strip('\n')
++ return value
++ else:
++ logging.debug('No information in file or directory: %s', path)
++ return None
++
+
+ class FriendsMenu(gtk.Menu):
+ __gtype_name__ = 'JournalFriendsMenu'
+@@ -970,8 +1148,8 @@ class CopyMenuHelper(gtk.Menu):
menu.append(documents_menu)
documents_menu.show()