class MainWindow(QMainWindow):
    argv = []

    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

    @pyqtSlot()
    def on_actionAbout_triggered(self):
        dialog = QDialog()
        dialog.ui = Ui_About()
        dialog.ui.setupUi(dialog)
        dialog.setAttribute(Qt.WA_DeleteOnClose)
        dialog.exec_()

    @pyqtSlot()
    def on_pushButton_pressed(self):
        url = self.ui.lineEdit.text()
        # Fill the row
        if len(url) > 10:
            self.ui.url_list.addItem(url)
        self.ui.lineEdit.setText('')

    @pyqtSlot()
    def on_clear_list_pressed(self):
        self.ui.url_list.clear()

    # Execute the downloader
    @pyqtSlot()
    def on_pushButton_2_pressed(self):
        if self.ui.url_list.count() > 0:
            self.check_settings()
            for x in range(0, self.ui.url_list.count()):
                self.argv.append(self.ui.url_list.item(x).text())
            try:
                subprocess.Popen([sys.executable, 'youtube_dl/__main__.py'] + self.argv, shell=False)
            except Exception as e:
                print(e)
            self.ui.url_list.clear()
        else:
            print("ERROR: No URLs were given.")
        self.argv.clear()

    @pyqtSlot()
    def on_load_batch_file_pressed(self):
            file = QFileDialog.getOpenFileName()
            with open(file[0]) as f:
                lines = f.read().splitlines()
            self.batch_load(lines)

    def check_settings(self):
        # Video selection
        if len(self.ui.age_limit.text()) > 0 and self.is_integer(self.ui.age_limit.text()):
            self.argv.append("--age-limit")
            self.argv.append(self.ui.age_limit.text())
        if len(self.ui.min_views.text()) > 0 and self.is_integer(self.ui.min_views.text()):
            self.argv.append("--min-views")
            self.argv.append(self.ui.min_views.text())
        if len(self.ui.max_views.text()) > 0 and self.is_integer((self.ui.max_views.text())):
            self.argv.append("--max-views")
            self.argv.append(self.ui.max_views.text())
        if len(self.ui.min_file_size.text()) > 0 and self.is_integer(self.ui.min_file_size.text()):
            self.argv.append("--min-filesize")
            self.argv.append(self.ui.min_file_size.text())
        if len(self.ui.max_file_size.text()) > 0 and self.is_integer(self.ui.max_file_size.text()):
            self.argv.append("--max_filesize")
            self.argv.append(self.ui.max_file_size.text())
        if len(self.ui.playlist_start.text()) > 0 and self.is_integer(self.ui.playlist_start.text()):
            self.argv.append("--playlist-start")
            self.argv.append(self.ui.playlist_start.text())
        if len(self.ui.playlist_end.text()) > 0 and self.is_integer(self.ui.playlist_end.text()):
            self.argv.append("--playlist-end")
            self.argv.append(self.ui.playlist_start.text())
        if len(self.ui.playlist_list.text()) > 0:
            self.argv.append("--playlist-items")
            self.argv.append(self.ui.playlist_list.text())
        if len(self.ui.on_date.text()) > 0:
            self.argv.append("--date")
            self.argv.append(self.ui.on_date.text())
        if len(self.ui.date_before.text()) > 0 and not len(self.ui.on_date.text()) > 0:
            self.argv.append("--datebefore")
            self.argv.append(self.ui.date_before.text())
            print("On date field is filled, skipping before date field.")
        if len(self.ui.date_after.text()) > 0 and not len(self.ui.on_date.text()) > 0:
            self.argv.append("--dateafter")
            self.argv.append(self.ui.date_after.text())
            print("On date field is filled, skipping after date field.")
        # Filesystem options
        if self.ui.video_id_name.isChecked():
            self.argv.append("--id")
        if self.ui.restrict_filename.isChecked():
            self.argv.append("--restrict-filenames")
        if self.ui.no_overwrites.isChecked():
            self.argv.append("--no-overwrites")
        if self.ui.write_info_json.isChecked():
            self.argv.append("--write-info-json")
        if self.ui.write_description.isChecked():
            self.argv.append("--write-description")
        if self.ui.write_annotations.isChecked():
            self.argv.append("--write-annotations")
        # Verbosity
        if self.ui.quiet_mode.isChecked():
            self.argv.append("--quiet")
        if self.ui.verbose_mode.isChecked() and not self.ui.quiet_mode.isChecked():
            self.argv.append("--verbose")
        if self.ui.ignore_warnings.isChecked() and not self.ui.quiet_mode.isChecked():
            self.argv.append("--ignore-warnings")
        if self.ui.ignore_errors.isChecked() and not self.ui.quiet_mode.isChecked():
            self.argv.append("--ignore-errors")
        # Subtitle options
        if self.ui.write_sub.isChecked():
            self.argv.append("--write-sub")
        if self.ui.write_auto_sub.isChecked():
            self.argv.append("--write-auto-sub")
        if self.ui.all_subs.isChecked():
            self.argv.append("--all-subs")
        # Download options
        if len(self.ui.max_download_rate.text()) > 0 and self.is_integer(self.ui.max_download_rate.text()):
            self.argv.append("--rate-limit")
            self.argv.append(self.ui.max_download_rate.text())
        if len(self.ui.num_retries.text()) > 0 and self.is_integer(self.ui.num_retries.text()):
            self.argv.append("--retries")
            self.argv.append(self.ui.num_retries.text())
        if len(self.ui.buffer_size.text()) > 0 and self.is_integer(self.ui.buffer_size.text()):
            self.argv.append("--buffer-size")
            self.argv.append(self.ui.buffer_size.text())

    def batch_load(self, url_list):
        for x in url_list:
            if 'http://' in x or 'https://' in x:
                self.ui.url_list.addItem(x)

    def is_integer(self, value):
        try:
            i = int(value)
            return True
        except ValueError:
            return False
 def __init__(self):
     super(MainWindow, self).__init__()
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)