Skip to content
Permalink
Browse files
enhanced favorites: switch to new file format.
Signed-off-by: Martin Abente Lahaye <tch@sugarlabs.org>
  • Loading branch information
tchx84 committed Jun 10, 2015
1 parent 3555f5d commit a4e6508
Showing 1 changed file with 12 additions and 44 deletions.
@@ -115,7 +115,7 @@ def __init__(self):
except Exception:
logging.exception('Error while loading favorite_activities.')

self._merge_default_favorites()
self._scan_new_favorites()

self._desktop_model = desktop.get_model()
self._desktop_model.connect('desktop-view-icons-changed',
@@ -185,6 +185,7 @@ def _load_favorites(self):
favorites_path)

first_value = favorite_bundles.values()[0]
# keep first condition for importing old format.
if first_value is not None and \
not isinstance(first_value, dict):
raise ValueError('Invalid format in %s.' %
@@ -194,40 +195,13 @@ def _load_favorites(self):
float(favorites_data['defaults-mtime'])
self._favorite_bundles[i] = favorite_bundles

def _merge_default_favorites(self):
# Only merge defaults to _DEFAULT_VIEW
default_activities = []
defaults_path = os.environ["SUGAR_ACTIVITIES_DEFAULTS"]
if os.path.exists(defaults_path):
file_mtime = os.stat(defaults_path).st_mtime
if file_mtime > self._last_defaults_mtime[_DEFAULT_VIEW]:
f = open(defaults_path, 'r')
for line in f.readlines():
line = line.strip()
if line and not line.startswith('#'):
default_activities.append(line)
f.close()
self._last_defaults_mtime[_DEFAULT_VIEW] = file_mtime

if not default_activities:
return

for bundle_id in default_activities:
max_version = '0'
for bundle in self:
if bundle.get_bundle_id() == bundle_id and \
NormalizedVersion(max_version) < \
NormalizedVersion(bundle.get_activity_version()):
max_version = bundle.get_activity_version()

key = self._get_favorite_key(bundle_id, max_version)
if NormalizedVersion(max_version) > NormalizedVersion('0') and \
key not in self._favorite_bundles[_DEFAULT_VIEW]:
self._favorite_bundles[_DEFAULT_VIEW][key] = None

logging.debug('After merging: %r',
self._favorite_bundles[_DEFAULT_VIEW])

def _scan_new_favorites(self):
for bundle in self:
key = self._get_favorite_key(
bundle.get_bundle_id(), bundle.get_activity_version())
# If the entry exists we simply ignore it, otherwise create one.
if not self._favorite_bundles[_DEFAULT_VIEW].get(key, None):
self._favorite_bundles[_DEFAULT_VIEW][key] = {'favorite': True}
self._write_favorites_file(_DEFAULT_VIEW)

def get_bundle(self, bundle_id):
@@ -377,19 +351,16 @@ def set_bundle_favorite(self, bundle_id, version, favorite,
def _set_bundle_favorite(self, bundle_id, version, favorite,
favorite_view=0):
key = self._get_favorite_key(bundle_id, version)
if favorite and key not in self._favorite_bundles[favorite_view]:
self._favorite_bundles[favorite_view][key] = None
elif not favorite and key in self._favorite_bundles[favorite_view]:
del self._favorite_bundles[favorite_view][key]
else:
if favorite == self._favorite_bundles[favorite_view][key]['favorite']:
return False

self._favorite_bundles[favorite_view][key]['favorite'] = favorite
self._write_favorites_file(favorite_view)
return True

def is_bundle_favorite(self, bundle_id, version, favorite_view=0):
key = self._get_favorite_key(bundle_id, version)
return key in self._favorite_bundles[favorite_view]
return self._favorite_bundles[favorite_view][key]['favorite']

def is_activity_protected(self, bundle_id):
return bundle_id in self._protected_activities
@@ -400,8 +371,6 @@ def set_bundle_position(self, bundle_id, version, x, y, favorite_view=0):
raise ValueError('Bundle %s %s not favorite' %
(bundle_id, version))

if self._favorite_bundles[favorite_view][key] is None:
self._favorite_bundles[favorite_view][key] = {}
if 'position' not in self._favorite_bundles[favorite_view][key] or \
[x, y] != \
self._favorite_bundles[favorite_view][key]['position']:
@@ -419,7 +388,6 @@ def get_bundle_position(self, bundle_id, version, favorite_view=0):
"""
key = self._get_favorite_key(bundle_id, version)
if key not in self._favorite_bundles[favorite_view] or \
self._favorite_bundles[favorite_view][key] is None or \
'position' not in self._favorite_bundles[favorite_view][key]:
return (-1, -1)
else:

0 comments on commit a4e6508

Please sign in to comment.