diff options
author | Sascha Silbe <sascha-pgp@silbe.org> | 2010-06-03 14:00:26 (GMT) |
---|---|---|
committer | Sascha Silbe <sascha-pgp@silbe.org> | 2010-06-03 14:00:26 (GMT) |
commit | 7be57e2e9c1fa00dc1346e3c06626cf9929f5811 (patch) | |
tree | b1bdc4f7fc4e5ed658462188243ec388a633fa1e | |
parent | ada4ccb107ca6cee061402624afb5fb9fc15e803 (diff) |
append extension (derived from mime_type or data) to file name
-rwxr-xr-x | datastore-fuse.py | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/datastore-fuse.py b/datastore-fuse.py index 1b45664..f51a9ca 100755 --- a/datastore-fuse.py +++ b/datastore-fuse.py @@ -19,6 +19,7 @@ import dbus from sugar.logger import trace import sugar.logger +import sugar.mime fuse.fuse_python_api = (0, 2) @@ -519,7 +520,7 @@ class DataStoreFS(fuse.Fuse): return name metadata = self.get_metadata(object_id) - name = self._generate_title_name(metadata) + name = self._generate_title_name(metadata, object_id) self._add_title_name(name, object_id) return name @@ -529,7 +530,7 @@ class DataStoreFS(fuse.Fuse): return name @trace() - def _generate_title_name(self, metadata): + def _generate_title_name(self, metadata, object_id): title = metadata.get('title') try: mtime = float(metadata['timestamp']) @@ -539,11 +540,18 @@ class DataStoreFS(fuse.Fuse): time_human = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(mtime)) name = '%s - %s' % (title, time_human) name = self._safe_name(name) - current_name = name + extension = self._guess_extension(metadata.get('mime_type'), object_id) + if extension: + current_name = '%s.%s' % (name, extension) + else: + current_name = name counter = 1 while current_name in self._title_name_to_object_id: counter += 1 - current_name = '%s %d' % (name, counter) + if extension: + current_name = '%s %d.%s' % (name, counter, extension) + else: + current_name = '%s %d' % (name, counter) return current_name @@ -560,6 +568,22 @@ class DataStoreFS(fuse.Fuse): def _safe_name(self, name): return name.replace('/', '_') + def _guess_extension(self, mime_type, object_id): + extension = None + + if not mime_type: + file_name = self.get_data(object_id) + if file_name: + try: + mime_type = sugar.mime.get_for_file(file_name) + finally: + os.remove(file_name) + + if mime_type: + extension = sugar.mime.get_primary_extension(mime_type) + + return extension + def main(): usage = __doc__ + fuse.Fuse.fusage |