frontengine 0.0.55__py3-none-any.whl → 0.0.56__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. frontengine/__init__.py +13 -14
  2. frontengine/show/gif/paint_gif.py +4 -2
  3. frontengine/show/image/paint_image.py +4 -2
  4. frontengine/show/sound_player/sound_effect.py +1 -2
  5. frontengine/show/sound_player/sound_player.py +1 -2
  6. frontengine/show/text/draw_text.py +4 -2
  7. frontengine/show/video/video_player.py +1 -2
  8. frontengine/show/web/webview.py +1 -3
  9. frontengine/{ui/main/system_tray → system_tray}/extend_system_tray.py +1 -3
  10. frontengine/ui/dialog/choose_file_dialog.py +21 -36
  11. frontengine/ui/{main/main_ui.py → main_ui.py} +37 -44
  12. frontengine/ui/menu/help_menu.py +25 -0
  13. frontengine/ui/menu/how_to_menu.py +14 -0
  14. frontengine/ui/{main → menu}/language_menu.py +10 -10
  15. frontengine/ui/{setting → page}/control_center/control_center_ui.py +9 -12
  16. frontengine/ui/{setting → page}/gif/gif_setting_ui.py +6 -6
  17. frontengine/ui/{setting → page}/image/image_setting_ui.py +6 -6
  18. frontengine/ui/{setting → page}/scene_setting/scene_setting_ui.py +8 -8
  19. frontengine/ui/{setting → page}/scene_setting/scene_tabs/Image.py +1 -1
  20. frontengine/ui/{setting → page}/scene_setting/scene_tabs/gif.py +1 -1
  21. frontengine/ui/{setting → page}/scene_setting/scene_tabs/scene_control.py +3 -2
  22. frontengine/ui/{setting → page}/scene_setting/scene_tabs/sound.py +1 -1
  23. frontengine/ui/{setting → page}/scene_setting/scene_tabs/text.py +1 -1
  24. frontengine/ui/{setting → page}/scene_setting/scene_tabs/ui.py +1 -1
  25. frontengine/ui/{setting → page}/scene_setting/scene_tabs/video.py +1 -1
  26. frontengine/ui/{setting → page}/scene_setting/scene_tabs/web.py +1 -1
  27. frontengine/ui/{setting → page}/text/text_setting_ui.py +6 -6
  28. frontengine/ui/{setting → page}/video/video_setting_ui.py +10 -6
  29. frontengine/ui/{setting → page}/web/web_setting_ui.py +5 -5
  30. frontengine/user_setting/user_setting_file.py +2 -1
  31. frontengine/utils/browser/browser.py +5 -0
  32. frontengine/utils/multi_language/english.py +5 -0
  33. frontengine/utils/multi_language/traditional_chinese.py +5 -0
  34. {frontengine-0.0.55.dist-info → frontengine-0.0.56.dist-info}/METADATA +3 -50
  35. frontengine-0.0.56.dist-info/RECORD +103 -0
  36. {frontengine-0.0.55.dist-info → frontengine-0.0.56.dist-info}/WHEEL +1 -1
  37. frontengine/show/chat/chat_toast.py +0 -55
  38. frontengine/show/image_generation/image_generation_show.py +0 -43
  39. frontengine/ui/setting/chat/chat_model.py +0 -65
  40. frontengine/ui/setting/chat/chat_scene_input.py +0 -72
  41. frontengine/ui/setting/chat/chat_scene_setting.py +0 -187
  42. frontengine/ui/setting/chat/chatthread.py +0 -78
  43. frontengine/ui/setting/chat/speech_to_text.py +0 -70
  44. frontengine/ui/setting/image_generation/generation_image_thread.py +0 -32
  45. frontengine/ui/setting/image_generation/image_generation_input.py +0 -63
  46. frontengine/ui/setting/text/__init__.py +0 -0
  47. frontengine/ui/setting/video/__init__.py +0 -0
  48. frontengine/ui/setting/web/__init__.py +0 -0
  49. frontengine-0.0.55.dist-info/RECORD +0 -112
  50. /frontengine/{show/chat → system_tray}/__init__.py +0 -0
  51. /frontengine/{show/image_generation → ui/menu}/__init__.py +0 -0
  52. /frontengine/ui/{main → page}/__init__.py +0 -0
  53. /frontengine/ui/{main/system_tray → page/control_center}/__init__.py +0 -0
  54. /frontengine/ui/{setting → page/gif}/__init__.py +0 -0
  55. /frontengine/ui/{setting/chat → page/image}/__init__.py +0 -0
  56. /frontengine/ui/{setting/control_center → page/scene_setting}/__init__.py +0 -0
  57. /frontengine/ui/{setting/gif → page/scene_setting/scene_tabs}/__init__.py +0 -0
  58. /frontengine/ui/{setting → page}/scene_setting/scene_tabs/tableview_model.py +0 -0
  59. /frontengine/ui/{setting/image → page/sound_player}/__init__.py +0 -0
  60. /frontengine/ui/{setting → page}/sound_player/sound_player_setting_ui.py +0 -0
  61. /frontengine/ui/{setting/image_generation → page/text}/__init__.py +0 -0
  62. /frontengine/ui/{setting/scene_setting → page/video}/__init__.py +0 -0
  63. /frontengine/ui/{setting/scene_setting/scene_tabs → page/web}/__init__.py +0 -0
  64. /frontengine/{ui/setting/sound_player → utils/browser}/__init__.py +0 -0
  65. {frontengine-0.0.55.dist-info → frontengine-0.0.56.dist-info}/LICENSE +0 -0
  66. {frontengine-0.0.55.dist-info → frontengine-0.0.56.dist-info}/top_level.txt +0 -0
@@ -1,72 +0,0 @@
1
- from typing import Union
2
-
3
- import pyttsx3
4
- from PySide6.QtCore import QTimer, Qt
5
- from PySide6.QtWidgets import QBoxLayout, QWidget, QPushButton, QHBoxLayout, QTextEdit, QMessageBox
6
-
7
- from frontengine.show.chat.chat_toast import ChatToast
8
- from frontengine.ui.setting.chat.chatthread import MESSAGE_QUEUE, EXCEPTION_QUEUE
9
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
10
-
11
-
12
- class ChatInputDialog(QWidget):
13
- def __init__(self, close_time: int = 10000, font_size: int = 16, show_toast: bool = True):
14
- super().__init__()
15
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
16
- self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
17
- self.chat_input = QTextEdit()
18
- self.send_text_button = QPushButton()
19
- self.send_text_button.setText(language_wrapper.language_word_dict.get("chat_scene_send_chat"))
20
- self.box_h_layout = QHBoxLayout()
21
- self.box_h_layout.addWidget(self.send_text_button)
22
- self.box_layout.addWidget(self.chat_input)
23
- self.box_layout.addLayout(self.box_h_layout)
24
- self.setWindowTitle(language_wrapper.language_word_dict.get("chat_scene_input_title"))
25
- self.setLayout(self.box_layout)
26
- # Show toast?
27
- self.show_toast = show_toast
28
- # Get message timer
29
- self.get_message_timer = QTimer()
30
- self.get_message_timer.setInterval(1000)
31
- self.get_message_timer.timeout.connect(self.get_message)
32
- self.get_message_timer.start()
33
- # Check error timer
34
- self.check_error_timer = QTimer()
35
- self.check_error_timer.setInterval(1000)
36
- self.check_error_timer.timeout.connect(self.check_error)
37
- self.check_error_timer.start()
38
- # Toast
39
- self.close_time = close_time
40
- self.font_size = font_size
41
- self.toast_widget: Union[ChatToast, None] = None
42
- # Text to speech
43
- self.engine = pyttsx3.init()
44
-
45
- def get_message(self):
46
- if not MESSAGE_QUEUE.empty():
47
- text = MESSAGE_QUEUE.get_nowait()
48
- if self.show_toast:
49
- self.toast_widget = ChatToast(
50
- text=text, close_time=self.close_time, font_size=self.font_size)
51
- self.toast_widget.showFullScreen()
52
- # self.engine.say(text)
53
-
54
- def show_text(self):
55
- if self.toast_widget is not None and self.toast_widget.isVisible() is False:
56
- self.get_message()
57
- elif self.toast_widget is None:
58
- self.get_message()
59
-
60
- def check_error(self):
61
- if not EXCEPTION_QUEUE.empty():
62
- gpt_error_messagebox = QMessageBox(self)
63
- gpt_error_messagebox.setText(
64
- language_wrapper.language_word_dict.get("chat_gpt_exception") + "\n"
65
- + EXCEPTION_QUEUE.get_nowait()
66
- )
67
- gpt_error_messagebox.show()
68
-
69
- def close(self) -> bool:
70
- self.get_message_timer.stop()
71
- self.check_error_timer.stop()
72
- return super().close()
@@ -1,187 +0,0 @@
1
- from typing import Dict, Callable
2
-
3
- from PySide6.QtCore import QTimer
4
- from PySide6.QtGui import QFontDatabase, Qt
5
- from PySide6.QtWidgets import QWidget, QGridLayout, QPushButton, QScrollArea, QComboBox, QLabel, \
6
- QPlainTextEdit, QLineEdit, QBoxLayout, QCheckBox
7
-
8
- from frontengine.show.scene.scene import SceneManager
9
- from frontengine.ui.setting.chat.chat_model import load_scene_json, chat_model
10
- from frontengine.ui.setting.chat.chat_scene_input import ChatInputDialog
11
- from frontengine.ui.setting.chat.chatthread import ChatThread, DELEGATE_CHAT, PANEL_MESSAGE_QUEUE
12
- from frontengine.ui.setting.chat.speech_to_text import ChatSpeechToText
13
- from frontengine.utils.logging.loggin_instance import front_engine_logger
14
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
15
-
16
-
17
- class ChatSceneUI(QWidget):
18
-
19
- def __init__(self):
20
- super().__init__()
21
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
22
- self.voice_input = None
23
- self.grid_layout = QGridLayout()
24
- self.grid_layout.setContentsMargins(0, 0, 0, 0)
25
- # Init
26
- self.chat_input = ChatInputDialog()
27
- self.chat_list = list()
28
- self.choose_style_combobox = QComboBox()
29
- self.choose_style_combobox.addItems([
30
- language_wrapper.language_word_dict.get("chat_scene_creative"),
31
- language_wrapper.language_word_dict.get("chat_scene_precise"),
32
- language_wrapper.language_word_dict.get("chat_scene_balanced")
33
- ])
34
- self.choose_style_combobox.currentTextChanged.connect(self.change_style)
35
- self.param_key_name_list = [
36
- "widget_type", "file_path", "url", "text", "opacity", "speed", "volume", "font_size", "play_rate",
37
- "web_setting_open_local_file", "web_setting_open_enable_input", "position_x", "position_y"
38
- ]
39
- # New topic button
40
- self.new_topic_button = QPushButton(language_wrapper.language_word_dict.get("chat_scene_new_topic"))
41
- self.new_topic_button.clicked.connect(self.new_topic)
42
- # Start button
43
- self.start_button = QPushButton(language_wrapper.language_word_dict.get("chat_scene_start_button"))
44
- self.start_button.clicked.connect(self.start_chat)
45
- # Chat panel
46
- self.chat_panel = QPlainTextEdit()
47
- self.chat_panel.setLineWrapMode(self.chat_panel.LineWrapMode.NoWrap)
48
- self.chat_panel.setReadOnly(True)
49
- self.chat_panel_scroll_area = QScrollArea()
50
- self.chat_panel_scroll_area.setWidgetResizable(True)
51
- self.chat_panel_scroll_area.setViewportMargins(0, 0, 0, 0)
52
- self.chat_panel_scroll_area.setWidget(self.chat_panel)
53
- self.chat_panel.setFont(QFontDatabase.font(self.font().family(), "", 16))
54
- # Scene
55
- self.scene = SceneManager()
56
- self.scene_component: Dict[str, Callable] = {
57
- "IMAGE": self.scene.add_image,
58
- "GIF": self.scene.add_gif,
59
- "SOUND": self.scene.add_sound,
60
- "TEXT": self.scene.add_text,
61
- "VIDEO": self.scene.add_video,
62
- "WEB": self.scene.add_web,
63
- "EXTEND_UI_FILE": self.scene.add_extend_ui_file
64
- }
65
- # Font size combobox
66
- self.font_size_label = QLabel(language_wrapper.language_word_dict.get("Font size"))
67
- self.font_size_combobox = QComboBox()
68
- for font_size in range(2, 101, 2):
69
- self.font_size_combobox.addItem(str(font_size))
70
- self.font_size_combobox.setCurrentText("16")
71
- self.font_size_combobox.currentTextChanged.connect(self.update_panel_text_size)
72
- # Close delay combobox
73
- self.close_delay_label = QLabel(language_wrapper.language_word_dict.get("close_delay"))
74
- self.close_delay_combobox = QComboBox()
75
- for sec in range(1, 101, 1):
76
- self.close_delay_combobox.addItem(str(sec))
77
- self.close_delay_combobox.setCurrentText("10")
78
- # Load scene
79
- self.scene_input_button = QPushButton(language_wrapper.language_word_dict.get("scene_input"))
80
- self.scene_input_button.clicked.connect(lambda: load_scene_json(self))
81
- # Locale box
82
- self.locale_label = QLabel(language_wrapper.language_word_dict.get("country_code"))
83
- self.locale_input = QLineEdit()
84
- self.locale_input.setText("zh-tw")
85
- self.local_box = QBoxLayout(QBoxLayout.Direction.LeftToRight)
86
- self.local_box.addWidget(self.locale_label)
87
- self.local_box.addWidget(self.locale_input)
88
- # Start voice input
89
- self.start_voice_input_button = QPushButton(
90
- language_wrapper.language_word_dict.get("start_chat_voice_input_ui"))
91
- self.start_voice_input_button.clicked.connect(self.start_voice_input)
92
- # Show toast checkbox
93
- self.show_toast_checkbox_label = QLabel(
94
- language_wrapper.language_word_dict.get("should_we_show_toast"))
95
- self.show_toast_checkbox = QCheckBox()
96
- # Add to layout
97
- self.grid_layout.addWidget(self.choose_style_combobox, 0, 0)
98
- self.grid_layout.addWidget(self.close_delay_label, 0, 1)
99
- self.grid_layout.addWidget(self.close_delay_combobox, 0, 2)
100
- self.grid_layout.addWidget(self.font_size_label, 0, 3)
101
- self.grid_layout.addWidget(self.font_size_combobox, 0, 4)
102
- self.grid_layout.addLayout(self.local_box, 0, 5)
103
- self.grid_layout.addWidget(self.show_toast_checkbox_label, 0, 6)
104
- self.grid_layout.addWidget(self.show_toast_checkbox, 0, 7)
105
- self.grid_layout.addWidget(self.new_topic_button, 0, 8)
106
- self.grid_layout.addWidget(self.scene_input_button, 0, 9)
107
- self.grid_layout.addWidget(self.start_voice_input_button, 0, 10)
108
- self.grid_layout.addWidget(self.start_button, 0, 11)
109
- self.grid_layout.addWidget(self.chat_panel_scroll_area, 1, 0, -1, -1)
110
- # update panel timer
111
- self.update_panel_timer = QTimer()
112
- self.update_panel_timer.setInterval(10)
113
- self.update_panel_timer.timeout.connect(self.update_panel)
114
- self.update_panel_timer.start()
115
- self.setLayout(self.grid_layout)
116
-
117
- def update_panel(self):
118
- if not PANEL_MESSAGE_QUEUE.empty():
119
- text = PANEL_MESSAGE_QUEUE.get_nowait()
120
- self.chat_panel.appendPlainText(text)
121
- self.chat_panel.appendPlainText("\n")
122
-
123
- def update_panel_text_size(self):
124
- self.chat_panel.setFont(
125
- QFontDatabase.font(self.font().family(), "", int(self.font_size_combobox.currentText())))
126
-
127
- def start_chat(self) -> None:
128
- self.chat_input = ChatInputDialog(
129
- close_time=int(self.close_delay_combobox.currentText()) * 1000,
130
- font_size=int(self.font_size_combobox.currentText()),
131
- show_toast=self.show_toast_checkbox.isChecked()
132
- )
133
- self.chat_input.show()
134
- self.chat_input.send_text_button.clicked.connect(self.send_chat)
135
- if chat_model.rowCount() > 0:
136
- self.start_scene()
137
-
138
- def start_voice_input(self):
139
- self.voice_input = ChatSpeechToText()
140
- self.voice_input.show()
141
- self.voice_input.send_text_button.clicked.connect(self.send_voice_chat)
142
-
143
- def send_voice_chat(self):
144
- chat_thread = ChatThread(self.voice_input.voice_text_edit.text(), self.locale_input.text())
145
- chat_thread.start()
146
-
147
- def send_chat(self):
148
- chat_thread = ChatThread(self.chat_input.chat_input.toPlainText(), self.locale_input.text())
149
- chat_thread.start()
150
-
151
- def change_style(self):
152
- DELEGATE_CHAT.change_style(self.choose_style_combobox.currentText())
153
-
154
- def new_topic(self):
155
- DELEGATE_CHAT.new_topic(self.chat_panel)
156
- self.chat_input.close()
157
-
158
- def close_chat_ui(self):
159
- if self.chat_input.isVisible():
160
- self.chat_input.close()
161
- self.chat_input = None
162
- self.chat_list.clear()
163
- self.close_scene()
164
-
165
- def close_scene(self) -> None:
166
- self.scene.widget_list.clear()
167
- if self.scene:
168
- if self.scene.graphic_view:
169
- self.scene.graphic_view.close()
170
-
171
- def start_scene(self) -> None:
172
- front_engine_logger.info("start_scene")
173
- for row in range(chat_model.rowCount()):
174
- widget_type_text = chat_model.item(row, 0).text()
175
- add_widget_function = self.scene_component.get(widget_type_text)
176
- param_dict: Dict[str, str] = dict()
177
- for column in range(1, chat_model.columnCount()):
178
- param = chat_model.item(row, column).text()
179
- if param != "":
180
- param_dict.update({self.param_key_name_list[column]: param})
181
- add_widget_function(param_dict)
182
- front_engine_logger.info(f"start_scene type: {widget_type_text}, param: {param_dict}")
183
- self.scene.show()
184
-
185
- def close(self) -> bool:
186
- self.close_chat_ui()
187
- return super().close()
@@ -1,78 +0,0 @@
1
- import asyncio
2
- import json
3
- from pathlib import Path
4
- from queue import Queue
5
- from threading import Thread
6
-
7
- from re_edge_gpt import Chatbot, ConversationStyle
8
- from PySide6.QtWidgets import QPlainTextEdit
9
-
10
-
11
- class DelegateChat(object):
12
-
13
- def __init__(self):
14
- self.chat_bot = None
15
- self.style = ConversationStyle.creative
16
-
17
- def new_topic(self, message_panel: QPlainTextEdit):
18
- self.chat_bot = None
19
- message_panel.clear()
20
-
21
- def change_style(self, style: str):
22
- if style == "creative":
23
- self.style = ConversationStyle.creative
24
- elif style == "precise":
25
- self.style = ConversationStyle.precise
26
- else:
27
- self.style = ConversationStyle.balanced
28
-
29
-
30
- class ChatThread(Thread):
31
-
32
- def __init__(self, chat_send_message: str, locale: str):
33
- super().__init__()
34
- self.current_message = None
35
- self.chat_send_message = chat_send_message
36
- PANEL_MESSAGE_QUEUE.put_nowait("Q: " + chat_send_message)
37
- self.locale = locale
38
- if DELEGATE_CHAT.chat_bot is not None:
39
- self.chat_bot = DELEGATE_CHAT.chat_bot
40
-
41
- def run(self) -> None:
42
- try:
43
- chat_response = dict()
44
-
45
- async def send_chat_async():
46
- nonlocal chat_response
47
- if DELEGATE_CHAT.chat_bot is None:
48
- cookies = json.loads(open(
49
- str(Path(str(Path.cwd()) + "/bing_cookies.json")), encoding="utf-8").read())
50
- bot = await Chatbot.create(cookies=cookies)
51
- response = await bot.ask(
52
- prompt=self.chat_send_message, conversation_style=DELEGATE_CHAT.style, locale=self.locale
53
- )
54
- chat_response = response
55
- DELEGATE_CHAT.chat_bot = bot
56
- else:
57
- response = await DELEGATE_CHAT.chat_bot.ask(
58
- prompt=self.chat_send_message, conversation_style=DELEGATE_CHAT.style)
59
- chat_response = response
60
-
61
- asyncio.run(send_chat_async())
62
- self.current_message = chat_response
63
- if self.current_message is not None:
64
- for text_dict in self.current_message.get("item").get("messages"):
65
- if text_dict.get("author") == "bot":
66
- response_text: str = text_dict.get("text")
67
- if response_text is not None and not response_text.isspace():
68
- MESSAGE_QUEUE.put_nowait(response_text)
69
- PANEL_MESSAGE_QUEUE.put_nowait("A: " + response_text)
70
- except Exception as error:
71
- EXCEPTION_QUEUE.put_nowait(repr(error))
72
- raise error
73
-
74
-
75
- MESSAGE_QUEUE = Queue()
76
- PANEL_MESSAGE_QUEUE = Queue()
77
- DELEGATE_CHAT = DelegateChat()
78
- EXCEPTION_QUEUE = Queue()
@@ -1,70 +0,0 @@
1
- import queue
2
- import sys
3
- import time
4
-
5
- from PySide6.QtCore import QTimer, Qt
6
- from PySide6.QtWidgets import QWidget, QPushButton, QBoxLayout, QLineEdit
7
- from speech_recognition import Microphone
8
- from speech_recognition import Recognizer
9
- from speech_recognition import RequestError, UnknownValueError
10
- from threading import Thread
11
-
12
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
13
-
14
- LISTENER_QUEUE = queue.Queue()
15
-
16
-
17
- def callback(recognizer: Recognizer, audio):
18
- try:
19
- text = recognizer.recognize_google(audio)
20
- LISTENER_QUEUE.put_nowait(text)
21
- except (RequestError, UnknownValueError) as error:
22
- print(repr(error), file=sys.stderr)
23
-
24
-
25
- class ChatSpeechToText(QWidget):
26
-
27
- def __init__(self):
28
- super().__init__()
29
- # UI
30
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
31
- self.box_layout = QBoxLayout(QBoxLayout.Direction.LeftToRight)
32
- self.voice_text_edit = QLineEdit()
33
- self.start_listen_button = QPushButton(
34
- language_wrapper.language_word_dict.get("chat_recognizer_voice_button"))
35
- self.start_listen_button.clicked.connect(self.start_listener_thread)
36
- self.send_text_button = QPushButton(
37
- language_wrapper.language_word_dict.get("chat_scene_send_chat"))
38
- self.box_layout.addWidget(self.voice_text_edit)
39
- self.box_layout.addWidget(self.start_listen_button)
40
- self.box_layout.addWidget(self.send_text_button)
41
- self.setLayout(self.box_layout)
42
- # Listener Timer
43
- self.listener_timer = QTimer()
44
- self.listener_timer.setInterval(100)
45
- self.listener_timer.timeout.connect(self.update_voice_edit)
46
- self.listener_timer.start()
47
-
48
- def start_listener_thread(self):
49
- listener_thread = Thread(target=self.start_listener)
50
- listener_thread.daemon = True
51
- listener_thread.start()
52
-
53
- @classmethod
54
- def start_listener(cls):
55
- recognizer = Recognizer()
56
- microphone = Microphone()
57
- with microphone as source:
58
- recognizer.adjust_for_ambient_noise(source, duration=0.1)
59
- stop_listening = recognizer.listen_in_background(microphone, callback)
60
- for receive_sound_time in range(50):
61
- time.sleep(0.1)
62
- stop_listening(wait_for_stop=False)
63
-
64
- def update_voice_edit(self):
65
- if not LISTENER_QUEUE.empty():
66
- self.voice_text_edit.setText(str(LISTENER_QUEUE.get_nowait()))
67
-
68
- def close(self) -> bool:
69
- self.listener_timer.stop()
70
- return super().close()
@@ -1,32 +0,0 @@
1
- import asyncio
2
- from queue import Queue
3
- from threading import Thread
4
- from re_edge_gpt import ImageGenAsync
5
-
6
-
7
- class ImageGenThread(Thread):
8
-
9
- def __init__(self, image_keyword: str):
10
- super().__init__()
11
- auth_cooker = open("bing_cookies.txt", "r+").read()
12
- self.async_gen = ImageGenAsync(auth_cookie=auth_cooker)
13
- self.image_keyword = image_keyword
14
-
15
- def run(self) -> None:
16
- try:
17
- image_list = list()
18
-
19
- async def send_chat_async():
20
- nonlocal image_list
21
- image_list = await self.async_gen.get_images(self.image_keyword)
22
-
23
- asyncio.run(send_chat_async())
24
- for image in image_list:
25
- IMAGE_QUEUE.put_nowait(image)
26
- except Exception as error:
27
- EXCEPTION_QUEUE.put_nowait(repr(error))
28
- raise error
29
-
30
-
31
- IMAGE_QUEUE = Queue()
32
- EXCEPTION_QUEUE = Queue()
@@ -1,63 +0,0 @@
1
- from typing import List
2
-
3
- import requests
4
- from PySide6.QtCore import QTimer
5
- from PySide6.QtGui import QPixmap, Qt
6
- from PySide6.QtWidgets import QWidget, QPushButton, QLineEdit, QGridLayout, QMessageBox, QPlainTextEdit
7
-
8
- from frontengine.show.image_generation.image_generation_show import ImageGenerateShow
9
- from frontengine.ui.setting.image_generation.generation_image_thread import ImageGenThread, IMAGE_QUEUE
10
- from frontengine.utils.multi_language.language_wrapper import language_wrapper
11
-
12
-
13
- class ImageGenerationUI(QWidget):
14
- def __init__(self):
15
- super().__init__()
16
- self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
17
- # UI
18
- self.image_keyword_input = QLineEdit()
19
- self.send_text_button = QPushButton()
20
- self.send_text_button.setText(language_wrapper.language_word_dict.get("start_generate_image"))
21
- self.image_panel = QPlainTextEdit()
22
- self.image_panel.setReadOnly(True)
23
- self.send_text_button.clicked.connect(self.generate_image)
24
- # Layout
25
- self.grid_layout = QGridLayout()
26
- self.grid_layout.setContentsMargins(0, 0, 0, 0)
27
- self.grid_layout.addWidget(self.image_keyword_input, 0, 0)
28
- self.grid_layout.addWidget(self.send_text_button, 0, 1)
29
- self.grid_layout.addWidget(self.image_panel, 1, 0, -1, -1)
30
- self.setLayout(self.grid_layout)
31
- # Pull image timer
32
- self.pull_image_timer = QTimer()
33
- self.pull_image_timer.setInterval(1000)
34
- self.pull_image_timer.timeout.connect(self.get_image)
35
- self.pull_image_timer.start()
36
- # Manage show
37
- self.show_list: List[QWidget] = list()
38
-
39
- def generate_image(self):
40
- if self.image_keyword_input.text() == "" or self.image_keyword_input.text().isspace():
41
- input_error_message = QMessageBox(self)
42
- input_error_message.setText(language_wrapper.language_word_dict.get("input_error"))
43
- input_error_message.show()
44
- else:
45
- image_thread = ImageGenThread(self.image_keyword_input.text())
46
- image_thread.daemon = True
47
- image_thread.start()
48
-
49
- def get_image(self):
50
- if not IMAGE_QUEUE.empty():
51
- image_link = IMAGE_QUEUE.get_nowait()
52
- image_response = requests.get(image_link)
53
- image = QPixmap()
54
- image.loadFromData(image_response.content)
55
- image_show = ImageGenerateShow(image, image_link)
56
- self.show_list.append(image_show)
57
- image_show.show()
58
- self.image_panel.appendPlainText(image_link)
59
-
60
- def close(self) -> bool:
61
- for widget in self.show_list:
62
- widget.close()
63
- return super().close()
File without changes
File without changes
File without changes
@@ -1,112 +0,0 @@
1
- frontengine/__init__.py,sha256=7LHgYc7iQiZwLtvTDC8E-gmmjlfBzEPyvq7QG6PCtwk,2178
2
- frontengine/show/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- frontengine/show/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- frontengine/show/chat/chat_toast.py,sha256=dt4aUf0_ESZuRvbjKhJxoAzyzIxp-I05xhh0UdtyhTU,1975
5
- frontengine/show/gif/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- frontengine/show/gif/paint_gif.py,sha256=AiNKw7eXNDBU3qKxexKU45Bh-IDlP2J_OC_WOALBPUE,2852
7
- frontengine/show/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- frontengine/show/image/paint_image.py,sha256=66oinaBpFSZrMqWIFO9X3_45Kl61_EsuIbh4b_dhLX0,2295
9
- frontengine/show/image_generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- frontengine/show/image_generation/image_generation_show.py,sha256=mMcPWw9EVIq201HpxpN70G7hgcvrptZlKpm-wWq_BLY,1611
11
- frontengine/show/load/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- frontengine/show/load/load_someone_make_ui.py,sha256=yjMrkA76VEYkKXygwKmoKaADymjjDlebI-7PNa6DrEo,1010
13
- frontengine/show/scene/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- frontengine/show/scene/extend_graphic_scene.py,sha256=YfxAvMllAOS67XtyEoTiVWultD_NamWdH2plV75QcQ0,150
15
- frontengine/show/scene/extend_graphic_view.py,sha256=RHchIGI3UWjmrpAo9aIfyTvCV_ENGIbn_FOrq-nZ46w,1935
16
- frontengine/show/scene/scene.py,sha256=BZVNgeXR46p6hfHusUEX7dVCoxk9eUA0vksuWafLr8c,5337
17
- frontengine/show/sound_player/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- frontengine/show/sound_player/sound_effect.py,sha256=djeBKMv3FrAWd34e26n3P4exr9gSmBTLGLaLlYb0xtI,2102
19
- frontengine/show/sound_player/sound_player.py,sha256=foQyPv1UwQnJ7AW9I1gF8lTCoHh5dSDi0dE6kg-Uq3Q,2205
20
- frontengine/show/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- frontengine/show/text/draw_text.py,sha256=J2C5RbpsevfnNEzwd1jtYxi4K5vztAl8OcisU3zueZ4,2148
22
- frontengine/show/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- frontengine/show/video/video_player.py,sha256=45rCubWI_V23cr-luPtm9oEXYqp7MRsUQQhoqykIM28,3391
24
- frontengine/show/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- frontengine/show/web/webview.py,sha256=AnzmaK7DprXyQ2FMgmTfNRm0XAR2CqJqSOM9VcwHEPg,2526
26
- frontengine/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- frontengine/ui/color/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- frontengine/ui/color/global_color.py,sha256=Rh-R-X2BHVjcK5MTBZ1nEMVHgLj1rP4nk-wTQKbiwFA,125
29
- frontengine/ui/dialog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- frontengine/ui/dialog/choose_file_dialog.py,sha256=UvQEc0sjGgJdfx2YbTANtCrIiXTlwh30byZgessa8MM,4398
31
- frontengine/ui/dialog/save_file_dialog.py,sha256=e-sgUsmEAU1JSvzzmTmc2pf9rnW61alOgd48ESTYG1I,373
32
- frontengine/ui/main/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- frontengine/ui/main/language_menu.py,sha256=oIUW20LPZKIQ0IjTHchgkPeqCpQZidAzFkN29qKQ3OU,2039
34
- frontengine/ui/main/main_ui.py,sha256=PyBD17-UYoh1OicV6bhNUflPmOss_nTezMqgMVDS83M,7827
35
- frontengine/ui/main/system_tray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- frontengine/ui/main/system_tray/extend_system_tray.py,sha256=jcT4E2_qR_5cICqNSgDdeVYxzQHpB4jHcn-sLZCg8BA,1633
37
- frontengine/ui/setting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- frontengine/ui/setting/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- frontengine/ui/setting/chat/chat_model.py,sha256=qmd1yh3q1Kv9GQHYD9YCVBLO-vI66t7OGVUxJnwSpg4,2775
40
- frontengine/ui/setting/chat/chat_scene_input.py,sha256=1AlGt1FGu6q3fKxfC-hCmNJeLPAJNdFb4oXEf3tH2cE,3059
41
- frontengine/ui/setting/chat/chat_scene_setting.py,sha256=Ctj9AhRMXZRkSRfA2io4_LLb3gBbDUt3mDkVc6Vx214,9030
42
- frontengine/ui/setting/chat/chatthread.py,sha256=T7GNv_WnOw5VH5pjdQ5EBx2xk5_T6YMszsQNAxmqJE4,2932
43
- frontengine/ui/setting/chat/speech_to_text.py,sha256=jNwivcGLvt-1ObNKLpfUvrj2rh2hx_TZPmbqh0iQ8cI,2616
44
- frontengine/ui/setting/control_center/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- frontengine/ui/setting/control_center/control_center_ui.py,sha256=_PSvuwCrQ6adyZwf5cOu8POcfPkzELaK1rEY1rC-iTo,8337
46
- frontengine/ui/setting/gif/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- frontengine/ui/setting/gif/gif_setting_ui.py,sha256=sGGW79bqbSJkUGYGDF93hLApJYxPSZr1XlWeFTL44Xs,6102
48
- frontengine/ui/setting/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- frontengine/ui/setting/image/image_setting_ui.py,sha256=KsFNb1eHU1pMEDfGZdX1CKJA09w6q8aseqkb2B-MYYQ,5220
50
- frontengine/ui/setting/image_generation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- frontengine/ui/setting/image_generation/generation_image_thread.py,sha256=RNVCKc_Sqgvyq6J622fprAnuqlbR5WLXLmbbpPQG2gk,929
52
- frontengine/ui/setting/image_generation/image_generation_input.py,sha256=N6I1BPnUB29TuJGlrnOvNm9b83bYzWE8BQg-Rs9V0wk,2747
53
- frontengine/ui/setting/scene_setting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- frontengine/ui/setting/scene_setting/scene_setting_ui.py,sha256=scewHWx3aPX40Wkh3UEBt9Ti0vRzzs6XZQuTNzomTQQ,2564
55
- frontengine/ui/setting/scene_setting/scene_tabs/Image.py,sha256=GI6Z4tWTBPqn9kADbqASalIrYKXLa0PeR_SVnRX13Ac,3134
56
- frontengine/ui/setting/scene_setting/scene_tabs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- frontengine/ui/setting/scene_setting/scene_tabs/gif.py,sha256=YEb0r8snMeIvo1P634sflfehrei8J7WdjTccfB4KhkM,3788
58
- frontengine/ui/setting/scene_setting/scene_tabs/scene_control.py,sha256=S9KT48_w4jJSJ723KXiKHPaTKIBiJj6ZvPsnl-MVWQs,3929
59
- frontengine/ui/setting/scene_setting/scene_tabs/sound.py,sha256=5ITHzfTOzbIC3g13rNHtxZIZlj3No5kweaPeLaMXtrE,2035
60
- frontengine/ui/setting/scene_setting/scene_tabs/tableview_model.py,sha256=vt3sNwWs7w05wjDadU0pupmsP7S5qnCYWZQ_ppkU27k,2810
61
- frontengine/ui/setting/scene_setting/scene_tabs/text.py,sha256=TgVXGj5EMCwIenV9UyYKqJCJElhi1fIIMmD58lSdI5E,3940
62
- frontengine/ui/setting/scene_setting/scene_tabs/ui.py,sha256=3XY8hjiDMJsF7tiac5onuIpkk6lzmAK--EZJPjepn2U,2852
63
- frontengine/ui/setting/scene_setting/scene_tabs/video.py,sha256=soWmt8pZh0CbOS6qLDhSgtDA7btwLXS_vUgOJp13M-k,4589
64
- frontengine/ui/setting/scene_setting/scene_tabs/web.py,sha256=O6VglN9oKSs5YjPwCye--NaN6dOl1u146LNuJKc7o5M,3878
65
- frontengine/ui/setting/sound_player/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- frontengine/ui/setting/sound_player/sound_player_setting_ui.py,sha256=mu7c0DtkKrvGgH2VTDY-W5N1BAK6oJewT-_5qYgeZFM,6038
67
- frontengine/ui/setting/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- frontengine/ui/setting/text/text_setting_ui.py,sha256=JhUT3ywQ-hbc1iY-NzuioblJ1AZJyVmQ5XF-B_mxEIA,4767
69
- frontengine/ui/setting/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- frontengine/ui/setting/video/video_setting_ui.py,sha256=gimeIcp_BQoPt1x83pHfv6fMzAfprqP1iqfBWK3Mt-w,7212
71
- frontengine/ui/setting/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- frontengine/ui/setting/web/web_setting_ui.py,sha256=aRz9WIx1DbPiFl8lQiqpPa4BxQ_38qPelLp9LZLn7Dw,4816
73
- frontengine/user_setting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
- frontengine/user_setting/user_setting_file.py,sha256=0xq0_QmjI3hi9LVfgVoSUhOwtKttms0L4KwkPFHs5t0,602
75
- frontengine/user_setting/gif/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
- frontengine/user_setting/gif/gif_setting.py,sha256=PcZWWl2ik0cD7fXoJ3KBD-g0GDaubi-JsmyxaCGYQ64,89
77
- frontengine/user_setting/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- frontengine/user_setting/image/image_setting.py,sha256=GkEbR2ZJCpwYAqRBfrVQbGJoTQsIhAlgqHm9RNMJkAQ,79
79
- frontengine/user_setting/sound/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- frontengine/user_setting/sound/sound_setting.py,sha256=VWFNDTT2uSXjs1bxUGnOAMNWdqHT_0vgV8OAWd2E3Nc,72
81
- frontengine/user_setting/text/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- frontengine/user_setting/text/text_setting.py,sha256=AxCajm83JfL-TBpVgAaDvJlpV1FsfNCKBTVUsC8Zk98,98
83
- frontengine/user_setting/video/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
- frontengine/user_setting/video/video_setting.py,sha256=LIPZpUBNMTPhW_gbH3g8rUqZ1rsqXcUZu5BFmhrCB-o,118
85
- frontengine/user_setting/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
- frontengine/user_setting/web/web_setting.py,sha256=9Nn0AXvYtOvucWB0DtsM_DTYyxUuFMarmKT0VODMETI,72
87
- frontengine/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
- frontengine/utils/exception/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
89
- frontengine/utils/exception/exception_tags.py,sha256=V4R_RlNYX_zgAKU9I7NLimYic--oF-2qHDHCwpVYHcc,325
90
- frontengine/utils/exception/exceptions.py,sha256=ZGY8HPvx3PGQkH_5VKF3IQMmkkUbBKJILTGn4o2Y4-g,296
91
- frontengine/utils/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- frontengine/utils/file/open/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
93
- frontengine/utils/file/open/open_file.py,sha256=YpxoGqhT_yuyMR0fu0UW8jBBvlKH-9G8AGJlN7u3L4Q,976
94
- frontengine/utils/file/save/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
95
- frontengine/utils/file/save/save_file.py,sha256=KF6IG3fX8RK2BAakwKdxTRC9HFpz3fEe90lqUBfAchk,733
96
- frontengine/utils/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
- frontengine/utils/json/json_file.py,sha256=vFZDM0SDxlVcwN-2iGCGM24pl5ldO0a0SVNm7EG8Nk8,1421
98
- frontengine/utils/json_format/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
99
- frontengine/utils/json_format/json_process.py,sha256=xJt_4Hm_o3sNDoeGtRW9Q7fsRj3DLiTbW-W8IqB8vt8,1021
100
- frontengine/utils/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
- frontengine/utils/logging/loggin_instance.py,sha256=Zjr384o2q8x0QWv_hNoHIM_zCp5-HFgW14t-d30GUcQ,598
102
- frontengine/utils/multi_language/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
- frontengine/utils/multi_language/english.py,sha256=kleLtlcQWSU8ilseE1E0k_AXHBVL_vQKuTOOxL-xdmg,5085
104
- frontengine/utils/multi_language/language_wrapper.py,sha256=KBqsG6ng5LSJkGqmu_YDxI8yAjXwgHM12DOzVgh_HXI,848
105
- frontengine/utils/multi_language/traditional_chinese.py,sha256=pQyBBNDsFIZQgRk4EOnI3zxBWFHwrOWrYJ2y_p7zHgY,5243
106
- frontengine/utils/redirect_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
- frontengine/utils/redirect_manager/redirect_manager_class.py,sha256=zGJeVpjRU12MCnhVAdksAIhK_IhddI4cNKVb7DMgOZA,1888
108
- frontengine-0.0.55.dist-info/LICENSE,sha256=b3VlPBXnrDylKGffOEOLWMgOX-yfd65XC7PA1_sox2o,1085
109
- frontengine-0.0.55.dist-info/METADATA,sha256=rZyK6KE5f_EDgJefBPkVNz4Ik_CA8B3bR4i_OeEfmaE,3819
110
- frontengine-0.0.55.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
111
- frontengine-0.0.55.dist-info/top_level.txt,sha256=btCybScN_ubeQ8phsSDBB0T-HyHjqt7b-WPy61uTox0,12
112
- frontengine-0.0.55.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes