summaryrefslogtreecommitdiff
path: root/soundconverter/fileoperations.py
diff options
context:
space:
mode:
Diffstat (limited to 'soundconverter/fileoperations.py')
-rw-r--r--soundconverter/fileoperations.py154
1 files changed, 154 insertions, 0 deletions
diff --git a/soundconverter/fileoperations.py b/soundconverter/fileoperations.py
new file mode 100644
index 0000000..535cd01
--- /dev/null
+++ b/soundconverter/fileoperations.py
@@ -0,0 +1,154 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+# SoundConverter - GNOME application for converting between audio formats.
+# Copyright 2004 Lars Wirzenius
+# Copyright 2005-2012 Gautier Portet
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 3 of the License.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA
+
+import os
+import urllib
+import urlparse
+import gnomevfs
+
+from utils import log
+from error import show_error
+
+use_gnomevfs = False
+
+def unquote_filename(filename):
+ return urllib.unquote(filename)
+
+
+def beautify_uri(uri):
+ return unquote_filename(uri).split('file://')[-1]
+
+
+def vfs_walk(uri):
+ """similar to os.path.walk, but with gnomevfs.
+
+ uri -- the base folder uri.
+ return a list of uri.
+
+ """
+ if str(uri)[-1] != '/':
+ uri = uri.append_string('/')
+
+ filelist = []
+
+ try:
+ dirlist = gnomevfs.open_directory(uri, gnomevfs.FILE_INFO_FOLLOW_LINKS)
+ for file_info in dirlist:
+ try:
+ if file_info.name[0] == '.':
+ continue
+
+ if file_info.type == gnomevfs.FILE_TYPE_DIRECTORY:
+ filelist.extend(
+ vfs_walk(uri.append_path(file_info.name)))
+
+ if file_info.type == gnomevfs.FILE_TYPE_REGULAR:
+ filelist.append(str(uri.append_file_name(file_info.name)))
+ except ValueError:
+ # this can happen when you do not have sufficent
+ # permissions to read file info.
+ log("skipping: \'%s\'" % file_info.name)
+ except:
+ log("skipping: '%s\'" % uri)
+ return filelist
+
+ return filelist
+
+
+def vfs_makedirs(path_to_create):
+ """Similar to os.makedirs, but with gnomevfs."""
+
+ uri = gnomevfs.URI(path_to_create)
+ path = uri.path
+
+ # start at root
+ uri = uri.resolve_relative('/')
+
+ for folder in path.split('/'):
+ if not folder:
+ continue
+ uri = uri.append_string(folder.replace('%2f', '/'))
+ try:
+ gnomevfs.make_directory(uri, 0777)
+ except gnomevfs.FileExistsError:
+ pass
+ except:
+ return False
+ return True
+
+
+def vfs_unlink(filename):
+ """Delete a gnomevfs file."""
+
+ gnomevfs.unlink(gnomevfs.URI(filename))
+
+
+def vfs_rename(original, newname):
+ """Rename a gnomevfs file"""
+
+ uri = gnomevfs.URI(newname)
+ dirname = uri.parent
+ if dirname and not gnomevfs.exists(dirname):
+ log('Creating folder: \'%s\'' % dirname)
+ if not vfs_makedirs(str(dirname)):
+ show_error(_('Cannot create folder!'), unquote_filename(dirname.path))
+ return 'cannot-create-folder'
+
+ try:
+ gnomevfs.xfer_uri(gnomevfs.URI(original), uri,
+ gnomevfs.XFER_REMOVESOURCE,
+ gnomevfs.XFER_ERROR_MODE_ABORT,
+ gnomevfs.XFER_OVERWRITE_MODE_ABORT
+ )
+ except Exception as error:
+ # TODO: maybe we need a special case here. If dest folder is unwritable. Just stop.
+ # or an option to stop all processing.
+ show_error(_('Error while renaming file!'), '%s: %s' % (beautify_uri(newname), error))
+ return 'cannot-rename-file'
+
+
+def vfs_exists(filename):
+ try:
+ return gnomevfs.exists(filename)
+ except:
+ return False
+
+
+def filename_to_uri(filename):
+ """Convert a filename to a valid uri.
+ Filename can be a relative or absolute path, or an uri.
+ """
+ if '://' not in filename:
+ # convert local filename to uri
+ filename = urllib.pathname2url(os.path.abspath(filename))
+ filename = str(gnomevfs.URI(filename))
+ return filename
+
+
+# GStreamer gnomevfssrc helpers
+
+def vfs_encode_filename(filename):
+ return filename_to_uri(filename)
+
+
+def file_encode_filename(filename):
+ return gnomevfs.get_local_path_from_uri(filename).replace(' ', '\ ')
+