일단 정리..

This commit is contained in:
2025-07-15 11:14:05 +09:00
parent 5d5c0ff675
commit f1345e2770
4 changed files with 101 additions and 48 deletions

View File

@@ -2,7 +2,7 @@ class CBZInfo:
def __init__(self, title, url): def __init__(self, title, url):
self.title = title self.title = title
self.url = url self.url = url
self.serires = "" self.series = ""
self.type = "" self.type = ""
self.filename = "" self.filename = ""
self.torrent = "" self.torrent = ""
@@ -19,6 +19,48 @@ class CBZInfo:
return f"ID : {self.gallery_id} - {self.title} by {strArtists} - #{strTags}" return f"ID : {self.gallery_id} - {self.title} by {strArtists} - #{strTags}"
def SaveToText(self):
retText = "\{"
retText += f"Title : {self.title}\r\n"
retText += f"URL : {self.url}\r\n"
retText += f"Series : {self.series}\r\n"
retText += f"Type : {self.type}\r\n"
retText += f"Filename : {self.filename}\r\n"
retText += f"Torrent : {self.torrent}\r\n"
retText += f"Language : {self.language}\r\n"
retText += f"Gallery ID : {self.gallery_id}\r\n"
retText += self.SaveToTextArtists() + f"\r\n"
retText += self.SavetToTextRelatedGalleryID() + f"\r\n"
retText += self.SavetToTextTags() + f"\r\n"
retText += "\}"
def SaveToTextTagList(self, listTags):
RetText = "\{"
for tag in listTags:
RetText += (f"\"{tag.name}\" ")
RetText += "\}"
return RetText
def SaveToTextArtists(self):
retText = f"Artists : "
retText += self.SaveToTextTagList(self.artists)
return retText
def SavetToTextRelatedGalleryID(self):
retText = f"Gallery_ID : "
retText += self.SaveToTextTagList(self.related_galID)
return retText
def SavetToTextTags(self):
retText = f"Tags : "
retText += self.SaveToTextTagList(self.tags)
return retText
def AddTag(self, name): def AddTag(self, name):
self.tags.add(name) self.tags.add(name)
@@ -38,7 +80,7 @@ class TagInfo:
self.url = url self.url = url
def __str__(self): def __str__(self):
return f"{self.name} : {self.url}" return f"#{self.name} : {self.url}"
class ImageFileInfo: class ImageFileInfo:

View File

@@ -60,8 +60,18 @@ def GetListSearchResult(list_ID):
strContent = driver.page_source strContent = driver.page_source
listRet = parseMangaInfos(strContent) listRet = parseMangaInfos(strContent)
#for Idx in range(len(listRet)):
# print(f"{Idx} : {listRet[Idx]}")
try:
for Idx in range(len(listRet)): for Idx in range(len(listRet)):
print(f"{Idx} : {listRet[Idx]}") print(f"{Idx} : {listRet[Idx]}")
with open( f"{id}.txt", 'w') as file:
for item in listRet[Idx]:
file.write( + "\n")
file.close()
except IOError:
util.DbgOut(f"Error: Could not write to the file at {id}.txt.", True)
except Exception as e: except Exception as e:
util.DbgOut("Hitomi Loading Error : ", e) util.DbgOut("Hitomi Loading Error : ", e)

43
UI.py
View File

@@ -8,7 +8,7 @@ import GetArc_Hitomi as hitomi
from io import BytesIO from io import BytesIO
from PyQt5.QtCore import Qt, QUrl, QSettings, QSize, QPoint, QByteArray from PyQt5.QtCore import Qt, QUrl, QSettings, QSize, QPoint, QByteArray, QRect
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QVBoxLayout, QLineEdit, QHBoxLayout, QListWidget, QListWidgetItem, QLabel, QFileDialog from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QVBoxLayout, QLineEdit, QHBoxLayout, QListWidget, QListWidgetItem, QLabel, QFileDialog
from PyQt5.QtGui import QPixmap, QKeyEvent from PyQt5.QtGui import QPixmap, QKeyEvent
@@ -21,16 +21,28 @@ class MyApp(QMainWindow):
self.initUI() self.initUI()
self.loadINI() self.loadINI()
#
def closeEvent(self, event): def closeEvent(self, event):
self.saveINI() self.saveINI()
event.accept() event.accept()
#
def resizeEvent(self, event): def resizeEvent(self, event):
super().resizeEvent(event) super().resizeEvent(event)
rcDesktop = QApplication.primaryScreen().availableGeometry()
rcWnd = self.geometry()
if False == rcDesktop.contains(rcWnd):
self.setGeometry(rcDesktop)
pixmap = self.label_Image.pixmap()
if None != pixmap:
pixmapScaled = pixmap.scaled(self.label_Image.size())
self.label_Image.setPixmap(pixmapScaled)
self.update()
#
def initUI(self): def initUI(self):
layout = self.MakeUI() layout = self.MakeUI()
@@ -108,10 +120,6 @@ class MyApp(QMainWindow):
# show Image in middle Layout # show Image in middle Layout
self.label_Image = QLabel(self) self.label_Image = QLabel(self)
# Load Default Image
pixmap = QPixmap("layoutImg.jpeg")
self.label_Image.setMaximumWidth(self.screen().size().width()-(self.list_ArcList.width()+400))
layout_R = self.MakeUI_Right() layout_R = self.MakeUI_Right()
# 레이아웃 설정 # 레이아웃 설정
@@ -122,15 +130,7 @@ class MyApp(QMainWindow):
return layout return layout
#
def GetFitSize(self, szTarget):
szDesktop = self.screen().size()
szWindow = self.size()
nTrgHeight = self.list_Items.height()
nTrgWidth = szWindow.width() - ( self.list_ArcList.width() + self.list_Items.width() )
def on_click_SrcAdd(self): def on_click_SrcAdd(self):
folder_path = QFileDialog.getExistingDirectory(self, '폴더 선택', '') folder_path = QFileDialog.getExistingDirectory(self, '폴더 선택', '')
@@ -272,6 +272,7 @@ class MyApp(QMainWindow):
elif fileExt.lower() == ".rar": elif fileExt.lower() == ".rar":
listContents = [] listContents = []
elif True == os.path.isdir(pathTarget): elif True == os.path.isdir(pathTarget):
listContents = util.ListFileExtRcr(pathTarget, [".jpg", ".jpeg", ".png", ".webp"]) listContents = util.ListFileExtRcr(pathTarget, [".jpg", ".jpeg", ".png", ".webp"])
@@ -301,8 +302,14 @@ class MyApp(QMainWindow):
pixmap.load(selItemText) pixmap.load(selItemText)
self.label_Image.setPixmap(pixmap) self.label_Image.setPixmap(pixmap)
scaled_pixmap = pixmap.scaled(self.label_Image.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)
self.label_Image.setPixmap(scaled_pixmap) #
def GetFitSize(self, szTarget):
szDesktop = self.screen().size()
szWindow = self.size()
nTrgHeight = self.list_Items.height()
nTrgWidth = szWindow.width() - ( self.list_ArcList.width() + self.list_Items.width() )
if __name__ == '__main__': if __name__ == '__main__':

View File

@@ -10,17 +10,14 @@ import subprocess
from pathlib import Path from pathlib import Path
m_dbgLevel = 0 m_dbgLevel = 0
listDbgStr = [] listDbgStr = []
# #
def IsEmptyStr(string): def IsEmptyStr(string):
temp = f"{string}" temp = f"{string}"
return 0 == len(temp.strip()) return 0 == len(temp.strip())
# #
def GetCurrentTime(): def GetCurrentTime():
# 현재 시간을 구하고 구조체로 변환 # 현재 시간을 구하고 구조체로 변환
@@ -38,7 +35,6 @@ def GetCurrentTime():
return strRet return strRet
#for debug #for debug
def DbgOut(strInput, bPrint = False): def DbgOut(strInput, bPrint = False):
strMsg = (f"{GetCurrentTime()} : {strInput}") strMsg = (f"{GetCurrentTime()} : {strInput}")
@@ -47,10 +43,19 @@ def DbgOut(strInput, bPrint = False):
if True == bPrint: if True == bPrint:
print(strMsg) print(strMsg)
#
def printDbgMessages(): def printDbgMessages():
for line in listDbgStr: for line in listDbgStr:
print(line) print(line)
#
def SaveDbgMessages(Path):
try:
with open(Path, 'w') as file:
for line in listDbgStr:
file.write(line + "\n")
except IOError:
DbgOut(f"Error: Could not write to the file at {Path}.", True)
# 입력된 경로의 자식 폴더를 찾아 반환한다. # 입력된 경로의 자식 폴더를 찾아 반환한다.
# 반환하는 리스트는 리커시브 - 손자, 증손자 폴더까지 전부 포함한다 # 반환하는 리스트는 리커시브 - 손자, 증손자 폴더까지 전부 포함한다
@@ -68,7 +73,6 @@ def ListSubDirectories(root_dir):
return subdirectories return subdirectories
# 자식 폴더를 구해온다. 직계 자식만 # 자식 폴더를 구해온다. 직계 자식만
def ListChildDirectories(pathDir): def ListChildDirectories(pathDir):
listRet = [] listRet = []
@@ -79,7 +83,6 @@ def ListChildDirectories(pathDir):
return listRet return listRet
# 파일목록만 구해온다. 자식 폴더에 있는건 무시. # 파일목록만 구해온다. 자식 폴더에 있는건 무시.
def ListContainFiles(pathDir): def ListContainFiles(pathDir):
listRet = [] listRet = []
@@ -90,7 +93,7 @@ def ListContainFiles(pathDir):
return listRet return listRet
#
def ListFileExtRcr(pathTrg, listExt): def ListFileExtRcr(pathTrg, listExt):
listRet= [] listRet= []
@@ -107,8 +110,7 @@ def ListFileExtRcr(pathTrg, listExt):
return listRet return listRet
# 입력된 경로에서 부모 폴더를 찾는다. 0 은 자기자신 1은 부모, 숫자대로 위로.
# 입력된 패스에서 부모 폴더를 찾는다. 0 은 자기자신 1은 부모, 숫자대로 위로.
def GetParentDirName(FullPath, nUp): def GetParentDirName(FullPath, nUp):
parts = FullPath.split(os.sep) parts = FullPath.split(os.sep)
@@ -122,7 +124,6 @@ def GetParentDirName(FullPath, nUp):
return parts[nTrgIdx] return parts[nTrgIdx]
# 입력된 경로가 자식 폴더를 가지고 있는지 판단한다.- 최종 폴더인지 여부 # 입력된 경로가 자식 폴더를 가지고 있는지 판단한다.- 최종 폴더인지 여부
# 자식이 없으면 True, 자식이 있으면 False # 자식이 없으면 True, 자식이 있으면 False
def IsFinalFolder(path): def IsFinalFolder(path):
@@ -136,7 +137,6 @@ def IsFinalFolder(path):
return bRet; return bRet;
# 어떤 경로 안에서 특정 확장자의 파일을 뽑아내어 그 리스트를 반환한다. # 어떤 경로 안에서 특정 확장자의 파일을 뽑아내어 그 리스트를 반환한다.
def FindFileFromExt(path, ext): def FindFileFromExt(path, ext):
bDot = False bDot = False
@@ -158,7 +158,6 @@ def FindFileFromExt(path, ext):
return listRet return listRet
# 파일 이름에서 확장자를 뽑아낸다. True : '.' 을 포함한다. # 파일 이름에서 확장자를 뽑아낸다. True : '.' 을 포함한다.
def GetExtStr(file_path, bDot = True): def GetExtStr(file_path, bDot = True):
retStr = "" retStr = ""
@@ -174,7 +173,6 @@ def GetExtStr(file_path, bDot = True):
return retStr return retStr
# 문자열에 포함된 단어를 지운다. # 문자열에 포함된 단어를 지운다.
def RmvSubString(mainString, subString): def RmvSubString(mainString, subString):
# 문자열에서 부분 문자열의 인덱스를 찾습니다. # 문자열에서 부분 문자열의 인덱스를 찾습니다.
@@ -187,12 +185,11 @@ def RmvSubString(mainString, subString):
# 부분 문자열을 제거하고 새로운 문자열을 반환합니다. # 부분 문자열을 제거하고 새로운 문자열을 반환합니다.
return mainString[:strIdx] + mainString[endIdx:] return mainString[:strIdx] + mainString[endIdx:]
#
def ExtractZIP(zip_file, extract_to): def ExtractZIP(zip_file, extract_to):
with zipfile.ZipFile(zip_file, 'r') as zf: with zipfile.ZipFile(zip_file, 'r') as zf:
zf.extractall(extract_to) zf.extractall(extract_to)
# #
def CreateZIP(output_zip, *files): def CreateZIP(output_zip, *files):
with zipfile.ZipFile(output_zip, 'w') as zf: with zipfile.ZipFile(output_zip, 'w') as zf:
@@ -236,7 +233,6 @@ def CreateZIPShell(zipName, *files, bRmvRPath = True):
return bRet return bRet
# 특정 확장자만 쉘을 이용해서 압축한다 # 특정 확장자만 쉘을 이용해서 압축한다
def CreateZIPShExt(zipName, TrgExt): def CreateZIPShExt(zipName, TrgExt):
command = f"zip -j {zipName} *.{TrgExt}" command = f"zip -j {zipName} *.{TrgExt}"
@@ -249,7 +245,6 @@ def CreateZIPShExt(zipName, TrgExt):
return bRet return bRet
# 압축 파일 내의 모든 파일 및 디렉토리 목록 가져오기 # 압축 파일 내의 모든 파일 및 디렉토리 목록 가져오기
def GetZipContentList(path): def GetZipContentList(path):
if None == path or not os.path.isfile(path): if None == path or not os.path.isfile(path):
@@ -261,7 +256,7 @@ def GetZipContentList(path):
return listRet return listRet
#
def GetZippedFileByte(pathZip, FileName): def GetZippedFileByte(pathZip, FileName):
if None == pathZip or not os.path.isfile(pathZip): if None == pathZip or not os.path.isfile(pathZip):
return None return None
@@ -276,7 +271,6 @@ def GetZippedFileByte(pathZip, FileName):
return retBytes return retBytes
# JSON 을 트리 구조로 출력한다. # JSON 을 트리 구조로 출력한다.
def PrintJSONTree(data, indent=0): def PrintJSONTree(data, indent=0):
if isinstance(data, dict): if isinstance(data, dict):
@@ -289,13 +283,12 @@ def PrintJSONTree(data, indent=0):
else: else:
print(' ' * indent + str(data)) print(' ' * indent + str(data))
#
def IsPathWithin(base_path: str, target_path: str) -> bool: def IsPathWithin(base_path: str, target_path: str) -> bool:
base = Path(base_path).resolve() base = Path(base_path).resolve()
target = Path(target_path).resolve() target = Path(target_path).resolve()
return target.is_relative_to(base) return target.is_relative_to(base)
# 랜덤 UUID 생성 # 랜덤 UUID 생성
def UUIDGenRandom(): def UUIDGenRandom():
random_uuid = uuid.uuid4() random_uuid = uuid.uuid4()
@@ -306,5 +299,6 @@ def UUIDGenName(SeedName):
namespace_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, SeedName) namespace_uuid = uuid.uuid5(uuid.NAMESPACE_DNS, SeedName)
return namespace_uuid return namespace_uuid
#
def GetTextInBrakets(text): def GetTextInBrakets(text):
return re.findall(r'\[(.*?)\]', text) return re.findall(r'\[(.*?)\]', text)