def collectionFiles(self): for folder, recursive in self.folders: for f in utils.dirwalk(folder, self.validFiles, recursive): p = os.path.split(f) if '.AppleDouble' in p: continue if p[-1].startswith('._'): continue yield f
def action(request): action = request.matchdict['action'] log.debug('Action: %s - params = %s', action, request.params) try: if action == 'rescan_collections': SMEWTD_INSTANCE.rescanCollections() return 'OK' elif action == 'update_collections': SMEWTD_INSTANCE.updateCollections() return 'OK' elif action == 'clear_collections': SMEWTD_INSTANCE.clearDB() return 'Collections cleared!' elif action == 'clear_cache': SMEWTD_INSTANCE.clearCache() return 'Cache cleared!' elif action == 'subscribe': SMEWTD_INSTANCE.feedWatcher.addFeed(request.params['feed']) return 'OK' elif action == 'unsubscribe': SMEWTD_INSTANCE.feedWatcher.removeFeed(request.params['feed']) return 'OK' elif action == 'update_feed': SMEWTD_INSTANCE.feedWatcher.updateFeedUrl(request.params['feed']) return 'OK' elif action == 'set_last_update': SMEWTD_INSTANCE.feedWatcher.setLastUpdateUrlIndex(request.params['feed'], int(request.params['index'])) return 'OK' elif action == 'check_feeds': def bg_task(): SMEWTD_INSTANCE.feedWatcher.checkAllFeeds() threading.Thread(target=bg_task).start() return 'OK' elif action == 'clear_event_log': EventServer.events.clear() return 'OK' elif action == 'mldonkey_start': if mldonkey.start(): return 'OK' else: return 'Could not find mldonkey executable...' elif action == 'mldonkey_stop': mldonkey.stop() return 'OK' elif action == 'set_watched': title = unicode(request.params['title']) watched = from_js(request.params['watched']) SMEWTD_INSTANCE.database.find_one(Movie, title=title).watched = watched return 'OK' elif action == 'set_collection_folders': folders = json.loads(request.params['folders']) get_collection(request.params['collection']).setFolders(folders) return 'OK' elif action == 'add_collection_folder': get_collection(request.params['collection']).addFolder() return 'OK' elif action == 'delete_collection_folder': index = int(request.params['index']) get_collection(request.params['collection']).deleteFolder(index) return 'OK' elif action == 'classify_incoming_files': # add as task to the task manager to be able to see progress config = SMEWTD_INSTANCE.database.config incoming = config.get('incomingFolder', '') if not os.path.exists(incoming): msg = 'Incoming folder doesn\'t exist: %s' % incoming log.warning(msg) return msg # find the root folder for moving episodes for c in config.collections: if c.name == 'Series': try: series_folder = json.loads(c.folders)[0][0] except IndexError: return 'OK' result = [] for f in utils.dirwalk(incoming): info = guessit.guess_file_info(f, 'autodetect') if info['type'].startswith('episode'): path = utils.path(series_folder, info['series'], 'Season %d' % info['season'], os.path.basename(f), createdir=True) # FIXME: add as task in the task manager log.info('Moving %s to %s...', os.path.basename(f), path) shutil.copy(f, path) os.remove(f) result.append('Moved %s' % os.path.basename(f)) return '\n'.join(result) or 'OK' elif action == 'regenerate_thumbnails': SMEWTD_INSTANCE.regenerateSpeedDialThumbnails() return 'OK' elif action == 'get_subtitles': title = urllib2.unquote(request.params['title']) return get_subtitles(request.params['type'], title) elif action == 'play_movie': title = urllib2.unquote(request.params['title']) movie = SMEWTD_INSTANCE.database.find_one(Movie, title=title) play_video(movie, sublang=request.params.get('sublang')) return 'OK' elif action == 'play_episode': db = SMEWTD_INSTANCE.database series_name = urllib2.unquote(request.params['series']) series = db.find_one(Series, title=series_name) ep = db.find_one(Episode, series=series, season=int(request.params['season']), episodeNumber=int(request.params['episodeNumber'])) play_video(ep, sublang=request.params.get('sublang')) return 'OK' elif action == 'play_file': filename = urllib2.unquote(request.params['filename']) play_file(filename) return 'OK' elif action == 'set_last_viewed_tab': title = urllib2.unquote(request.params['title']) video = SMEWTD_INSTANCE.database.find_one(Metadata, title=title) video.lastViewedTab = int(request.params['tab']) return 'OK' elif action == 'post_comment': db = SMEWTD_INSTANCE.database movie = db.find_one(Movie, title = urllib2.unquote(request.params['title'])) db.Comment(metadata = movie, author = request.params['author'], date = int(time.time()), text = request.params['contents']) return 'OK' elif action == 'video_pause': mplayer.pause() return 'OK' elif action == 'video_stop': mplayer.stop() return 'OK' elif action == 'video_fback': mplayer.fast_back() return 'OK' elif action == 'video_back': mplayer.back() return 'OK' elif action == 'video_fwd': mplayer.forward() return 'OK' elif action == 'video_ffwd': mplayer.fast_forward() return 'OK' elif action == 'quit': # surely there's a better way to do this... def timebomb(): time.sleep(1) subprocess.call(['kill', '-2', str(os.getpid())]) threading.Thread(target=timebomb).start() return 'OK' else: return 'Error: unknown action: %s' % action except SmewtException as e: return str(e)
def collectionFiles(self): for folder, recursive in self.folders.items(): for f in utils.dirwalk(folder, self.validFiles, recursive): yield f