def __create_movie(self, file_path):
     movie = Movie()
     movie.fill_with_file(file_path)
     movie_guessed_info = movie.get_guessed_info()
     movie.fetch_tmdb_info(movie_guessed_info.get_title(),
                           movie_guessed_info.get_year(),
                           movie_guessed_info.get_language())
     movie.generate_new_name(preferences.get_renaming_rule())
     return movie
Example #2
0
 def create_movie(self, file_path):
     # create a new movie object
     movie = Movie()
     movie.fill_with_file(file_path)
     movie_guessed_info = movie.get_guessed_info()
     movie.fetch_tmdb_info(movie_guessed_info.get_title(), movie_guessed_info.get_year(),
                           movie_guessed_info.get_language())
     # generate new movie name based on renaming rule
     movie.generate_new_name(preferences.get_renaming_rule())
     return movie
Example #3
0
 def load_movies_run(self, filepaths):
     renaming_rule = utils.preferences.value("renaming_rule").toString()
     # loop on file paths
     for filepath in filepaths:
         # set loading label text, show current file name
         self.ui.label_loading.setText(QApplication.translate('GUI', "Getting information from ")\
                                        + os.path.split(filepath)[1])
         # create a new movie object
         movie = Movie(filepath)
         # generate new movie name based on renaming rule
         movie.generate_new_name(renaming_rule)
         # add movie to list
         self.movies.append(movie)
         # insert a new row in movie table
         self.ui.table_movies.insertRow(self.ui.table_movies.rowCount())
         # create a table item with original movie file name
         item_original_name = QTableWidgetItem(movie.original_file_name())
         item_original_name.setForeground(QBrush(Qt.black))
         self.ui.table_movies.setItem(self.ui.table_movies.rowCount() - 1, 0, item_original_name)
         # create a table item with new movie file name
         item_new_name = QTableWidgetItem(movie.new_file_name())
         item_new_name.setForeground(QBrush(Qt.black))
         self.ui.table_movies.setItem(self.ui.table_movies.rowCount() - 1, 1, item_new_name)
     self.load_movies_finished.emit()
Example #4
0
class RenamingRuleDialog(QDialog):

    TITLE = QApplication.translate('RenamingRuleDialog', "Title")
    ORIGINAL_TITLE = QApplication.translate('RenamingRuleDialog', "Original title")
    YEAR = QApplication.translate('RenamingRuleDialog', "Year")
    DIRECTOR = QApplication.translate('RenamingRuleDialog', "Director")
    DURATION = QApplication.translate('RenamingRuleDialog', "Duration")
    LANGUAGE = QApplication.translate('RenamingRuleDialog', "Language")
    OPENED_ROUND_BRACKET = "("
    CLOSED_ROUND_BRACKET = ")"
    OPENED_SQUARE_BRACKET = "["
    CLOSED_SQUARE_BRACKET = "]"
    OPENED_CURLY_BRACKET = "{"
    CLOSED_CURLY_BRACKET = "}"

    RENAMING_TO_VISUAL_RULE = {
        Movie.TITLE:TITLE,
        Movie.ORIGINAL_TITLE:ORIGINAL_TITLE,
        Movie.YEAR:YEAR,
        Movie.DIRECTOR:DIRECTOR,
        Movie.DURATION:DURATION,
        Movie.LANGUAGE:LANGUAGE,
        OPENED_ROUND_BRACKET:OPENED_ROUND_BRACKET,
        CLOSED_ROUND_BRACKET:CLOSED_ROUND_BRACKET,
        OPENED_SQUARE_BRACKET:OPENED_SQUARE_BRACKET,
        CLOSED_SQUARE_BRACKET:CLOSED_SQUARE_BRACKET,
        OPENED_CURLY_BRACKET:OPENED_CURLY_BRACKET,
        CLOSED_CURLY_BRACKET:CLOSED_CURLY_BRACKET
    }

    VISUAL_TO_RENAMING_RULE = {
       TITLE:Movie.TITLE,
       ORIGINAL_TITLE:Movie.ORIGINAL_TITLE,
       YEAR:Movie.YEAR,
       DIRECTOR:Movie.DIRECTOR,
       DURATION:Movie.DURATION,
       LANGUAGE:Movie.LANGUAGE,
       OPENED_ROUND_BRACKET:OPENED_ROUND_BRACKET,
       CLOSED_ROUND_BRACKET:CLOSED_ROUND_BRACKET,
       OPENED_SQUARE_BRACKET:OPENED_SQUARE_BRACKET,
       CLOSED_SQUARE_BRACKET:CLOSED_SQUARE_BRACKET,
       OPENED_CURLY_BRACKET:OPENED_CURLY_BRACKET,
       CLOSED_CURLY_BRACKET:CLOSED_CURLY_BRACKET
   }

    def __init__(self, parent, preferences_dialog):
        QDialog.__init__(self, parent)

        self.ui = loadUi("renaming_rule_dialog.ui", self)

        self.ui.preferences_dialog = preferences_dialog

        # creates an example movie, used to test the renaming rule
        self.example_movie = Movie()

        self.populate_list_visual_rule()
        self.update_representations()
        renaming_rule = utils.preferences.value("renaming_rule").toString()
        self.update_example_movie(renaming_rule)

        ## slots connection
        self.ui.list_visual_rule.model().rowsInserted.connect(self.rule_changed)
        self.ui.list_visual_rule.model().rowsRemoved.connect(self.rule_changed)

        self.ui.button_remove_rule.clicked.connect(self.remove_rule)
        self.ui.button_clean_rule.clicked.connect(self.clean_rule)

        self.ui.button_add_title.clicked.connect(self.add_title)
        self.ui.button_add_original_title.clicked.connect(self.add_original_title)
        self.ui.button_add_year.clicked.connect(self.add_year)
        self.ui.button_add_director.clicked.connect(self.add_director)
        self.ui.button_add_duration.clicked.connect(self.add_duration)
        self.ui.button_add_language.clicked.connect(self.add_language)

        self.ui.button_add_round_brackets.clicked.connect(self.add_round_brackets)
        self.ui.button_add_square_brackets.clicked.connect(self.add_square_brackets)
        self.ui.button_add_curly_brackets.clicked.connect(self.add_curly_brackets)

        self.ui.button_show_preferences.clicked.connect(self.show_preferences)

        self.ui.button_close.clicked.connect(self.close)

    def populate_list_visual_rule(self):
        """
        populate renaming rule by rule read from settings
        """

        renaming_rule = utils.preferences.value("renaming_rule").toString()
        # split rule
        rules = renaming_rule.split('.')
        # if rule is empty, reset it to 'title'
        if rules[0] == '':
            rules[0] = Movie.TITLE
            renaming_rule = Movie.TITLE
            utils.preferences.setValue("renaming_rule", renaming_rule)
        visual_rule = []
        # loop on rules
        for rule in rules:
            visual_rule.append(self.RENAMING_TO_VISUAL_RULE[rule])
        self.ui.list_visual_rule.addItems(visual_rule)

    def update_representations(self):
        duration_index = utils.preferences.value("duration_representation").toInt()[0]
        duration_representation = PreferencesDialog.DURATION_REPRESENTATIONS[duration_index]
        self.ui.label_duration_representation.setText(duration_representation)

        language_index = utils.preferences.value("language_representation").toInt()[0]
        language_representation = PreferencesDialog.LANGUAGE_REPRESENTATIONS[language_index]
        self.ui.label_language_representation.setText(language_representation)

        separator_index = utils.preferences.value("words_separator").toInt()[0]
        separator_representation = PreferencesDialog.WORDS_SEPARATORS_REPRESENTATIONS[separator_index]
        self.ui.label_separator_representation.setText(separator_representation)

    def update_example_movie(self, renaming_rule):
        # generate new name for example movie
        example_movie_new_name = self.example_movie.generate_new_name(renaming_rule)
        # show it on label
        self.ui.label_example_movie_name.setText(example_movie_new_name)

    def rule_changed(self, parent = None, start = None, end = None):
        """
        called when renaming rule changes
        
        creates and saves new renaming rule, and generate the movie example's new name
        """

        rule = []
        for index in range(self.ui.list_visual_rule.count()):
            text = self.ui.list_visual_rule.item(index).text()
            # when an item is moved inside the list_visual_rule, firstly 
            # a new empty item is inserted into the destination location, then 
            # the item from source location is deleted. that function is called 
            # for both events (insertion and deletion), and when is called for
            # the insertion event after a list items move, the list contains an empty item,
            # which is a kind of error. 
            if text != '':
                rule.append(self.VISUAL_TO_RENAMING_RULE[text])
        # creates renaming rule
        renaming_rule = '.'.join(rule)
        #save renaming rule on settings
        utils.preferences.setValue("renaming_rule", renaming_rule)
        #update example movie
        self.update_example_movie(renaming_rule)

    def remove_rule(self):
        """
        removes selected rule
        """

        # get selected items in rule
        selected_items = self.ui.list_visual_rule.selectedItems()
        # remove its from list
        for item in reversed(selected_items):
            row = self.ui.list_visual_rule.row(item)
            self.ui.list_visual_rule.takeItem(row)

    def clean_rule(self):
        """
        cleans rule (remove all renaming rules)
        """

        self.ui.list_visual_rule.clear()
        # needs to call rule_changed because clear() doesn't 
        # throw any signal
        self.rule_changed()

    def add_title(self):
        """
        add title to rule
        """

        self.ui.list_visual_rule.addItem(self.TITLE)

    def add_original_title(self):
        """
        add aka to rule
        """

        self.ui.list_visual_rule.addItem(self.ORIGINAL_TITLE)

    def add_year(self):
        """
        add year to rule
        """

        self.ui.list_visual_rule.addItem(self.YEAR)

    def add_director(self):
        """
        add director to rule
        """

        self.ui.list_visual_rule.addItem(self.DIRECTOR)

    def add_duration(self):
        """
        add runtime to rule
        """

        self.ui.list_visual_rule.addItem(self.DURATION)

    def add_language(self):
        """
        add language to rule
        """

        self.ui.list_visual_rule.addItem(self.LANGUAGE)

    def add_round_brackets(self):
        """
        add opened and closed round brackets to rule
        """

        self.ui.list_visual_rule.addItem(self.OPENED_ROUND_BRACKET)
        self.ui.list_visual_rule.addItem(self.CLOSED_ROUND_BRACKET)

    def add_square_brackets(self):
        """
        add opened and closed square brackets to rule
        """

        self.ui.list_visual_rule.addItem(self.OPENED_SQUARE_BRACKET)
        self.ui.list_visual_rule.addItem(self.CLOSED_SQUARE_BRACKET)

    def add_curly_brackets(self):
        """
        add opened and closed curly brackets to rule
        """

        self.ui.list_visual_rule.addItem(self.OPENED_CURLY_BRACKET)
        self.ui.list_visual_rule.addItem(self.CLOSED_CURLY_BRACKET)

    def show_preferences(self):
        self.ui.preferences_dialog.exec_()
        renaming_rule = utils.preferences.value("renaming_rule").toString()
        self.update_representations()
        # update example movie
        self.update_example_movie(renaming_rule)

    def close(self):
        send_usage_statistics()
        self.accept()
Example #5
0
class RenamingRuleDialog(QDialog):
    TITLE = "Title"
    ORIGINAL_TITLE = "Original title"
    YEAR = "Year"
    DIRECTOR = "Director"
    DURATION = "Duration"
    LANGUAGE = "Language"
    OPENED_ROUND_BRACKET = "("
    CLOSED_ROUND_BRACKET = ")"
    OPENED_SQUARE_BRACKET = "["
    CLOSED_SQUARE_BRACKET = "]"
    OPENED_CURLY_BRACKET = "{"
    CLOSED_CURLY_BRACKET = "}"

    RENAMING_TO_VISUAL_RULE = {
        Movie.TITLE: TITLE,
        Movie.ORIGINAL_TITLE: ORIGINAL_TITLE,
        Movie.YEAR: YEAR,
        Movie.DIRECTOR: DIRECTOR,
        Movie.DURATION: DURATION,
        Movie.LANGUAGE: LANGUAGE,
        OPENED_ROUND_BRACKET: OPENED_ROUND_BRACKET,
        CLOSED_ROUND_BRACKET: CLOSED_ROUND_BRACKET,
        OPENED_SQUARE_BRACKET: OPENED_SQUARE_BRACKET,
        CLOSED_SQUARE_BRACKET: CLOSED_SQUARE_BRACKET,
        OPENED_CURLY_BRACKET: OPENED_CURLY_BRACKET,
        CLOSED_CURLY_BRACKET: CLOSED_CURLY_BRACKET
    }

    VISUAL_TO_RENAMING_RULE = {
        TITLE: Movie.TITLE,
        ORIGINAL_TITLE: Movie.ORIGINAL_TITLE,
        YEAR: Movie.YEAR,
        DIRECTOR: Movie.DIRECTOR,
        DURATION: Movie.DURATION,
        LANGUAGE: Movie.LANGUAGE,
        OPENED_ROUND_BRACKET: OPENED_ROUND_BRACKET,
        CLOSED_ROUND_BRACKET: CLOSED_ROUND_BRACKET,
        OPENED_SQUARE_BRACKET: OPENED_SQUARE_BRACKET,
        CLOSED_SQUARE_BRACKET: CLOSED_SQUARE_BRACKET,
        OPENED_CURLY_BRACKET: OPENED_CURLY_BRACKET,
        CLOSED_CURLY_BRACKET: CLOSED_CURLY_BRACKET
    }

    def __init__(self, parent, preferences_dialog):
        QDialog.__init__(self, parent)

        self.ui = loadUi("renaming_rule_dialog.ui", self)

        self.ui.preferences_dialog = preferences_dialog

        # creates an example movie, used to test the renaming rule
        self.example_movie = Movie()

        # TODO
        # self.populate_list_visual_rule()
        # self.update_representations()
        # TODO
        # renaming_rule = utils.preferences.value("renaming_rule").toString()
        # self.update_example_movie(renaming_rule)

        ## slots connection
        self.ui.list_visual_rule.model().rowsInserted.connect(self.rule_changed)
        self.ui.list_visual_rule.model().rowsRemoved.connect(self.rule_changed)

        self.ui.button_remove_rule.clicked.connect(self.remove_rule)
        self.ui.button_clean_rule.clicked.connect(self.clean_rule)

        self.ui.button_add_title.clicked.connect(self.add_title)
        self.ui.button_add_original_title.clicked.connect(self.add_original_title)
        self.ui.button_add_year.clicked.connect(self.add_year)
        self.ui.button_add_director.clicked.connect(self.add_director)
        self.ui.button_add_duration.clicked.connect(self.add_duration)
        self.ui.button_add_language.clicked.connect(self.add_language)

        self.ui.button_add_round_brackets.clicked.connect(self.add_round_brackets)
        self.ui.button_add_square_brackets.clicked.connect(self.add_square_brackets)
        self.ui.button_add_curly_brackets.clicked.connect(self.add_curly_brackets)

        self.ui.button_show_preferences.clicked.connect(self.show_preferences)

        self.ui.button_close.clicked.connect(self.close)

    def populate_list_visual_rule(self):
        """
        populate renaming rule by rule read from settings
        """

        renaming_rule = preferences.get_renaming_rule()
        # split rule
        rules = renaming_rule.split('.')
        # if rule is empty, reset it to 'title'
        if rules[0] == '':
            rules[0] = Movie.TITLE
            renaming_rule = Movie.TITLE
            preferences.set_renaming_rule(renaming_rule)
        visual_rule = []
        # loop on rules
        for rule in rules:
            visual_rule.append(self.RENAMING_TO_VISUAL_RULE[rule])
        self.ui.list_visual_rule.addItems(visual_rule)

    def update_representations(self):
        duration_index = preferences.get_duration_representation()
        duration_representation = PreferencesDialog.DURATION_REPRESENTATIONS[duration_index]
        self.ui.label_duration_representation.setText(duration_representation)

        language_index = preferences.get_language_representation()
        language_representation = PreferencesDialog.LANGUAGE_REPRESENTATIONS[language_index]
        self.ui.label_language_representation.setText(language_representation)

        separator_index = preferences.get_words_separator()
        separator_representation = PreferencesDialog.WORDS_SEPARATORS_REPRESENTATIONS[separator_index]
        self.ui.label_separator_representation.setText(separator_representation)

    def update_example_movie(self, renaming_rule):
        # generate new name for example movie
        example_movie_new_name = self.example_movie.generate_new_name(renaming_rule)
        # show it on label
        self.ui.label_example_movie_name.setText(example_movie_new_name)

    def rule_changed(self, parent=None, start=None, end=None):
        """
        called when renaming rule changes

        creates and saves new renaming rule, and generate the movie example's new name
        """

        rule = []
        for index in range(self.ui.list_visual_rule.count()):
            text = self.ui.list_visual_rule.item(index).text()
            # when an item is moved inside the list_visual_rule, firstly
            # a new empty item is inserted into the destination location, then
            # the item from source location is deleted. that function is called
            # for both events (insertion and deletion), and when is called for
            # the insertion event after a list items move, the list contains an empty item,
            # which is a kind of error.
            if text != '':
                rule.append(self.VISUAL_TO_RENAMING_RULE[text])
        # creates renaming rule
        renaming_rule = '.'.join(rule)
        # save renaming rule on settings
        preferences.set_renaming_rule(renaming_rule)
        # update example movie
        self.update_example_movie(renaming_rule)

    def remove_rule(self):
        """
        removes selected rule
        """

        # get selected items in rule
        selected_items = self.ui.list_visual_rule.selectedItems()
        # remove its from list
        for item in reversed(selected_items):
            row = self.ui.list_visual_rule.row(item)
            self.ui.list_visual_rule.takeItem(row)

    def clean_rule(self):
        """
        cleans rule (remove all renaming rules)
        """

        self.ui.list_visual_rule.clear()
        # needs to call rule_changed because clear() doesn't
        # throw any signal
        self.rule_changed()

    def add_title(self):
        """
        add title to rule
        """

        self.ui.list_visual_rule.addItem(self.TITLE)

    def add_original_title(self):
        """
        add aka to rule
        """

        self.ui.list_visual_rule.addItem(self.ORIGINAL_TITLE)

    def add_year(self):
        """
        add year to rule
        """

        self.ui.list_visual_rule.addItem(self.YEAR)

    def add_director(self):
        """
        add director to rule
        """

        self.ui.list_visual_rule.addItem(self.DIRECTOR)

    def add_duration(self):
        """
        add runtime to rule
        """

        self.ui.list_visual_rule.addItem(self.DURATION)

    def add_language(self):
        """
        add language to rule
        """

        self.ui.list_visual_rule.addItem(self.LANGUAGE)

    def add_round_brackets(self):
        """
        add opened and closed round brackets to rule
        """

        self.ui.list_visual_rule.addItem(self.OPENED_ROUND_BRACKET)
        self.ui.list_visual_rule.addItem(self.CLOSED_ROUND_BRACKET)

    def add_square_brackets(self):
        """
        add opened and closed square brackets to rule
        """

        self.ui.list_visual_rule.addItem(self.OPENED_SQUARE_BRACKET)
        self.ui.list_visual_rule.addItem(self.CLOSED_SQUARE_BRACKET)

    def add_curly_brackets(self):
        """
        add opened and closed curly brackets to rule
        """

        self.ui.list_visual_rule.addItem(self.OPENED_CURLY_BRACKET)
        self.ui.list_visual_rule.addItem(self.CLOSED_CURLY_BRACKET)

    def show_preferences(self):
        self.ui.preferences_dialog.exec_()
        # TODO
        # renaming_rule = utils.preferences.value("renaming_rule").toString()
        # self.update_representations()
        # update example movie
        # self.update_example_movie(renaming_rule)

    def close(self):
        # TODO
        # send_usage_statistics()
        self.accept()