def move_to_directory(self, directory): check_f(directory) if self.channelName: channel_name = filter_directory_name(self.channelName) # bug 10769: shutil and windows has problems with long # filenames, so we clip the directory name. if len(channel_name) > 80: channel_name = channel_name[:80] directory = os.path.join(directory, channel_name) if not os.path.exists(directory): try: fileutil.makedirs(directory) except (SystemExit, KeyboardInterrupt): raise except: pass newfilename = os.path.join(directory, self.shortFilename) if newfilename == self.filename: return newfilename, fp = next_free_filename(newfilename) def callback(): self.filename = newfilename self.update_client() fileutil.migrate_file(self.filename, newfilename, callback) fp.close()
def migrate(self, directory): if app.download_state_manager.get_download(self.dlid): c = command.MigrateDownloadCommand(RemoteDownloader.dldaemon, self.dlid, directory) c.send() else: # downloader doesn't have our dlid. Move the file ourself. short_filename = self.status.get("shortFilename") if not short_filename: logging.warning( "can't migrate download; no shortfilename! URL was %s", self.url) return filename = self.status.get("filename") if not filename: logging.warning( "can't migrate download; no filename! URL was %s", self.url) return if fileutil.exists(filename): if self.status.get('channelName', None) is not None: channelName = filter_directory_name( self.status['channelName']) directory = os.path.join(directory, channelName) if not os.path.exists(directory): try: fileutil.makedirs(directory) except OSError: # FIXME - what about permission issues? pass newfilename = os.path.join(directory, short_filename) if newfilename == filename: return # create a file or directory to serve as a placeholder before # we start to migrate. This helps ensure that the destination # we're migrating too is not already taken. try: is_dir = fileutil.isdir(filename) if is_dir: newfilename = next_free_directory(newfilename) fp = None else: newfilename, fp = next_free_filename(newfilename) fp.close() except ValueError: func = ('next_free_directory' if is_dir else 'next_free_filename') logging.warn('migrate: %s failed. candidate = %r', func, newfilename) else: def callback(): self.status['filename'] = newfilename self.signal_change(needs_signal_item=False) self._file_migrated(filename) fileutil.migrate_file(filename, newfilename, callback) for i in self.item_list: i.migrate_children(directory)
def _add_item(self, final_path, item_info): dirname, basename = os.path.split(final_path) _, extension = os.path.splitext(basename) new_basename = "%s%s" % (unicode_to_filename(item_info.name, self.device.mount), extension) new_path = os.path.join(dirname, new_basename) if os.path.exists(new_path): logging.debug('final destination %r exists, making a new one', new_path) new_path, fp = next_free_filename(new_path) def callback(): if not os.path.exists(new_path): return # copy failed, just give up device_item = item.DeviceItem( device=self.device, file_type=item_info.file_type, video_path=new_path[len(self.device.mount):], title=item_info.name, feed_name=item_info.feed_name, feed_url=item_info.feed_url, description=item_info.description, release_date=time.mktime(item_info.release_date.timetuple()), duration=(item_info.duration and item_info.duration * 1000 or None), permalink=item_info.permalink, commentslink=item_info.commentslink, payment_link=item_info.payment_link, screenshot=item_info.thumbnail, thumbnail_url=item_info.thumbnail_url, file_format=item_info.file_format, license=item_info.license, url=item_info.file_url, media_type_checked=item_info.media_type_checked, mime_type=item_info.mime_type, creation_time=time.mktime(item_info.date_added.timetuple()), title_tag=item_info.title_tag, artist=item_info.artist, album=item_info.album, track=item_info.track, year=item_info.year, genre=item_info.genre, metadata_version=item_info.metadata_version, mdp_state=item_info.mdp_state, auto_sync=getattr(item_info, 'auto_sync', False) ) device_item._migrate_thumbnail() database = self.device.database database.setdefault(device_item.file_type, {}) database[device_item.file_type][device_item.id] = \ device_item.to_dict() database.emit('item-added', device_item) self.device.remaining -= device_item.size fileutil.migrate_file(final_path, new_path, callback)
def migrate(self, directory): if app.download_state_manager.get_download(self.dlid): c = command.MigrateDownloadCommand(RemoteDownloader.dldaemon, self.dlid, directory) c.send() else: # downloader doesn't have our dlid. Move the file ourself. short_filename = self.short_filename if not short_filename: logging.warning( "can't migrate download; no shortfilename! URL was %s", self.url) return filename = self.filename if not filename: logging.warning( "can't migrate download; no filename! URL was %s", self.url) return if fileutil.exists(filename): if self.channel_name is not None: channel_name = filter_directory_name(self.channel_name) directory = os.path.join(directory, channel_name) if not os.path.exists(directory): try: fileutil.makedirs(directory) except OSError: # FIXME - what about permission issues? pass newfilename = os.path.join(directory, short_filename) if newfilename == filename: return # create a file or directory to serve as a placeholder before # we start to migrate. This helps ensure that the destination # we're migrating too is not already taken. try: is_dir = fileutil.isdir(filename) if is_dir: newfilename = next_free_directory(newfilename) fp = None else: newfilename, fp = next_free_filename(newfilename) fp.close() except ValueError: func = ('next_free_directory' if is_dir else 'next_free_filename') logging.warn('migrate: %s failed. candidate = %r', func, newfilename) else: def callback(): self.filename = newfilename self.signal_change(needs_signal_item=False) self._file_migrated(filename) fileutil.migrate_file(filename, newfilename, callback) for i in self.item_list: i.migrate_children(directory)
def _add_item(self, final_path, item_info): dirname, basename = os.path.split(final_path) _, extension = os.path.splitext(basename) new_basename = "%s%s" % (unicode_to_filename( item_info.name, self.device.mount), extension) new_path = os.path.join(dirname, new_basename) def callback(): if not os.path.exists(new_path): return # copy failed, just give up device_item = DeviceItem( device=self.device, file_type=item_info.file_type, video_path=new_path[len(self.device.mount):], title=item_info.name, feed_name=item_info.feed_name, feed_url=item_info.feed_url, description=item_info.description, release_date=time.mktime(item_info.release_date.timetuple()), duration=(item_info.duration and item_info.duration * 1000 or None), permalink=item_info.permalink, commentslink=item_info.commentslink, payment_link=item_info.payment_link, screenshot=item_info.thumbnail, thumbnail_url=item_info.thumbnail_url, file_format=item_info.file_format, license=item_info.license, url=item_info.file_url, media_type_checked=item_info.media_type_checked, mime_type=item_info.mime_type, creation_time=time.mktime(item_info.date_added.timetuple()), title_tag=item_info.title_tag, artist=item_info.artist, album=item_info.album, track=item_info.track, year=item_info.year, genre=item_info.genre, metadata_version=item_info.metadata_version, mdp_state=item_info.mdp_state, ) device_item._migrate_thumbnail() database = self.device.database database.setdefault(device_item.file_type, {}) database[device_item.file_type][device_item.id] = \ device_item.to_dict() database.emit('item-added', device_item) fileutil.migrate_file(final_path, new_path, callback)
def migrate(self, directory): if _downloads.has_key(self.dlid): c = command.MigrateDownloadCommand(RemoteDownloader.dldaemon, self.dlid, directory) c.send() else: # downloader doesn't have our dlid. Move the file ourself. short_filename = self.status.get("shortFilename") if not short_filename: logging.warning( "can't migrate download; no shortfilename! URL was %s", self.url) return filename = self.status.get("filename") if not filename: logging.warning( "can't migrate download; no filename! URL was %s", self.url) return if fileutil.exists(filename): if self.status.get('channelName', None) is not None: channelName = filter_directory_name(self.status['channelName']) directory = os.path.join(directory, channelName) if not os.path.exists(directory): try: fileutil.makedirs(directory) except OSError: # FIXME - what about permission issues? pass newfilename = os.path.join(directory, short_filename) if newfilename == filename: return # create a file or directory to serve as a placeholder before # we start to migrate. This helps ensure that the destination # we're migrating too is not already taken. if fileutil.isdir(filename): newfilename = next_free_directory(newfilename) fp = None else: newfilename, fp = next_free_filename(newfilename) def callback(): self.status['filename'] = newfilename self.signal_change(needs_signal_item=False) self._file_migrated(filename) fileutil.migrate_file(filename, newfilename, callback) if fp is not None: fp.close() # clean up if we called next_free_filename() for i in self.item_list: i.migrate_children(directory)
def migrate(self, directory): if _downloads.has_key(self.dlid): c = command.MigrateDownloadCommand(RemoteDownloader.dldaemon, self.dlid, directory) c.send() else: # downloader doesn't have our dlid. Move the file ourself. short_filename = self.status.get("shortFilename") if not short_filename: logging.warning( "can't migrate download; no shortfilename! URL was %s", self.url) return filename = self.status.get("filename") if not filename: logging.warning( "can't migrate download; no filename! URL was %s", self.url) return if fileutil.exists(filename): if self.status.get('channelName', None) is not None: channelName = filter_directory_name(self.status['channelName']) directory = os.path.join(directory, channelName) if not os.path.exists(directory): try: fileutil.makedirs(directory) except OSError: # FIXME - what about permission issues? pass newfilename = os.path.join(directory, short_filename) if newfilename == filename: return newfilename, fp = next_free_filename(newfilename) def callback(): self.status['filename'] = newfilename self.signal_change(needs_signal_item=False) self._file_migrated(filename) fileutil.migrate_file(filename, newfilename, callback) fp.close() for i in self.item_list: i.migrate_children(directory)