[Sugar-devel] [sugar-toolkit-gtk3 PATCH] sl#4276: Writing the icon-files for ".xo" files on a permanent mount-point, and not /tmp. mount-point.

Ajay Garg ajay at activitycentral.com
Mon Dec 10 14:09:12 EST 2012

This issue happens, when ".xo" files need to be rendered in the listview in non-journal locations.
In such cases, these files have no "activity" or "bundle_id" fields in their metadata.

Thus, the current way to know the icon-file-name for such ".xo" files was to expand the zipped files, and write out the icon-files at pseudo-permanent storage,  at /tmp.

However, before the icon-file could be used by the listview to "pick up" the icon bytes, it was  being  garbage-collected.

Thus, now as the solution, we write the icon-files (maximum of one file per activity) at "~/.sugar/default/icon_files". Now, the  icons are rendered correctly then.

 src/sugar3/bundle/activitybundle.py | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/sugar3/bundle/activitybundle.py b/src/sugar3/bundle/activitybundle.py
index 3895673..2c0894d 100644
--- a/src/sugar3/bundle/activitybundle.py
+++ b/src/sugar3/bundle/activitybundle.py
@@ -209,11 +209,22 @@ class ActivityBundle(Bundle):
             return os.path.join(self._path, icon_path)
             icon_data = self.get_file(icon_path).read()
-            temp_file, temp_file_path = tempfile.mkstemp(prefix=self._icon,
-                                                         suffix='.svg')
-            os.write(temp_file, icon_data)
-            os.close(temp_file)
-            return util.TempFilePath(temp_file_path)
+            # First  check to see if the directory exists.
+            icon_files_dir_path = env.get_profile_path('icon_files')
+            if not os.path.isdir(icon_files_dir_path):
+                os.makedirs(icon_files_dir_path, 0770)
+            icon_file_path = os.path.join(icon_files_dir_path,
+                                          self._icon + '.svg')
+            # Write the icon-data file, if not already existing.
+            if not os.path.exists(icon_file_path):
+                icon_file_pointer = open(icon_file_path, 'w')
+                icon_file_pointer.write(icon_data)
+                icon_file_pointer.close()
+            return icon_file_path
     def get_activity_version(self):
         """Get the activity version"""

More information about the Sugar-devel mailing list