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-10-20 08:53:15 (GMT)
committer Ajay Garg <ajay@activitycentral.com>2012-10-20 08:53:15 (GMT)
commitce0a770d7619597086c61d825463fd08a86a4c0b (patch)
tree2debee7baf07dfdc7003996fc9ac507ccd23d41c
parent654b82dc2915aa2dd1ce37bfb1c665bb1bd23d12 (diff)
sdxo#2371: Now, sorting by favorites work in Documents/Local-Shares.
-rw-r--r--rpms/sugar/0156-Fixing-many-inter-related-favorite-issues.patch127
1 files changed, 127 insertions, 0 deletions
diff --git a/rpms/sugar/0156-Fixing-many-inter-related-favorite-issues.patch b/rpms/sugar/0156-Fixing-many-inter-related-favorite-issues.patch
new file mode 100644
index 0000000..11daceb
--- /dev/null
+++ b/rpms/sugar/0156-Fixing-many-inter-related-favorite-issues.patch
@@ -0,0 +1,127 @@
+From 22e847b712403c157da322fa8888641e8ea84b7f Mon Sep 17 00:00:00 2001
+From: Ajay Garg <ajay@activitycentral.com>
+Date: Sat, 20 Oct 2012 14:04:54 +0530
+Subject: [PATCH] Fixing many inter-related favorite-issues.
+Organization: Sugar Labs Foundation
+
+
+Signed-off-by: Ajay Garg <ajay@activitycentral.com>
+---
+ src/jarabe/journal/model.py | 50 ++++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 27 deletions(-)
+
+diff --git a/src/jarabe/journal/model.py b/src/jarabe/journal/model.py
+index c9e08ec..9b31ac0 100644
+--- a/src/jarabe/journal/model.py
++++ b/src/jarabe/journal/model.py
+@@ -289,6 +289,14 @@ class BaseResultSet(object):
+
+ return self._cache[self._position - self._offset]
+
++ def is_favorite_compatible(self, metadata):
++ if self._favorite == '0':
++ return True
++
++ return ((metadata is not None) and \
++ ('keep' in metadata.keys()) and \
++ (str(metadata['keep']) == '1'))
++
+
+ class DatastoreResultSet(BaseResultSet):
+ """Encapsulates the result of a query on the datastore
+@@ -352,6 +360,8 @@ class InplaceResultSet(BaseResultSet):
+
+ self._sort = query.get('order_by', ['+timestamp'])[0]
+
++ self._favorite = str(query.get('keep', 0))
++
+ def setup(self):
+ self._file_list = []
+ self._pending_directories = [self._mount_point]
+@@ -459,10 +469,13 @@ class InplaceResultSet(BaseResultSet):
+ if S_IFMT(stat.st_mode) != S_IFREG:
+ return
+
++ metadata = _get_file_metadata(full_path, stat,
++ fetch_preview=False)
++
++ if not self.is_favorite_compatible(metadata):
++ return
+ if self._regex is not None and \
+ not self._regex.match(full_path):
+- metadata = _get_file_metadata(full_path, stat,
+- fetch_preview=False)
+ if not metadata:
+ return
+ add_to_list = False
+@@ -510,7 +523,7 @@ class InplaceResultSet(BaseResultSet):
+ return
+
+
+-class RemoteShareResultSet(object):
++class RemoteShareResultSet(BaseResultSet):
+ def __init__(self, ip_address_or_dns_name, query):
+ self._ip_address_or_dns_name = ip_address_or_dns_name
+ self._file_list = []
+@@ -544,6 +557,8 @@ class RemoteShareResultSet(object):
+
+ self._sort = query.get('order_by', ['+timestamp'])[0]
+
++ self._favorite = str(query.get('keep', 0))
++
+ def setup(self):
+ try:
+ metadata_list_complete = webdavmanager.get_remote_webdav_share_metadata(self._ip_address_or_dns_name)
+@@ -552,6 +567,9 @@ class RemoteShareResultSet(object):
+
+ for metadata in metadata_list_complete:
+
++ if not self.is_favorite_compatible(metadata):
++ continue
++
+ add_to_list = False
+ if self._regex is not None:
+ for f in ['fulltext', 'title',
+@@ -1111,8 +1129,7 @@ def _write_entry_on_external_device(metadata, file_path,
+ if destination_path != file_path:
+ file_name = get_unique_file_name(metadata['mountpoint'], file_name)
+ destination_path = os.path.join(metadata['mountpoint'], file_name)
+- clean_name, extension_ = os.path.splitext(file_name)
+- metadata['title'] = clean_name
++ metadata['title'] = file_name
+
+ _write_metadata_and_preview_files_and_return_file_paths(metadata,
+ file_name)
+@@ -1131,28 +1148,7 @@ def _write_entry_on_external_device(metadata, file_path,
+
+
+ def get_file_name(title, mime_type):
+- file_name = title
+-
+- extension = mime.get_primary_extension(mime_type)
+- if extension is not None and extension:
+- extension = '.' + extension
+- if not file_name.endswith(extension):
+- file_name += extension
+-
+- # Invalid characters in VFAT filenames. From
+- # http://en.wikipedia.org/wiki/File_Allocation_Table
+- invalid_chars = ['/', '\\', ':', '*', '?', '"', '<', '>', '|', '\x7F']
+- invalid_chars.extend([chr(x) for x in range(0, 32)])
+- for char in invalid_chars:
+- file_name = file_name.replace(char, '_')
+-
+- # FAT limit is 255, leave some space for uniqueness
+- max_len = 250
+- if len(file_name) > max_len:
+- name, extension = os.path.splitext(file_name)
+- file_name = name[0:max_len - len(extension)] + extension
+-
+- return file_name
++ return title
+
+
+ def get_unique_file_name(mount_point, file_name):
+--
+1.7.10.2
+