예제 #1
0
    def save_season_episodes(self):
        """
        Saved season and episodes in database.

        :return: Errors when inserting into the database or ok if not errors.
        """
        self.season.season_num = self.le_season_num.text()
        self.season.year = self.le_year.text()
        id_m, name_m = get_combobox_info(self.cb_media)
        self.season.media_id = id_m

        _, name_s = get_combobox_info(self.cb_series)

        try:
            self.session.add(self.season)
            self.session.commit()
            text = texts.msg_edit_season_ok(name_s, self.le_season_num.text())
            show_msg(
                texts.edit_ok, text, QMessageBox.Information, QMessageBox.Ok)
        except (IntegrityError, DBAPIError) as error:
            self.session.rollback()
            self.session.commit()
            text = texts.msg_insert_season_error(
                name_s, self.le_season_num.text())
            show_msg(texts.insert_error, text, QMessageBox.Critical,
                     QMessageBox.Close, str(error))

        episodes = []
        i = 0
        for name, summary, code in self.result_episode:
            self.episodes_all[i].name = name
            self.episodes_all[i].summary = summary
            self.episodes_all[i].code = code

            episodes.append(self.episodes_all[i])
            i += 1

        try:
            self.session.add_all(episodes)
            self.session.commit()
            text = texts.msg_edit_epidsode_ok(name_s, self.le_season_num.text())
            show_msg(
                texts.edit_ok, text, QMessageBox.Information, QMessageBox.Ok)
            self.clear()
        except (IntegrityError, DBAPIError) as error:
            self.session.rollback()
            self.session.commit()
            text = texts.msg_edit_episode_error(
                name_s,  self.le_season_num.text())
            show_msg(texts.insert_error, text, QMessageBox.Critical,
                     QMessageBox.Close, str(error))
예제 #2
0
    def edit_series(self):
        """
        Save the edit to the database.
        """
        if not self.le_title.text() or not self.le_year:
            show_msg(texts.insert_error, texts.no_title, QMessageBox.Warning,
                     QMessageBox.Close)
        else:
            self.series.name = self.le_title.text()
            self.series.original_name = self.le_original_title.text()
            self.series.year = self.le_year.text()
            self.series.seasons = self.le_seasons.text()

            if self.le_poster.text():
                self.series.poster = self.le_poster.text()
            else:
                self.series.poster = '../images/poster_placeholder.png'

            self.series.web_url = self.le_web_url.text()
            self.series.summary = self.le_summary.toPlainText()

            id, name = get_combobox_info(self.cb_media)
            if id:
                self.series.media_id = id

            self.series.keyword_id = db_get_id(self.session, self.cb_keyword,
                                               Keyword())

            self.series.category_1_id = db_get_id(self.session,
                                                  self.cb_category_1,
                                                  Category())

            self.series.category_2_id = db_get_id(self.session,
                                                  self.cb_category_2,
                                                  Category())

            try:
                self.session.commit()
                text = texts.msg_insert_ok(self.series.name)
                show_msg(texts.insert_ok, text, QMessageBox.Information,
                         QMessageBox.Close)
                self.clear()
            except (DBAPIError, SQLAlchemyError) as error:
                self.session.rollback()
                self.session.commit()
                text = texts.msg_edit_erro(self.series.name)
                show_msg(texts.insert_error, text, QMessageBox.Critical,
                         QMessageBox.Close, str(error))
            else:
                try:
                    self.series.view = write_series_html(
                        self.session, self.series)
                    self.session.add(self.series)
                    self.session.commit()
                except SQLAlchemyError as error:
                    self.session.rollback()
                    self.session.commit()
                    show_msg(texts.insert_error, texts.html_write,
                             QMessageBox.Critical, QMessageBox.Close,
                             str(error))
예제 #3
0
    def query_title(self):
        """
        Search movie by selected title in QCombobox.
        """
        id, name = get_combobox_info(self.cb_title)
        movie = self.session.query(Movie).get(id)

        self.set_query_title(movie)
예제 #4
0
    def query_title(self):
        """
        Search series by selected title in QCombobox.
        """
        id, name = get_combobox_info(self.cb_title)
        series = self.session.query(Series).get(id)

        self.set_query_title(series)
예제 #5
0
    def selected_season(self):
        id_n, name_n = get_combobox_info(self.cb_season_num)
        id_y, name_y = get_combobox_info(self.cb_year)

        if id_n != 0:
            self.season = self.session.query(Season).get(id_n)
        elif id_y != 0:
            self.season = self.session.query(Season).get(id_y)
        else:
            return

        self.le_season_num.setText(str(self.season.season_num))
        self.le_year.setText(self.season.year)
        id_m = self.season.media_id
        self.set_combobox_value(self.cb_media, Media, id_m)
        self.episodes_all = self.session.query(Episode).\
            filter(Episode.season_id == self.season.id).all()
        self.populated_table_cast()
        self.populated_table_episode()
예제 #6
0
    def query_title(self):
        """
        Search movie by selected title in QCombobox.
        """
        id, name = get_combobox_info(self.cb_title)
        if self.type == 'movie':
            query = self.session.query(Movie).get(id)
        else:
            query = self.session.query(Series).get(id)

        self.set_table_title(query)
예제 #7
0
    def selected_movie(self):
        """
        When movie is selected search director values in database.
        """
        self.cb_select.currentIndexChanged.disconnect()
        self.id, name = get_combobox_info(self.cb_select)

        self.movie_director = self.session.query(MovieDirector). \
                filter(MovieDirector.movie_id == self.id).all()

        for md in self.movie_director:
            self.set_table_values(md)
예제 #8
0
    def selected_series(self):
        """
        When series is selected search creator values in database.
        """
        self.cb_select.currentIndexChanged.disconnect()
        self.id, name = get_combobox_info(self.cb_select)

        self.series_creator = self.session.query(SeriesCreator). \
                filter(SeriesCreator.series_id == self.id).all()

        for mc in self.series_creator:
            self.set_table_values(mc)
예제 #9
0
    def query_box(self):
        """
        Search movie by selected title in QCombobox.
        """
        id, name = get_combobox_info(self.cb_box)
        if id != 0:
            movies = self.session.query(Movie).filter(Movie.box_id == id).all()
        else:
            movies = self.session.query(Movie).filter(
                Movie.box_id.is_(None)).all()

        self.set_table(movies)
예제 #10
0
    def query_year(self):
        """
        Search movie by selected title in QCombobox.
        """
        id, name = get_combobox_info(self.cb_year)
        if self.type == 'movie':
            query = self.session.query(Movie). \
                filter(Movie.year == name).order_by(Movie.year).all()
        else:
            query = self.session.query(Series). \
                filter(Series.year == name).order_by(Series.year).all()

        self.set_table(query)
예제 #11
0
    def selected_season(self):
        self.cb_seasons.currentIndexChanged.disconnect()
        self.id, name = get_combobox_info(self.cb_seasons)
        self.season_cast = self.session.query(SeasonCast). \
                filter(SeasonCast.season_id == self.id).\
                order_by(SeasonCast.order, desc(SeasonCast.star)).all()

        for sc in self.season_cast:
            actor = sc.cast.actors
            character = sc.cast.characters
            star = sc.star
            order = sc.order
            self.set_table_values(sc.id, actor, character, order, star)
예제 #12
0
    def selected_series(self):
        """
        Search MovieCast or SeriesCast values according object selected.
        """
        self.cb_series.currentIndexChanged.disconnect()
        id, name = get_combobox_info(self.cb_series)
        seasons = self.session.query(Season).\
            filter(Season.series_id == id).all()
        self.cb_seasons.clear()
        self.cb_seasons.addItem('', 0)
        for season in seasons:
            self.cb_seasons.addItem(str(season.season_num), season.id)

        self.cb_seasons.currentIndexChanged.connect(self.selected_season)
예제 #13
0
    def selected_series(self):
        """
        Get values in SeriesCast to fill table cast.
        """
        id, name = get_combobox_info(self.cb_series)
        season = self.session.query(Season).\
            filter(Season.series_id == id).all()

        self.cb_season_num.addItem('', 0)
        self.cb_year.addItem('', 0)

        for s in season:
            self.cb_season_num.addItem(str(s.season_num), s.id)
            self.cb_year.addItem(s.year, s.id)

        self.cb_season_num.currentIndexChanged.connect(self.selected_season)
        self.cb_year.currentIndexChanged.connect(self.selected_season)
예제 #14
0
    def save_series_creator(self):
        """
        Save the edit to the database.
        """
        for i in range(self.chbox_count):
            if self.chbox_del[i].isChecked():
                id = self.chbox_del[i].text()

                try:
                    result = self.session.query(SeriesCreator).\
                        filter(SeriesCreator.id == id).delete()
                except ObjectDeletedError:
                    continue

                if result == 1:
                    self.session.commit()

                continue

            self.series_creator[i].creator_id = db_get_id(
                self.session, self.cb_creator[i], Creator())
            self.series_creator[i].order = self.le[i].text()

            db_insert_obj(self.session, self.series_creator[i])

        for i in range(self.chbox_count, self.rows):
            id, name = get_combobox_info(self.cb_creator[i])
            order = self.le[i].text()

            if id != 0:
                series_creator = SeriesCreator(
                    series_id=self.id, creator_id=id, order=order)
                self.session.add(series_creator)
            else:
                creator = db_insert_obj(self.session, Creator(name=name))
                series_creator = SeriesCreator(
                    series_id=self.id, creator_id=creator.id, order=order)
                self.session.add(series_creator)

        series = self.session.query(Series).get(self.id)
        self.session.commit()

        series.view = write_series_html(self.session, series)
        self.session.commit()

        self.clear()
예제 #15
0
    def save_movie_director(self):
        """
        Save the edit to the database.
        """
        for i in range(self.chbox_count):
            if self.chbox_del[i].isChecked():
                id = self.chbox_del[i].text()

                try:
                    result = self.session.query(MovieDirector).\
                        filter(MovieDirector.id == id).delete()
                except ObjectDeletedError:
                    continue

                if result == 1:
                    self.session.commit()

                continue

            self.movie_director[i].director_id = db_get_id(
                self.session, self.cb_director[i], Director())
            self.movie_director[i].order = self.le[i].text()

            db_insert_obj(self.session, self.movie_director[i])

        for i in range(self.chbox_count, self.rows):
            id, name = get_combobox_info(self.cb_director[i])
            order = self.le[i].text()

            if id != 0:
                movie_director = MovieDirector(
                    movie_id=self.id, director_id=id, order=order)
                self.session.add(movie_director)
            else:
                director = db_insert_obj(self.session, Director(name=name))
                movie_director = MovieDirector(
                    movie_id=self.id, director_id=director.id, order=order)
                self.session.add(movie_director)

        movie = self.session.query(Movie).get(self.id)
        self.session.commit()

        movie.view = write_movie_html(self.session, movie)
        self.session.commit()

        self.clear()
예제 #16
0
    def query_media(self):
        """
        Search movie by selected title in QCombobox.
        """
        id, name = get_combobox_info(self.cb_media)
        if self.type == 'movie' and id != 0:
            query = self.session.query(Movie). \
                filter(Movie.media_id == id).order_by(Movie.name).all()
        elif self.type == 'movie' and id == 0:
            query = self.session.query(Movie). \
                filter(Movie.media_id.is_(None)).order_by(Movie.name).all()
        elif self.type == 'series' and id != 0:
            query = self.session.query(Series). \
                filter(Series.media_id == id).order_by(Series.media_id).all()
        else:
            query = self.session.query(Series). \
                filter(Series.media_id.is_(None)).order_by(Series.media_id).all()

        self.set_table(query)
예제 #17
0
    def delete_series(self):
        """
        Delete the series in the database.
        """
        result = 0
        id, name = get_combobox_info(self.cb_select)

        text = texts.msg_before_delete(name)
        answer = QMessageBox.information(self, texts.warning, text,
                                         QMessageBox.Yes | QMessageBox.No,
                                         QMessageBox.No)
        if answer == QMessageBox.Yes:
            self.series = self.session.query(Series).get(id)
            result = self.session.query(Series).filter(
                Series.id == id).delete()

        if result == 1:
            self.session.commit()
            text = texts.msg_delete_ok(name)
            show_msg(texts.delete_ok, text, QMessageBox.Information,
                     QMessageBox.Close)

            self.clear()
예제 #18
0
    def obj_selected(self):
        """
        When object is selected in combobox get it in database and start new
        windows to edit it.
        """
        id, name = get_combobox_info(self.cb_select)

        self.obj = self.session.query(self.cls).get(id)

        if self.obj and id != 0:
            self.lb_select.setEnabled(False)
            self.lb_select.setHidden(True)
            self.cb_select.setEnabled(False)
            self.cb_select.setHidden(True)
            self.pb_select.setEnabled(False)
            self.pb_select.setHidden(True)
            self.pb_help_1.setEnabled(False)
            self.pb_help_1.setHidden(True)
            self.hbox_select.setEnabled(False)

            self.vbox_main.setContentsMargins(20, 0, 20, 20)
            self.setGeometry(0, 0, 511, 205)

            self.lb.setEnabled(True)
            self.lb.setHidden(False)
            self.le.setEnabled(True)
            self.le.setHidden(False)
            self.pb_save.setEnabled(True)
            self.pb_save.setHidden(False)
            self.pb_help_2.setEnabled(True)
            self.pb_help_2.setHidden(False)
            self.pb_leave.setEnabled(True)
            self.pb_leave.setHidden(False)
            self.le.setText(self.obj.name)

            self.le.returnPressed.connect(self.edit_object)
            self.cb_select.currentIndexChanged.disconnect()
예제 #19
0
 def query_category(self):
     """
     Search movie by selected title in QCombobox.
     """
     id, name = get_combobox_info(self.cb_category)
     if self.type == 'movie' and id != 0:
         query = self.session.query(Movie).\
             filter(or_(Movie.category_1_id == id, Movie.category_2_id == id)).\
             order_by(Movie.name).all()
     elif self.type == 'movie' and id == 0:
         query = self.session.query(Movie).\
             filter(Movie.category_1_id.is_(None),
                    Movie.category_2_id.is_(None)).\
             order_by(Movie.name).all()
     elif self.type == 'series' and id != 0:
         query = series = self.session.query(Series).\
         filter(or_(Series.category_1_id == id, Series.category_2_id == id)).\
         order_by(Series.name).all()
     else:
         query = self.session.query(Series). \
             filter(Series.category_1_id.is_(None),
                    Series.category_2_id.is_(None)). \
             order_by(Movie.name).all()
     self.set_table(query)
예제 #20
0
    def insert_movie(self):
        """
        Insert movie in database.

        :return: The errors in dictionary containing the errors.
        """
        self.movie = Movie()

        if not self.le_title.text() or not self.le_year:
            show_msg(texts.insert_error, texts.no_title, QMessageBox.Warning,
                     QMessageBox.Close)
        else:
            self.movie.name = self.le_title.text()
            self.movie.original_name = self.le_original_title.text()
            self.movie.year = self.le_year.text()
            self.movie.time = self.le_time.text()

            if self.le_imdb_url.isEnabled():
                self.movie.search_url = self.le_imdb_url.text()
            elif self.le_ad_url.isEnabled():
                self.movie.search_url = self.le_ad_url.text()

            if self.le_poster.text():
                self.movie.poster = self.le_poster.text()
            else:
                self.movie.poster = '../images/poster_placeholder.png'

            self.movie.web_url = self.le_web_url.text()
            self.movie.summary = self.le_summary.toPlainText()

            id, name = get_combobox_info(self.cb_media)
            if id:
                self.movie.media_id = id

            self.movie.box_id = db_get_id(self.session, self.cb_box, Box())

            self.movie.keyword_id = db_get_id(self.session, self.cb_keyword,
                                              Keyword())

            self.movie.category_1_id = db_get_id(self.session,
                                                 self.cb_category_1,
                                                 Category())

            self.movie.category_2_id = db_get_id(self.session,
                                                 self.cb_category_2,
                                                 Category())

            id, name = get_combobox_info(self.cb_director)
            director = db_get_obj(self.session, id, name, Director)
            if director:
                movie_director = MovieDirector(order=1, director=director)
                self.movie.directors.append(movie_director)

            i = 0
            old_order = 0
            for cb in self.cb_actor:
                actor_id = db_get_id(self.session, cb, Actor())

                character_id = db_get_id(self.session, self.cb_character[i],
                                         Character())

                if actor_id and character_id:
                    cast = Cast(actor_id=actor_id, character_id=character_id)
                    try:
                        self.session.add(cast)
                        self.session.commit()
                    # If except most probably is because cast exist so we try to get it
                    except IntegrityError:
                        self.session.rollback()
                        self.session.commit()
                        cast = self.session.query(Cast).filter(
                            Cast.actor_id == actor_id,
                            Cast.character_id == character_id).first()
                    except DBAPIError as error:
                        self.session.rollback()
                        self.session.commit()
                        _, actor = get_combobox_info(cb)
                        _, character = get_combobox_info(self.cb_character[i])
                        text = texts.cast_error + actor + ' ' + character + '.'
                        show_msg(texts.db_error, text, QMessageBox.Critical,
                                 QMessageBox.Close, str(error))
                        continue

                    if cast:
                        order = int(self.le_order[i].text())
                        if order == old_order:
                            order += 1
                            old_order = order
                        else:
                            old_order = order

                        movie_cast = MovieCast(
                            order=order,
                            star=self.chbox_star[i].isChecked(),
                            cast=cast)
                        self.movie.movie_cast.append(movie_cast)

                i += 1

            hour_now = datetime.datetime.utcnow()
            self.movie.date_create = hour_now
            self.movie.date_edit = hour_now

            try:
                self.session.add(self.movie)
                self.session.commit()
                text = texts.msg_insert_ok(self.movie.name)
                show_msg(texts.insert_ok, text, QMessageBox.Information,
                         QMessageBox.Close)
            except IntegrityError as error:
                self.session.rollback()
                self.session.commit()
                show_msg(texts.insert_error, texts.movie_exist,
                         QMessageBox.Critical, QMessageBox.Close, str(error))
            except (DBAPIError, SQLAlchemyError) as error:
                self.session.rollback()
                self.session.commit()
                text = texts.msg_insert_erro(self.movie.name)
                show_msg(texts.insert_error, text, QMessageBox.Critical,
                         QMessageBox.Close, str(error))
            else:
                try:
                    self.movie.view = write_movie_html(self.session,
                                                       self.movie)
                    self.session.add(self.movie)
                    self.session.commit()
                except SQLAlchemyError as error:
                    self.session.rollback()
                    self.session.commit()
                    show_msg(texts.insert_error, texts.html_write,
                             QMessageBox.Critical, QMessageBox.Close,
                             str(error))
예제 #21
0
    def fill_series(self):
        """
         After selecting the series, fill in all the fields with values
         referring to the same.
         """
        self.cb_select.currentIndexChanged.disconnect()
        id, name = get_combobox_info(self.cb_select)

        self.series = self.session.query(Series).get(id)

        self.le_title.setText(self.series.name)
        self.le_original_title.setText(self.series.original_name)
        self.le_year.setText(self.series.year)
        self.le_seasons.setText(self.series.seasons)
        self.le_poster.setText(self.series.poster)
        self.le_web_url.setText(self.series.web_url)
        self.le_search_url.setText(self.series.search_url)

        if self.series.search_url:
            self.lb_url.setText('<a href=\"' + self.series.search_url +
                                '">Abrir URL de pesquisa</a>')

        self.le_summary.setText(self.series.summary)

        if self.series.media_id:
            self.set_combobox_value(self.cb_media, Media, self.series.media_id)
        else:
            self.cb_media.setItemText(0, '')

        if self.series.keyword_id:
            self.set_combobox_value(self.cb_keyword, Keyword,
                                    self.series.keyword_id)
        else:
            self.cb_keyword.setItemText(0, '')

        if self.series.category_1_id:
            self.set_combobox_value(self.cb_category_1, Category,
                                    self.series.category_1_id)
        else:
            self.self.cb_category_1.setItemText(0, '')

        if self.series.category_2_id:
            self.set_combobox_value(self.cb_category_2, Category,
                                    self.series.category_2_id)
        else:
            self.self.cb_category_2.setItemText(0, '')

        if self.series.creators:
            total = len(self.series.creators) - 1
            i = 0
            creators = ''
            for mc in self.series.creators:
                if i == total:
                    creators += mc.creator.name
                else:
                    creators += mc.creator.name + ', '

                i += 1
            self.le_creator.setText(creators)

        if self.series.series_cast:
            total = len(self.series.series_cast)
            for i in range(total):
                actor = self.series.series_cast[i].cast.actors.name
                character = self.series.series_cast[i].cast.characters.name
                self.table_add_rows(actor, character,
                                    self.series.series_cast[i].star)