conduit r1696 - in trunk: . conduit conduit/dataproviders conduit/modules/FileModule conduit/platform
- From: jstowers svn gnome org
- To: svn-commits-list gnome org
- Subject: conduit r1696 - in trunk: . conduit conduit/dataproviders conduit/modules/FileModule conduit/platform
- Date: Fri, 29 Aug 2008 23:39:10 +0000 (UTC)
Author: jstowers
Date: Fri Aug 29 23:39:10 2008
New Revision: 1696
URL: http://svn.gnome.org/viewvc/conduit?rev=1696&view=rev
Log:
* conduit/Vfs.py:
* conduit/dataproviders/File.py:
* conduit/modules/FileModule/FileModule.py:
* conduit/platform/FileGio.py:
* conduit/platform/FileGnomeVfs.py:
* conduit/platform/__init__.py: Move all uri_volume functions into the
platform implementation dir.
Modified:
trunk/ (props changed)
trunk/ChangeLog
trunk/conduit/Vfs.py
trunk/conduit/dataproviders/File.py
trunk/conduit/modules/FileModule/FileModule.py
trunk/conduit/platform/FileGio.py
trunk/conduit/platform/FileGnomeVfs.py
trunk/conduit/platform/__init__.py
Modified: trunk/conduit/Vfs.py
==============================================================================
--- trunk/conduit/Vfs.py (original)
+++ trunk/conduit/Vfs.py Fri Aug 29 23:39:10 2008
@@ -70,59 +70,38 @@
def uri_to_local_path(uri):
"""
- @returns: The local path (/foo/bar) for the given URI. Throws a
- RuntimeError (wtf??) if the uri is not a local one
+ @returns: The local path (/foo/bar) for the given URI
"""
uri = conduit.utils.ensure_string(uri)
- return gnomevfs.get_local_path_from_uri(uri)
+ scheme = uri_get_scheme(uri)
+ if scheme == "file":
+ #len("file://") = 7
+ return a[7:]
+ else:
+ return None
def uri_get_volume_root_uri(uri):
"""
@returns: The root path of the volume at the given uri, or None
"""
- uri = conduit.utils.ensure_string(uri)
- try:
- path = uri_to_local_path(uri)
- return VolumeMonitor().volume_get_root_uri(path)
- except:
- return None
+ f = FileImpl.FileImpl(uri)
+ return f.get_removable_volume_root_uri()
def uri_is_on_removable_volume(uri):
"""
@returns: True if the specified uri is on a removable volume, like a USB key
or removable/mountable disk.
"""
- uri = conduit.utils.ensure_string(uri)
- scheme = gnomevfs.get_uri_scheme(uri)
- if scheme == "file":
- #FIXME: Unfortunately this approach actually works better than gnomevfs
- #return uri.startswith("file:///media/")
- try:
- path = uri_to_local_path(uri)
- return VolumeMonitor().volume_is_removable(path)
- except Exception, e:
- log.warn("Could not determine if uri on removable volume: %s (%s)" % (uri, e))
- return False
- return False
-
+ f = FileImpl.FileImpl(uri)
+ return f.is_on_removale_volume()
+
def uri_get_filesystem_type(uri):
"""
@returns: The filesystem that uri is stored on or None if it cannot
be determined
"""
- uri = conduit.utils.ensure_string(uri)
- scheme = gnomevfs.get_uri_scheme(uri)
- if scheme == "file":
- try:
- path = uri_to_local_path(uri)
- return VolumeMonitor().volume_get_fstype(path)
- except RuntimeError:
- log.warn("Could not get local path from URI")
- return None
- except AttributeError:
- log.warn("Could not determine volume for path")
- return None
- return None
+ f = FileImpl.FileImpl(uri)
+ return f.get_filesystem_type()
def uri_escape(uri):
"""
@@ -200,27 +179,22 @@
"""
@returns: True if the uri is a folder and not a file
"""
- uri = conduit.utils.ensure_string(uri)
- info = gnomevfs.get_file_info(uri)
- return info.type == gnomevfs.FILE_TYPE_DIRECTORY
+ f = FileImpl.FileImpl(uri)
+ return f.is_directory()
def uri_format_for_display(uri):
"""
Formats the uri so it can be displayed to the user (strips passwords, etc)
"""
- uri = conduit.utils.ensure_string(uri)
- return gnomevfs.format_uri_for_display(uri)
+ f = FileImpl.FileImpl(uri)
+ return f.get_uri_for_display()
def uri_exists(uri):
"""
@returns: True if the uri exists
"""
- uri = conduit.utils.ensure_string(uri)
- try:
- return gnomevfs.exists(gnomevfs.URI(uri)) == 1
- except Exception, err:
- log.warn("Error checking if location exists")
- return False
+ f = FileImpl.FileImpl(uri)
+ return f.exists()
class FileMonitor(gobject.GObject):
@@ -352,8 +326,6 @@
import gobject
import time
-CONFIG_FILE_NAME = ".conduit.conf"
-
class FolderScanner(threading.Thread, gobject.GObject):
"""
Recursively scans a given folder URI, returning the number of
@@ -364,7 +336,7 @@
gobject.TYPE_INT]),
"scan-completed": (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
}
-
+ CONFIG_FILE_NAME = ".conduit.conf"
def __init__(self, baseURI, includeHidden, followSymlinks):
threading.Thread.__init__(self)
gobject.GObject.__init__(self)
@@ -401,7 +373,7 @@
except StopIteration: continue;
while fileinfo:
filename = fileinfo.name
- if filename in [".","..",CONFIG_FILE_NAME]:
+ if filename in [".","..",self.CONFIG_FILE_NAME]:
pass
else:
if fileinfo.type == gnomevfs.FILE_TYPE_DIRECTORY:
Modified: trunk/conduit/dataproviders/File.py
==============================================================================
--- trunk/conduit/dataproviders/File.py (original)
+++ trunk/conduit/dataproviders/File.py Fri Aug 29 23:39:10 2008
@@ -14,19 +14,18 @@
TYPE_FILE = "0"
TYPE_FOLDER = "1"
-def is_on_removable_volume(folderUri):
- return Vfs.uri_is_on_removable_volume(folderUri)
-
-def get_removable_volume_info(folderUri):
+def get_removable_volume_info(f):
"""
Returns the root uri of the volume, and local path of the
group config file
"""
- rooturi = Vfs.uri_get_volume_root_uri(folderUri)
- path = Vfs.uri_join(
- Vfs.uri_to_local_path(rooturi),
- ".conduit")
- return rooturi,path
+ rooturi = f.get_removable_volume_root_uri()
+ if rooturi:
+ path = Vfs.uri_to_local_path(rooturi)
+ if path:
+ path = Vfs.uri_join(path, ".conduit")
+ return rooturi,path
+ return None,None
def save_removable_volume_group_file(folderUri, folderGroupName):
"""
@@ -37,36 +36,40 @@
[DEFAULT]
relative/uri/from/volume/root = group name
"""
- if is_on_removable_volume(folderUri):
+ f = File.File(URI=folderUri)
+ if f.is_on_removale_volume():
#write to the /volume/root/.conduit file
rooturi,path = get_removable_volume_info(folderUri)
- conf = ConfigParser.SafeConfigParser()
- conf.read(path)
-
- log.debug("Saving group (%s = %s) to %s" % (folderUri,folderGroupName,path))
- conf.set(
- "DEFAULT",
- folderUri.replace(rooturi,""),
- folderGroupName
- )
- fp = open(path, 'w')
- conf.write(fp)
- fp.close()
- return True
+ if rooturi and path:
+ conf = ConfigParser.SafeConfigParser()
+ conf.read(path)
+
+ log.debug("Saving group (%s = %s) to %s" % (folderUri,folderGroupName,path))
+ conf.set(
+ "DEFAULT",
+ folderUri.replace(rooturi,""),
+ folderGroupName
+ )
+ fp = open(path, 'w')
+ conf.write(fp)
+ fp.close()
+ return True
return False
def read_removable_volume_group_file(folderUri):
items = []
- if is_on_removable_volume(folderUri):
+ f = File.File(URI=folderUri)
+ if f.is_on_removale_volume():
#read from the /volume/root/.conduit file
rooturi,path = get_removable_volume_info(folderUri)
- conf = ConfigParser.SafeConfigParser()
- conf.read(path)
- for p,n in conf.items("DEFAULT"):
- log.debug("Read group (%s = %s)" % (p,n))
- #check the path still exists on the volume
- if Vfs.uri_exists(rooturi+p):
- items.append((p,n))
+ if rooturi and path:
+ conf = ConfigParser.SafeConfigParser()
+ conf.read(path)
+ for p,n in conf.items("DEFAULT"):
+ log.debug("Read group (%s = %s)" % (p,n))
+ #check the path still exists on the volume
+ if Vfs.uri_exists(rooturi+p):
+ items.append((p,n))
return items
class FileSource(DataProvider.DataSource, Vfs.FolderScannerThreadManager):
Modified: trunk/conduit/modules/FileModule/FileModule.py
==============================================================================
--- trunk/conduit/modules/FileModule/FileModule.py (original)
+++ trunk/conduit/modules/FileModule/FileModule.py Fri Aug 29 23:39:10 2008
@@ -203,7 +203,7 @@
name=name)
self._volumes[udi].append(klass)
else:
- if FileDataProvider.is_on_removable_volume(mountUri):
+ if Vfs.uri_is_on_removable_volume(mountUri):
klass = self._make_class(
udi=udi,
folder=mountUri,
Modified: trunk/conduit/platform/FileGio.py
==============================================================================
--- trunk/conduit/platform/FileGio.py (original)
+++ trunk/conduit/platform/FileGio.py Fri Aug 29 23:39:10 2008
@@ -85,6 +85,9 @@
def get_filename(self):
self._get_file_info()
return self.fileInfo.get_display_name()
+
+ def get_uri_for_display(self):
+ return self._file.get_parse_name()
def get_contents(self):
return self._file.load_contents()
@@ -102,6 +105,25 @@
self.fileExists = False
self.triedOpen = False
+ def is_on_removale_volume(self):
+ try:
+ return self._file.find_enclosing_mount().can_unmount()
+ except gio.Error:
+ return False
+
+ def get_removable_volume_root_uri(self):
+ try:
+ return self._file.find_enclosing_mount().get_root().get_uri()
+ except gio.Error:
+ return None
+
+ def get_filesystem_type(self):
+ try:
+ info = self._file.query_filesystem_info("filesystem::type")
+ return info.get_attribute_string("filesystem::type")
+ except gio.Error:
+ return None
+
class FileTransferImpl(conduit.platform.FileTransfer):
def __init__(self, source, dest):
self._source = source._file
Modified: trunk/conduit/platform/FileGnomeVfs.py
==============================================================================
--- trunk/conduit/platform/FileGnomeVfs.py (original)
+++ trunk/conduit/platform/FileGnomeVfs.py Fri Aug 29 23:39:10 2008
@@ -115,6 +115,9 @@
def get_filename(self):
self._get_file_info()
return self.fileInfo.name
+
+ def get_uri_for_display(self):
+ return gnomevfs.format_uri_for_display(self.get_text_uri())
def get_contents(self):
return gnomevfs.read_entire_file(self.get_text_uri())
@@ -164,6 +167,24 @@
gnomevfs.PERM_USER_ALL | gnomevfs.PERM_GROUP_READ | gnomevfs.PERM_GROUP_EXEC | gnomevfs.PERM_OTHER_READ | gnomevfs.PERM_OTHER_EXEC
)
+ def is_on_removale_volume(self):
+ path = self.get_local_path()
+ if path:
+ return VolumeMonitor().volume_is_removable(path)
+ return False
+
+ def get_removable_volume_root_uri(self):
+ path = self.get_local_path()
+ if path:
+ return VolumeMonitor().volume_get_root_uri(path)
+ return False
+
+ def get_filesystem_type(self):
+ path = self.get_local_path()
+ if path:
+ return VolumeMonitor().volume_get_fstype(path)
+ return None
+
class FileTransferImpl(conduit.platform.FileTransfer):
def __init__(self, source, dest):
self._source = source._URI
Modified: trunk/conduit/platform/__init__.py
==============================================================================
--- trunk/conduit/platform/__init__.py (original)
+++ trunk/conduit/platform/__init__.py Fri Aug 29 23:39:10 2008
@@ -34,6 +34,9 @@
def get_filename(self):
raise NotImplementedError
+
+ def get_uri_for_display(self):
+ raise NotImplementedError
def get_contents(self):
raise NotImplementedError
@@ -55,7 +58,16 @@
def make_directory_and_parents(self):
raise NotImplementedError
-
+
+ def is_on_removale_volume(self):
+ return False
+
+ def get_removable_volume_root_uri(self):
+ return None
+
+ def get_filesystem_type(self):
+ return None
+
class FileTransfer:
def __init__(self, source, dest):
pass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]