Commit 36371932 authored by John's avatar John
Browse files

Added check to avoid unnecessary downloads

parent 73172d59
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -309,6 +309,8 @@ class ConfigPanel(Widget):
        self.src_choice_combox.currentIndexChanged.connect(self.on_source_flag_changed)
        self.src_link_textbox = generalConfigPanel.addTextBox('source url')
        self.src_link_textbox.textChanged.connect(self.on_source_link_changed)
        self.src_force_download_checker = generalConfigPanel.addCheckBox(self.tr('Force download/redownload'))
        self.src_force_download_checker.stateChanged.connect(self.on_source_force_download_changed)

        generalConfigPanel.addTextLabel(label_lettering)
        dec_program_str = self.tr('decide by program')
@@ -366,6 +368,9 @@ class ConfigPanel(Widget):
    def on_source_link_changed(self):
        self.config.src_link_flag = self.src_link_textbox.text()

    def on_source_force_download_changed(self):
        self.config.src_force_download_flag = self.src_force_download_checker.isChecked()

    def focusOnTranslator(self):
        idx0, idx1 = self.trans_sub_block.idx0, self.trans_sub_block.idx1
        self.configTable.setCurrentItem(idx0, idx1)
+3 −1
Original line number Diff line number Diff line
@@ -513,6 +513,8 @@ class DLManager(QObject):

    def source(self):
        url = self.config.src_link_flag
        skip_check = self.config.src_force_download_flag
        LOGGER.info(f'Force download set to {skip_check}')
        SOURCEMAP = {
            0: 'manual',
            1: 'nhentai'
@@ -525,7 +527,7 @@ class DLManager(QObject):
            LOGGER.info('Source download set to nhentai')
            doujin = nhentai()
            LOGGER.info('Downloading images...')
            doujin.run(url)
            doujin.run(url, skip_check)
            gallery_number = doujin.ReturnGalleryNumber()
            self.imgtrans_proj.load(rf'{PROGRAM_PATH}\ui\pagesources\projects\{gallery_number}')
        else:
+4 −0
Original line number Diff line number Diff line
@@ -173,6 +173,10 @@ class MainWindow(QMainWindow):
        if self.config.open_recent_on_startup:
            self.configPanel.open_on_startup_checker.setChecked(True)

        self.configPanel.src_choice_combox.setCurrentIndex(self.config.src_choice_flag)
        self.configPanel.src_link_textbox.setText(self.config.src_link_flag)
        self.configPanel.src_force_download_checker.setChecked(self.config.src_force_download_flag)

        self.configPanel.let_fntsize_combox.setCurrentIndex(self.config.let_fntsize_flag)
        self.configPanel.let_fntstroke_combox.setCurrentIndex(self.config.let_fntstroke_flag)
        self.configPanel.let_fntcolor_combox.setCurrentIndex(self.config.let_fntcolor_flag)
+4 −1
Original line number Diff line number Diff line
@@ -454,6 +454,7 @@ class ProgramConfig:
        self.let_fntcolor_flag = 0
        self.src_choice_flag = 0
        self.src_link_flag = 0
        self.src_force_download_flag = 0
        if config_dict is not None:
            self.load_from_dict(config_dict)

@@ -475,6 +476,7 @@ class ProgramConfig:
            self.let_fntcolor_flag = config_dict['let_fntcolor_flag']
            self.src_choice_flag = config_dict['src_choice_flag']
            self.src_link_flag = config_dict['src_link_flag']
            self.src_force_download_flag = config_dict['src_force_download_flag']
        except Exception as e:
            raise InvalidProgramConfigException(e)

@@ -494,7 +496,8 @@ class ProgramConfig:
            'let_fntstroke_flag': self.let_fntstroke_flag,
            'let_fntcolor_flag': self.let_fntcolor_flag,
            'src_choice_flag': self.src_choice_flag,
            'src_link_flag': self.src_link_flag
            'src_link_flag': self.src_link_flag,
            'src_force_download_flag': self.src_force_download_flag
        }


+50 −18
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ class SourceBase:
        }
        self.source: str = ''
        self.number_of_pages: int = 0
        self.path: str = ''

    def SetLink(self, link):
        self.link = link
@@ -32,6 +33,31 @@ class SourceBase:
            self.link = ''
            raise SourceNotImplemented

    def ReturnNumberOfPages(self) -> int:
        return self.number_of_pages

    def CheckFiles(self, path):
        try:
            with open(path, 'r') as txt:
                try:
                    self.number_of_pages = txt.readlines()[0]
                except IndexError:
                    return False
        except FileNotFoundError:
            return False
        files = os.listdir(self.path)
        number_of_images = 0
        for i in files:
            if '.jpg' in i:
                number_of_images += 1
        if number_of_images == self.number_of_pages:
            return True

    def SaveNumberOfPages(self, path):
        open(path, 'w').close()  # clears file before saving number of pages
        with open(path, 'w') as txt:
            txt.write(str(self.number_of_pages))


class nhentai(SourceBase):
    def __init__(self):
@@ -45,36 +71,42 @@ class nhentai(SourceBase):
        + in the url bar you can see gallery link
        These steps are necessary as I don't know of any methods to bypass cloudflare""")

    def FetchImages(self):
    def FetchImages(self, skip_check: bool = False):
        size = len(self.link)
        url = self.link[:size - 5]
        number = (re.search('galleries/(.*)/', url)).group(1)
        self.gallery_number = number
        i = 1
        path = fr'{SOURCE_DOWNLOAD_PATH}\{number}'
        if not os.path.exists(path):
            os.makedirs(path)
        self.path = fr'{SOURCE_DOWNLOAD_PATH}\{number}'
        path_to_txt = rf'{self.path}\pages.txt'
        skip = False
        if not os.path.exists(self.path):
            os.makedirs(self.path)
        elif os.path.exists(self.path) and skip_check is False:
            skip = self.CheckFiles(path_to_txt)
        if skip is False:
            while True:
                try:
                img_data = requests.get(f'{url}{i}.jpg').content
                    img_data = requests.get(f'{url}{i}.jpg', proxies=PROXY).content
                    if '404 Not Found' in str(img_data):
                        break
                with open(rf'{path}\{i}.jpg', 'wb') as image:
                    with open(rf'{self.path}\{i}.jpg', 'wb') as image:
                        image.write(img_data)
                    i += 1
                    time.sleep(1)  # Avoiding anti ddos ban
                except Exception as e:
                    print(e)
                    break
        self.number_of_pages = i
            self.number_of_pages = i - 1
            self.SaveNumberOfPages(path_to_txt)

    def ReturnGalleryNumber(self):
        return self.gallery_number

    def run(self, url):
    def run(self, url, skip_check: bool):
        self.SetLink(url)
        self.CheckLink()
        self.FetchImages()
        self.FetchImages(skip_check)