From 3c7f75d70e10c463a2191ce249b3e6261828806a Mon Sep 17 00:00:00 2001 From: JE-Chen45 Date: Wed, 23 Aug 2023 20:56:25 +0800 Subject: [PATCH] Update dev and stable version Update dev and stable version --- frontengine/__init__.py | 2 +- .../image_generation}/__init__.py | 0 .../image_generation/image_generation_show.py | 14 +++++ frontengine/ui/main/main_ui.py | 8 ++- .../setting/{chat_scene => chat}/__init__.py | 0 .../ui/{ => setting}/chat/chat_model.py | 0 .../ui/{ => setting}/chat/chat_scene_input.py | 2 +- .../chat_scene_setting.py | 9 ++- .../ui/{ => setting}/chat/chatthread.py | 0 .../ui/{ => setting}/chat/speech_to_text.py | 0 .../control_center/control_center_ui.py | 2 +- .../ui/setting/image_generation/__init__.py | 0 .../generation_image_thread.py | 32 ++++++++++ .../image_generation_input.py | 62 +++++++++++++++++++ .../ui/setting/image_scene/__init__.py | 0 frontengine/utils/multi_language/english.py | 6 +- .../multi_language/traditional_chinese.py | 6 +- pyproject.toml | 4 +- dev.toml => stable.toml | 2 +- 19 files changed, 135 insertions(+), 14 deletions(-) rename frontengine/{ui/chat => show/image_generation}/__init__.py (100%) create mode 100644 frontengine/show/image_generation/image_generation_show.py rename frontengine/ui/setting/{chat_scene => chat}/__init__.py (100%) rename frontengine/ui/{ => setting}/chat/chat_model.py (100%) rename frontengine/ui/{ => setting}/chat/chat_scene_input.py (97%) rename frontengine/ui/setting/{chat_scene => chat}/chat_scene_setting.py (96%) rename frontengine/ui/{ => setting}/chat/chatthread.py (100%) rename frontengine/ui/{ => setting}/chat/speech_to_text.py (100%) create mode 100644 frontengine/ui/setting/image_generation/__init__.py create mode 100644 frontengine/ui/setting/image_generation/generation_image_thread.py create mode 100644 frontengine/ui/setting/image_generation/image_generation_input.py create mode 100644 frontengine/ui/setting/image_scene/__init__.py rename dev.toml => stable.toml (97%) diff --git a/frontengine/__init__.py b/frontengine/__init__.py index 27ff500..173dd8f 100644 --- a/frontengine/__init__.py +++ b/frontengine/__init__.py @@ -19,7 +19,7 @@ from frontengine.ui.setting.scene_setting.scene_setting_ui import SceneSettingUI from frontengine.ui.main.main_ui import FrontEngineMainUI from frontengine.ui.setting.scene_setting.scene_setting_ui import SceneControlSettingUI -from frontengine.ui.setting.chat_scene.chat_scene_setting import ChatSceneUI +from frontengine.ui.setting.chat.chat_scene_setting import ChatSceneUI from frontengine.ui.main.main_ui import FrontEngine_EXTEND_TAB __all__ = [ diff --git a/frontengine/ui/chat/__init__.py b/frontengine/show/image_generation/__init__.py similarity index 100% rename from frontengine/ui/chat/__init__.py rename to frontengine/show/image_generation/__init__.py diff --git a/frontengine/show/image_generation/image_generation_show.py b/frontengine/show/image_generation/image_generation_show.py new file mode 100644 index 0000000..da2f6c3 --- /dev/null +++ b/frontengine/show/image_generation/image_generation_show.py @@ -0,0 +1,14 @@ +from PySide6.QtGui import QPixmap +from PySide6.QtWidgets import QWidget, QLabel, QGridLayout + + +class ImageGenerateShow(QWidget): + + def __init__(self, pixmap: QPixmap): + super().__init__() + self.label = QLabel() + self.label.setPixmap(pixmap) + self.grid_layout = QGridLayout(self) + self.grid_layout.setContentsMargins(0, 0, 0, 0) + self.grid_layout.addWidget(self.label) + self.setLayout(self.grid_layout) diff --git a/frontengine/ui/main/main_ui.py b/frontengine/ui/main/main_ui.py index 619c44b..e5a2555 100644 --- a/frontengine/ui/main/main_ui.py +++ b/frontengine/ui/main/main_ui.py @@ -10,7 +10,7 @@ from frontengine.ui.main.language_menu import build_language_menu from frontengine.ui.main.system_tray.extend_system_tray import ExtendSystemTray -from frontengine.ui.setting.chat_scene.chat_scene_setting import ChatSceneUI +from frontengine.ui.setting.chat.chat_scene_setting import ChatSceneUI from frontengine.ui.setting.control_center.control_center_ui import ControlCenterUI from frontengine.ui.setting.gif.gif_setting_ui import GIFSettingUI from frontengine.ui.setting.image.image_setting_ui import ImageSettingUI @@ -19,6 +19,7 @@ from frontengine.ui.setting.text.text_setting_ui import TextSettingUI from frontengine.ui.setting.video.video_setting_ui import VideoSettingUI from frontengine.ui.setting.web.web_setting_ui import WEBSettingUI +from frontengine.ui.setting.image_generation.image_generation_input import ImageGenerationUI from frontengine.user_setting.user_setting_file import write_user_setting, read_user_setting, user_setting_dict from frontengine.utils.multi_language.language_wrapper import language_wrapper @@ -51,6 +52,7 @@ def __init__(self, debug: bool = False): self.text_setting_ui = TextSettingUI() self.scene_setting_ui = SceneSettingUI() self.chat_scene_ui = ChatSceneUI() + self.image_generation_ui = ImageGenerationUI() self.control_center_ui = ControlCenterUI( self.video_setting_ui, self.image_setting_ui, @@ -96,6 +98,10 @@ def __init__(self, debug: bool = False): self.control_center_ui, language_wrapper.language_word_dict.get("tab_control_center_text") ) + self.tab_widget.addTab( + self.image_generation_ui, + language_wrapper.language_word_dict.get("image_generation_tab") + ) for widget_name, widget in FrontEngine_EXTEND_TAB.items(): self.tab_widget.addTab(widget(), widget_name) self.setCentralWidget(self.tab_widget) diff --git a/frontengine/ui/setting/chat_scene/__init__.py b/frontengine/ui/setting/chat/__init__.py similarity index 100% rename from frontengine/ui/setting/chat_scene/__init__.py rename to frontengine/ui/setting/chat/__init__.py diff --git a/frontengine/ui/chat/chat_model.py b/frontengine/ui/setting/chat/chat_model.py similarity index 100% rename from frontengine/ui/chat/chat_model.py rename to frontengine/ui/setting/chat/chat_model.py diff --git a/frontengine/ui/chat/chat_scene_input.py b/frontengine/ui/setting/chat/chat_scene_input.py similarity index 97% rename from frontengine/ui/chat/chat_scene_input.py rename to frontengine/ui/setting/chat/chat_scene_input.py index b15f9a4..694aff0 100644 --- a/frontengine/ui/chat/chat_scene_input.py +++ b/frontengine/ui/setting/chat/chat_scene_input.py @@ -5,7 +5,7 @@ from PySide6.QtWidgets import QBoxLayout, QWidget, QPushButton, QHBoxLayout, QTextEdit, QMessageBox from frontengine.show.chat.chat_toast import ChatToast -from frontengine.ui.chat.chatthread import MESSAGE_QUEUE, EXCEPTION_QUEUE +from frontengine.ui.setting.chat.chatthread import MESSAGE_QUEUE, EXCEPTION_QUEUE from frontengine.utils.multi_language.language_wrapper import language_wrapper diff --git a/frontengine/ui/setting/chat_scene/chat_scene_setting.py b/frontengine/ui/setting/chat/chat_scene_setting.py similarity index 96% rename from frontengine/ui/setting/chat_scene/chat_scene_setting.py rename to frontengine/ui/setting/chat/chat_scene_setting.py index 952a191..4aea587 100644 --- a/frontengine/ui/setting/chat_scene/chat_scene_setting.py +++ b/frontengine/ui/setting/chat/chat_scene_setting.py @@ -6,10 +6,10 @@ QPlainTextEdit, QLineEdit, QBoxLayout from frontengine.show.scene.scene import SceneManager -from frontengine.ui.chat.chat_model import load_scene_json, chat_model -from frontengine.ui.chat.chat_scene_input import ChatInputDialog -from frontengine.ui.chat.chatthread import ChatThread, DELEGATE_CHAT, PANEL_MESSAGE_QUEUE -from frontengine.ui.chat.speech_to_text import ChatSpeechToText +from frontengine.ui.setting.chat.chat_model import load_scene_json, chat_model +from frontengine.ui.setting.chat.chat_scene_input import ChatInputDialog +from frontengine.ui.setting.chat.chatthread import ChatThread, DELEGATE_CHAT, PANEL_MESSAGE_QUEUE +from frontengine.ui.setting.chat.speech_to_text import ChatSpeechToText from frontengine.utils.logging.loggin_instance import front_engine_logger from frontengine.utils.multi_language.language_wrapper import language_wrapper @@ -19,7 +19,6 @@ class ChatSceneUI(QWidget): def __init__(self): super().__init__() self.voice_input = None - self.grid_layout = QGridLayout() self.grid_layout = QGridLayout(self) self.grid_layout.setContentsMargins(0, 0, 0, 0) # Init diff --git a/frontengine/ui/chat/chatthread.py b/frontengine/ui/setting/chat/chatthread.py similarity index 100% rename from frontengine/ui/chat/chatthread.py rename to frontengine/ui/setting/chat/chatthread.py diff --git a/frontengine/ui/chat/speech_to_text.py b/frontengine/ui/setting/chat/speech_to_text.py similarity index 100% rename from frontengine/ui/chat/speech_to_text.py rename to frontengine/ui/setting/chat/speech_to_text.py diff --git a/frontengine/ui/setting/control_center/control_center_ui.py b/frontengine/ui/setting/control_center/control_center_ui.py index 554b496..e537c82 100644 --- a/frontengine/ui/setting/control_center/control_center_ui.py +++ b/frontengine/ui/setting/control_center/control_center_ui.py @@ -2,7 +2,7 @@ from PySide6.QtWidgets import QGridLayout, QWidget, QPushButton, QTextEdit, QScrollArea from frontengine.ui.color.global_color import error_color, output_color -from frontengine.ui.setting.chat_scene.chat_scene_setting import ChatSceneUI +from frontengine.ui.setting.chat.chat_scene_setting import ChatSceneUI from frontengine.ui.setting.gif.gif_setting_ui import GIFSettingUI from frontengine.ui.setting.image.image_setting_ui import ImageSettingUI from frontengine.ui.setting.scene_setting.scene_setting_ui import SceneSettingUI diff --git a/frontengine/ui/setting/image_generation/__init__.py b/frontengine/ui/setting/image_generation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/frontengine/ui/setting/image_generation/generation_image_thread.py b/frontengine/ui/setting/image_generation/generation_image_thread.py new file mode 100644 index 0000000..c039d98 --- /dev/null +++ b/frontengine/ui/setting/image_generation/generation_image_thread.py @@ -0,0 +1,32 @@ +import asyncio +from queue import Queue +from threading import Thread +from re_edge_gpt import ImageGenAsync + + +class ImageGenThread(Thread): + + def __init__(self, image_keyword: str): + super().__init__() + auth_cooker = open("bing_cookies.txt", "r+").read() + self.async_gen = ImageGenAsync(auth_cookie=auth_cooker) + self.image_keyword = image_keyword + + def run(self) -> None: + try: + image_list = list() + + async def send_chat_async(): + nonlocal image_list + image_list = await self.async_gen.get_images(self.image_keyword) + + asyncio.run(send_chat_async()) + for image in image_list: + IMAGE_QUEUE.put_nowait(image) + except Exception as error: + EXCEPTION_QUEUE.put_nowait(repr(error)) + raise error + + +IMAGE_QUEUE = Queue() +EXCEPTION_QUEUE = Queue() diff --git a/frontengine/ui/setting/image_generation/image_generation_input.py b/frontengine/ui/setting/image_generation/image_generation_input.py new file mode 100644 index 0000000..374c53e --- /dev/null +++ b/frontengine/ui/setting/image_generation/image_generation_input.py @@ -0,0 +1,62 @@ +from typing import List + +import requests +from PySide6.QtCore import QTimer +from PySide6.QtGui import QPixmap +from PySide6.QtWidgets import QWidget, QPushButton, QLineEdit, QGridLayout, QMessageBox, QPlainTextEdit + +from frontengine.show.image_generation.image_generation_show import ImageGenerateShow +from frontengine.ui.setting.image_generation.generation_image_thread import ImageGenThread, IMAGE_QUEUE +from frontengine.utils.multi_language.language_wrapper import language_wrapper + + +class ImageGenerationUI(QWidget): + def __init__(self): + super().__init__() + # UI + self.image_keyword_input = QLineEdit() + self.send_text_button = QPushButton() + self.send_text_button.setText(language_wrapper.language_word_dict.get("start_generate_image")) + self.image_panel = QPlainTextEdit() + self.image_panel.setReadOnly(True) + self.send_text_button.clicked.connect(self.generate_image) + # Layout + self.grid_layout = QGridLayout(self) + self.grid_layout.setContentsMargins(0, 0, 0, 0) + self.grid_layout.addWidget(self.image_keyword_input, 0, 0) + self.grid_layout.addWidget(self.send_text_button, 0, 1) + self.grid_layout.addWidget(self.image_panel, 1, 0, -1, -1) + # Pull image timer + self.pull_image_timer = QTimer() + self.pull_image_timer.setInterval(1000) + self.pull_image_timer.timeout.connect(self.get_image) + self.pull_image_timer.start() + # Manage show + self.show_list: List[QWidget] = list() + + def generate_image(self): + if self.image_keyword_input.text() == "" or self.image_keyword_input.text().isspace(): + input_error_message = QMessageBox(self) + input_error_message.setText(language_wrapper.language_word_dict.get("input_error")) + input_error_message.show() + else: + image_thread = ImageGenThread(self.image_keyword_input.text()) + image_thread.daemon = True + image_thread.start() + + def get_image(self): + if not IMAGE_QUEUE.empty(): + image_link = IMAGE_QUEUE.get_nowait() + image_response = requests.get(image_link) + image = QPixmap() + image.loadFromData(image_response.content) + image_show = ImageGenerateShow(image) + self.show_list.append(image_show) + image_show.show() + self.image_panel.appendPlainText(image_link) + + def close(self) -> bool: + for widget in self.show_list: + widget.close() + return super().close() + diff --git a/frontengine/ui/setting/image_scene/__init__.py b/frontengine/ui/setting/image_scene/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/frontengine/utils/multi_language/english.py b/frontengine/utils/multi_language/english.py index a98fdb0..b11e42d 100644 --- a/frontengine/utils/multi_language/english.py +++ b/frontengine/utils/multi_language/english.py @@ -109,5 +109,9 @@ "chat_gpt_exception": "GPT error, pls retry or new topic", # Chat voice input "start_chat_voice_input_ui": "Open voice input ui", - "chat_recognizer_voice_button": "Start listen voice" + "chat_recognizer_voice_button": "Start listen voice", + # Image Generation + "image_generation_tab": "Image generation", + "start_generate_image": "Star generate", + "input_error": "Please input something" } diff --git a/frontengine/utils/multi_language/traditional_chinese.py b/frontengine/utils/multi_language/traditional_chinese.py index 735d5e3..1813a2b 100644 --- a/frontengine/utils/multi_language/traditional_chinese.py +++ b/frontengine/utils/multi_language/traditional_chinese.py @@ -109,5 +109,9 @@ "chat_gpt_exception": "GPT 錯誤,請重試或開始一個新話題", # Chat voice input "start_chat_voice_input_ui": "開啟聲音輸入介面", - "chat_recognizer_voice_button": "開始錄製聲音" + "chat_recognizer_voice_button": "開始錄製聲音", + # Image Generation + "image_generation_tab": "圖片產生", + "start_generate_image": "開始產生圖片", + "input_error": "請勿無輸入或空格" } diff --git a/pyproject.toml b/pyproject.toml index 771e580..83e2adc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,8 +5,8 @@ requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] -name = "frontengine" -version = "0.0.41" +name = "frontengine_dev" +version = "0.0.43" authors = [ { name = "JE-Chen", email = "jechenmailman@gmail.com" }, ] diff --git a/dev.toml b/stable.toml similarity index 97% rename from dev.toml rename to stable.toml index 2bc82c0..502dee9 100644 --- a/dev.toml +++ b/stable.toml @@ -5,7 +5,7 @@ requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] -name = "frontengine_dev" +name = "frontengine" version = "0.0.42" authors = [ { name = "JE-Chen", email = "jechenmailman@gmail.com" },