Loading ballontranslator/ui/configpanel.py +5 −0 Original line number Diff line number Diff line Loading @@ -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') Loading Loading @@ -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) Loading ballontranslator/ui/dl_manager.py +3 −1 Original line number Diff line number Diff line Loading @@ -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' Loading @@ -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: Loading ballontranslator/ui/mainwindow.py +4 −0 Original line number Diff line number Diff line Loading @@ -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) Loading ballontranslator/ui/misc.py +4 −1 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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) Loading @@ -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 } Loading ballontranslator/ui/pagesources/__init__.py +50 −18 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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): Loading @@ -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) Loading Loading
ballontranslator/ui/configpanel.py +5 −0 Original line number Diff line number Diff line Loading @@ -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') Loading Loading @@ -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) Loading
ballontranslator/ui/dl_manager.py +3 −1 Original line number Diff line number Diff line Loading @@ -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' Loading @@ -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: Loading
ballontranslator/ui/mainwindow.py +4 −0 Original line number Diff line number Diff line Loading @@ -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) Loading
ballontranslator/ui/misc.py +4 −1 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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) Loading @@ -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 } Loading
ballontranslator/ui/pagesources/__init__.py +50 −18 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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): Loading @@ -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) Loading