Exemplo n.º 1
0
    def add(self,
            params={},
            force_readd=True,
            search_after=True,
            update_library=False,
            status_id=None):

        if not params.get('identifier'):
            msg = 'Can\'t add movie without imdb identifier.'
            log.error(msg)
            fireEvent('notify.frontend', type='movie.is_tvshow', message=msg)
            return False
        else:
            try:
                is_movie = fireEvent('movie.is_movie',
                                     identifier=params.get('identifier'),
                                     single=True)
                if not is_movie:
                    msg = 'Can\'t add movie, seems to be a TV show.'
                    log.error(msg)
                    fireEvent('notify.frontend',
                              type='movie.is_tvshow',
                              message=msg)
                    return False
            except:
                pass

        library = fireEvent('library.add',
                            single=True,
                            attrs=params,
                            update_after=update_library)

        # Status
        status_active, snatched_status, ignored_status, done_status, downloaded_status = \
            fireEvent('status.get', ['active', 'snatched', 'ignored', 'done', 'downloaded'], single = True)

        default_profile = fireEvent('profile.default', single=True)

        db = get_session()
        m = db.query(Movie).filter_by(library_id=library.get('id')).first()
        added = True
        do_search = False
        if not m:
            m = Movie(
                library_id=library.get('id'),
                profile_id=params.get('profile_id', default_profile.get('id')),
                status_id=status_id if status_id else status_active.get('id'),
            )
            db.add(m)
            db.commit()

            onComplete = None
            if search_after:
                onComplete = self.createOnComplete(m.id)

            fireEventAsync('library.update',
                           params.get('identifier'),
                           default_title=params.get('title', ''),
                           on_complete=onComplete)
            search_after = False
        elif force_readd:

            # Clean snatched history
            for release in m.releases:
                if release.status_id in [
                        downloaded_status.get('id'),
                        snatched_status.get('id'),
                        done_status.get('id')
                ]:
                    if params.get('ignore_previous', False):
                        release.status_id = ignored_status.get('id')
                    else:
                        fireEvent('release.delete', release.id, single=True)

            m.profile_id = params.get('profile_id', default_profile.get('id'))
        else:
            log.debug('Movie already exists, not updating: %s', params)
            added = False

        if force_readd:
            m.status_id = status_id if status_id else status_active.get('id')
            m.last_edit = int(time.time())
            do_search = True

        db.commit()

        # Remove releases
        available_status = fireEvent('status.get', 'available', single=True)
        for rel in m.releases:
            if rel.status_id is available_status.get('id'):
                db.delete(rel)
                db.commit()

        movie_dict = m.to_dict(self.default_dict)

        if do_search and search_after:
            onComplete = self.createOnComplete(m.id)
            onComplete()

        if added:
            fireEvent('notify.frontend',
                      type='movie.added',
                      data=movie_dict,
                      message='Successfully added "%s" to your wanted list.' %
                      params.get('title', ''))

        db.expire_all()
        return movie_dict
Exemplo n.º 2
0
    def add(self, params = {}, force_readd = True, search_after = True, update_library = False, status_id = None):

        if not params.get('identifier'):
            msg = 'Can\'t add movie without imdb identifier.'
            log.error(msg)
            fireEvent('notify.frontend', type = 'movie.is_tvshow', message = msg)
            return False
        else:
            try:
                is_movie = fireEvent('movie.is_movie', identifier = params.get('identifier'), single = True)
                if not is_movie:
                    msg = 'Can\'t add movie, seems to be a TV show.'
                    log.error(msg)
                    fireEvent('notify.frontend', type = 'movie.is_tvshow', message = msg)
                    return False
            except:
                pass


        library = fireEvent('library.add', single = True, attrs = params, update_after = update_library)

        # Status
        status_active, snatched_status, ignored_status, done_status, downloaded_status = \
            fireEvent('status.get', ['active', 'snatched', 'ignored', 'done', 'downloaded'], single = True)

        default_profile = fireEvent('profile.default', single = True)

        db = get_session()
        m = db.query(Movie).filter_by(library_id = library.get('id')).first()
        added = True
        do_search = False
        if not m:
            m = Movie(
                library_id = library.get('id'),
                profile_id = params.get('profile_id', default_profile.get('id')),
                status_id = status_id if status_id else status_active.get('id'),
            )
            db.add(m)
            db.commit()

            onComplete = None
            if search_after:
                onComplete = self.createOnComplete(m.id)

            fireEventAsync('library.update', params.get('identifier'), default_title = params.get('title', ''), on_complete = onComplete)
            search_after = False
        elif force_readd:

            # Clean snatched history
            for release in m.releases:
                if release.status_id in [downloaded_status.get('id'), snatched_status.get('id'), done_status.get('id')]:
                    if params.get('ignore_previous', False):
                        release.status_id = ignored_status.get('id')
                    else:
                        fireEvent('release.delete', release.id, single = True)

            m.profile_id = params.get('profile_id', default_profile.get('id'))
        else:
            log.debug('Movie already exists, not updating: %s', params)
            added = False

        if force_readd:
            m.status_id = status_id if status_id else status_active.get('id')
            m.last_edit = int(time.time())
            do_search = True

        db.commit()

        # Remove releases
        available_status = fireEvent('status.get', 'available', single = True)
        for rel in m.releases:
            if rel.status_id is available_status.get('id'):
                db.delete(rel)
                db.commit()

        movie_dict = m.to_dict(self.default_dict)

        if do_search and search_after:
            onComplete = self.createOnComplete(m.id)
            onComplete()

        if added:
            fireEvent('notify.frontend', type = 'movie.added', data = movie_dict, message = 'Successfully added "%s" to your wanted list.' % params.get('title', ''))

        db.expire_all()
        return movie_dict
Exemplo n.º 3
0
    def add(self, params={}, force_readd=True, search_after=True, update_library=False, status_id=None):

        if not params.get("identifier"):
            msg = "Can't add movie without imdb identifier."
            log.error(msg)
            fireEvent("notify.frontend", type="movie.is_tvshow", message=msg)
            return False
        else:
            try:
                is_movie = fireEvent("movie.is_movie", identifier=params.get("identifier"), single=True)
                if not is_movie:
                    msg = "Can't add movie, seems to be a TV show."
                    log.error(msg)
                    fireEvent("notify.frontend", type="movie.is_tvshow", message=msg)
                    return False
            except:
                pass

        library = fireEvent("library.add", single=True, attrs=params, update_after=update_library)

        # Status
        status_active, snatched_status, ignored_status, done_status, downloaded_status = fireEvent(
            "status.get", ["active", "snatched", "ignored", "done", "downloaded"], single=True
        )

        default_profile = fireEvent("profile.default", single=True)

        db = get_session()
        m = db.query(Movie).filter_by(library_id=library.get("id")).first()
        added = True
        do_search = False
        if not m:
            m = Movie(
                library_id=library.get("id"),
                profile_id=params.get("profile_id", default_profile.get("id")),
                status_id=status_id if status_id else status_active.get("id"),
            )
            db.add(m)
            db.commit()

            onComplete = None
            if search_after:
                onComplete = self.createOnComplete(m.id)

            fireEventAsync(
                "library.update",
                params.get("identifier"),
                default_title=params.get("title", ""),
                on_complete=onComplete,
            )
            search_after = False
        elif force_readd:

            # Clean snatched history
            for release in m.releases:
                if release.status_id in [downloaded_status.get("id"), snatched_status.get("id"), done_status.get("id")]:
                    if params.get("ignore_previous", False):
                        release.status_id = ignored_status.get("id")
                    else:
                        fireEvent("release.delete", release.id, single=True)

            m.profile_id = params.get("profile_id", default_profile.get("id"))
        else:
            log.debug("Movie already exists, not updating: %s", params)
            added = False

        if force_readd:
            m.status_id = status_id if status_id else status_active.get("id")
            m.last_edit = int(time.time())
            do_search = True

        db.commit()

        # Remove releases
        available_status = fireEvent("status.get", "available", single=True)
        for rel in m.releases:
            if rel.status_id is available_status.get("id"):
                db.delete(rel)
                db.commit()

        movie_dict = m.to_dict(self.default_dict)

        if do_search and search_after:
            onComplete = self.createOnComplete(m.id)
            onComplete()

        if added:
            fireEvent(
                "notify.frontend",
                type="movie.added",
                data=movie_dict,
                message='Successfully added "%s" to your wanted list.' % params.get("title", ""),
            )

        # db.close()
        return movie_dict