conduit r1696 - in trunk: . conduit conduit/dataproviders conduit/modules/FileModule conduit/platform



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]