Example #1
0
 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
Example #2
0
 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
Example #3
0
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)
Example #4
0
 def collectionFiles(self):
     for folder, recursive in self.folders.items():
         for f in utils.dirwalk(folder, self.validFiles, recursive):
             yield f