diff options
author | Lars Wirzenius <liw@localhost> | 2014-06-03 13:09:32 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@localhost> | 2014-06-03 13:09:32 +0000 |
commit | 315db640f463613cae4de4c02cc52d2be6d5684a (patch) | |
tree | 3a922456821d1882c778267f04bbf0c4d0bfca68 /soundconverter/fileoperations.py | |
download | soundconverter-debian-packaging-master.tar.gz |
Diffstat (limited to 'soundconverter/fileoperations.py')
-rw-r--r-- | soundconverter/fileoperations.py | 154 |
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(' ', '\ ') + |