ObjectChooser displays USB media files, but fails to access file #1241
This commit is contained in:
parent
49c9de8a82
commit
da678c6973
@ -23,9 +23,10 @@ import logging
|
|||||||
import time
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import os
|
import os
|
||||||
|
import tempfile
|
||||||
import gobject
|
import gobject
|
||||||
|
|
||||||
|
from sugar import env
|
||||||
from sugar.datastore import dbus_helpers
|
from sugar.datastore import dbus_helpers
|
||||||
from sugar import mime
|
from sugar import mime
|
||||||
|
|
||||||
@ -138,9 +139,53 @@ class DSObject(object):
|
|||||||
def copy(self):
|
def copy(self):
|
||||||
return DSObject(None, self._metadata.copy(), self._file_path)
|
return DSObject(None, self._metadata.copy(), self._file_path)
|
||||||
|
|
||||||
|
class RawObject(object):
|
||||||
|
|
||||||
|
def __init__(self, file_path):
|
||||||
|
self.object_id = file_path
|
||||||
|
self._metadata = DSMetadata()
|
||||||
|
self._file_path = None
|
||||||
|
self._destroyed = False
|
||||||
|
|
||||||
|
def get_metadata(self):
|
||||||
|
return self._metadata
|
||||||
|
|
||||||
|
metadata = property(get_metadata)
|
||||||
|
|
||||||
|
def get_file_path(self, fetch=True):
|
||||||
|
# we have to create symlink since its a common practice
|
||||||
|
# to create hardlinks to jobject files
|
||||||
|
if self._file_path is None:
|
||||||
|
self._file_path = tempfile.mktemp(
|
||||||
|
prefix='rawobject',
|
||||||
|
dir=os.path.join(env.get_profile_path(), 'data'))
|
||||||
|
os.symlink(self.object_id, self._file_path)
|
||||||
|
return self._file_path
|
||||||
|
|
||||||
|
file_path = property(get_file_path)
|
||||||
|
|
||||||
|
def destroy(self):
|
||||||
|
if self._destroyed:
|
||||||
|
logging.warning('This RawObject has already been destroyed!.')
|
||||||
|
return
|
||||||
|
self._destroyed = True
|
||||||
|
if self._file_path is not None:
|
||||||
|
os.remove(self._file_path)
|
||||||
|
self._file_path = None
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
if not self._destroyed:
|
||||||
|
logging.warning('RawObject was deleted without cleaning up. '
|
||||||
|
'Call RawObject.destroy() before disposing it.')
|
||||||
|
self.destroy()
|
||||||
|
|
||||||
|
|
||||||
def get(object_id):
|
def get(object_id):
|
||||||
logging.debug('datastore.get')
|
logging.debug('datastore.get')
|
||||||
|
|
||||||
|
if object_id.startswith('/'):
|
||||||
|
return RawObject(object_id)
|
||||||
|
|
||||||
metadata = dbus_helpers.get_properties(object_id)
|
metadata = dbus_helpers.get_properties(object_id)
|
||||||
|
|
||||||
ds_object = DSObject(object_id, DSMetadata(metadata), None)
|
ds_object = DSObject(object_id, DSMetadata(metadata), None)
|
||||||
|
Loading…
Reference in New Issue
Block a user