frontengine-dev 0.0.56__py3-none-any.whl → 0.0.58__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.
- frontengine/__init__.py +13 -15
- frontengine/show/gif/paint_gif.py +4 -2
- frontengine/show/image/paint_image.py +4 -2
- frontengine/show/scene/extend_graphic_scene.py +0 -1
- frontengine/show/scene/extend_graphic_view.py +2 -1
- frontengine/show/scene/scene.py +23 -41
- frontengine/show/sound_player/sound_effect.py +1 -2
- frontengine/show/sound_player/sound_player.py +1 -2
- frontengine/show/text/draw_text.py +31 -4
- frontengine/show/video/video_player.py +1 -2
- frontengine/show/web/webview.py +1 -3
- frontengine/{ui/main/system_tray → system_tray}/extend_system_tray.py +1 -3
- frontengine/ui/dialog/choose_file_dialog.py +19 -43
- frontengine/ui/{main/main_ui.py → main_ui.py} +39 -44
- frontengine/ui/menu/help_menu.py +25 -0
- frontengine/ui/menu/how_to_menu.py +25 -0
- frontengine/ui/{main → menu}/language_menu.py +10 -10
- frontengine/ui/{setting → page}/control_center/control_center_ui.py +11 -18
- frontengine/ui/{setting → page}/gif/gif_setting_ui.py +20 -8
- frontengine/ui/{setting → page}/image/image_setting_ui.py +19 -7
- frontengine/ui/page/scene_setting/scene_manager.py +96 -0
- frontengine/ui/page/scene_setting/scene_page/gif.py +102 -0
- frontengine/ui/page/scene_setting/scene_page/image.py +83 -0
- frontengine/ui/page/scene_setting/scene_page/sound.py +84 -0
- frontengine/ui/page/scene_setting/scene_page/text.py +93 -0
- frontengine/ui/page/scene_setting/scene_page/video.py +122 -0
- frontengine/ui/page/scene_setting/scene_page/web.py +66 -0
- frontengine/ui/page/scene_setting/scene_setting_ui.py +55 -0
- frontengine/ui/{setting → page}/sound_player/sound_player_setting_ui.py +0 -1
- frontengine/ui/{setting → page}/text/text_setting_ui.py +39 -11
- frontengine/ui/page/utils.py +23 -0
- frontengine/ui/{setting → page}/video/video_setting_ui.py +23 -7
- frontengine/ui/{setting → page}/web/web_setting_ui.py +19 -7
- frontengine/user_setting/scene_setting.py +34 -0
- frontengine/user_setting/user_setting_file.py +2 -1
- frontengine/utils/browser/browser.py +5 -0
- frontengine/utils/multi_language/english.py +14 -2
- frontengine/utils/multi_language/traditional_chinese.py +15 -2
- {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/METADATA +4 -51
- frontengine_dev-0.0.58.dist-info/RECORD +91 -0
- {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/WHEEL +1 -1
- frontengine/show/chat/chat_toast.py +0 -55
- frontengine/show/image_generation/image_generation_show.py +0 -43
- frontengine/ui/setting/chat/chat_model.py +0 -65
- frontengine/ui/setting/chat/chat_scene_input.py +0 -72
- frontengine/ui/setting/chat/chat_scene_setting.py +0 -187
- frontengine/ui/setting/chat/chatthread.py +0 -78
- frontengine/ui/setting/chat/speech_to_text.py +0 -70
- frontengine/ui/setting/image_generation/generation_image_thread.py +0 -32
- frontengine/ui/setting/image_generation/image_generation_input.py +0 -63
- frontengine/ui/setting/scene_setting/scene_setting_ui.py +0 -48
- frontengine/ui/setting/scene_setting/scene_tabs/Image.py +0 -61
- frontengine/ui/setting/scene_setting/scene_tabs/gif.py +0 -74
- frontengine/ui/setting/scene_setting/scene_tabs/scene_control.py +0 -77
- frontengine/ui/setting/scene_setting/scene_tabs/sound.py +0 -44
- frontengine/ui/setting/scene_setting/scene_tabs/tableview_model.py +0 -65
- frontengine/ui/setting/scene_setting/scene_tabs/text.py +0 -77
- frontengine/ui/setting/scene_setting/scene_tabs/ui.py +0 -56
- frontengine/ui/setting/scene_setting/scene_tabs/video.py +0 -88
- frontengine/ui/setting/scene_setting/scene_tabs/web.py +0 -74
- frontengine/ui/setting/text/__init__.py +0 -0
- frontengine/ui/setting/video/__init__.py +0 -0
- frontengine/ui/setting/web/__init__.py +0 -0
- frontengine/user_setting/gif/__init__.py +0 -0
- frontengine/user_setting/gif/gif_setting.py +0 -5
- frontengine/user_setting/image/__init__.py +0 -0
- frontengine/user_setting/image/image_setting.py +0 -4
- frontengine/user_setting/sound/__init__.py +0 -0
- frontengine/user_setting/sound/sound_setting.py +0 -4
- frontengine/user_setting/text/__init__.py +0 -0
- frontengine/user_setting/text/text_setting.py +0 -5
- frontengine/user_setting/video/__init__.py +0 -0
- frontengine/user_setting/video/video_setting.py +0 -6
- frontengine/user_setting/web/__init__.py +0 -0
- frontengine/user_setting/web/web_setting.py +0 -4
- frontengine_dev-0.0.56.dist-info/RECORD +0 -112
- /frontengine/{show/chat → system_tray}/__init__.py +0 -0
- /frontengine/{show/image_generation → ui/menu}/__init__.py +0 -0
- /frontengine/ui/{main → page}/__init__.py +0 -0
- /frontengine/ui/{main/system_tray → page/control_center}/__init__.py +0 -0
- /frontengine/ui/{setting → page/gif}/__init__.py +0 -0
- /frontengine/ui/{setting/chat → page/image}/__init__.py +0 -0
- /frontengine/ui/{setting/control_center → page/scene_setting}/__init__.py +0 -0
- /frontengine/ui/{setting/gif → page/scene_setting/scene_page}/__init__.py +0 -0
- /frontengine/ui/{setting/image → page/sound_player}/__init__.py +0 -0
- /frontengine/ui/{setting/image_generation → page/text}/__init__.py +0 -0
- /frontengine/ui/{setting/scene_setting → page/video}/__init__.py +0 -0
- /frontengine/ui/{setting/scene_setting/scene_tabs → page/web}/__init__.py +0 -0
- /frontengine/{ui/setting/sound_player → utils/browser}/__init__.py +0 -0
- {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/LICENSE +0 -0
- {frontengine_dev-0.0.56.dist-info → frontengine_dev-0.0.58.dist-info}/top_level.txt +0 -0
@@ -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()
|
@@ -1,48 +0,0 @@
|
|
1
|
-
from typing import Union
|
2
|
-
|
3
|
-
from PySide6.QtCore import Qt
|
4
|
-
from PySide6.QtWidgets import QWidget, QGridLayout, QTabWidget
|
5
|
-
|
6
|
-
from frontengine.show.scene.scene import SceneManager
|
7
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.Image import ImageSceneSettingUI
|
8
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.gif import GIFSceneSettingUI
|
9
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.scene_control import SceneControlSettingUI
|
10
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.sound import SoundSceneSettingUI
|
11
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.text import TextSceneSettingUI
|
12
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.ui import UISceneSettingUI
|
13
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.video import VideoSceneSettingUI
|
14
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.web import WEBSceneSettingUI
|
15
|
-
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
16
|
-
|
17
|
-
|
18
|
-
class SceneSettingUI(QWidget):
|
19
|
-
|
20
|
-
def __init__(self):
|
21
|
-
super().__init__()
|
22
|
-
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
23
|
-
self.grid_layout = QGridLayout()
|
24
|
-
self.grid_layout.setContentsMargins(0, 0, 0, 0)
|
25
|
-
# Init variable
|
26
|
-
self.scene: Union[None, SceneManager] = None
|
27
|
-
self.scene_control_setting = SceneControlSettingUI()
|
28
|
-
# Tab widget
|
29
|
-
self.tab_widget = QTabWidget(self)
|
30
|
-
self.tab_widget.addTab(
|
31
|
-
SceneControlSettingUI(), language_wrapper.language_word_dict.get("scene_control_panel"))
|
32
|
-
self.tab_widget.addTab(
|
33
|
-
ImageSceneSettingUI(), language_wrapper.language_word_dict.get("tab_image_text"))
|
34
|
-
self.tab_widget.addTab(
|
35
|
-
GIFSceneSettingUI(), language_wrapper.language_word_dict.get("tab_gif_text"))
|
36
|
-
self.tab_widget.addTab(
|
37
|
-
TextSceneSettingUI(), language_wrapper.language_word_dict.get("tab_text_text"))
|
38
|
-
self.tab_widget.addTab(
|
39
|
-
VideoSceneSettingUI(), language_wrapper.language_word_dict.get("tab_video_text"))
|
40
|
-
self.tab_widget.addTab(
|
41
|
-
WEBSceneSettingUI(), language_wrapper.language_word_dict.get("tab_web_text"))
|
42
|
-
self.tab_widget.addTab(
|
43
|
-
SoundSceneSettingUI(), language_wrapper.language_word_dict.get("tab_sound_text"))
|
44
|
-
self.tab_widget.addTab(
|
45
|
-
UISceneSettingUI(), language_wrapper.language_word_dict.get("tab_external_ui"))
|
46
|
-
# Add to layout
|
47
|
-
self.grid_layout.addWidget(self.tab_widget, 0, 0, -1, -1)
|
48
|
-
self.setLayout(self.grid_layout)
|
@@ -1,61 +0,0 @@
|
|
1
|
-
from PySide6.QtCore import Qt
|
2
|
-
from PySide6.QtGui import QIntValidator
|
3
|
-
from PySide6.QtWidgets import QWidget, QBoxLayout, QPushButton, QSlider, QLabel, QLineEdit, QHBoxLayout
|
4
|
-
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
5
|
-
|
6
|
-
from frontengine.ui.dialog.choose_file_dialog import choose_image
|
7
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.tableview_model import add_row_data
|
8
|
-
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
9
|
-
|
10
|
-
|
11
|
-
class ImageSceneSettingUI(QWidget):
|
12
|
-
|
13
|
-
def __init__(self):
|
14
|
-
super().__init__()
|
15
|
-
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
16
|
-
self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
|
17
|
-
# Image button
|
18
|
-
self.image_button = QPushButton(
|
19
|
-
language_wrapper.language_word_dict.get("scene_add_image")
|
20
|
-
)
|
21
|
-
self.image_button.clicked.connect(self.add_image)
|
22
|
-
# Opacity slider
|
23
|
-
self.opacity_slider = QSlider()
|
24
|
-
self.opacity_slider.setMinimum(1)
|
25
|
-
self.opacity_slider.setMaximum(100)
|
26
|
-
self.opacity_slider.setTickInterval(1)
|
27
|
-
self.opacity_slider.setValue(20)
|
28
|
-
self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
|
29
|
-
self.opacity_label = QLabel()
|
30
|
-
self.opacity_label.setText(language_wrapper.language_word_dict.get("Opacity"))
|
31
|
-
self.opacity_box_h_layout = QHBoxLayout()
|
32
|
-
self.opacity_box_h_layout.addWidget(self.opacity_label)
|
33
|
-
self.opacity_box_h_layout.addWidget(self.opacity_slider)
|
34
|
-
# Position x input
|
35
|
-
self.position_x_input_label = QLabel(language_wrapper.language_word_dict.get("position_x"))
|
36
|
-
self.position_x_input = QLineEdit()
|
37
|
-
self.position_x_input.setValidator(QIntValidator(0, 999999, self))
|
38
|
-
self.position_x_layout = QHBoxLayout()
|
39
|
-
self.position_x_layout.addWidget(self.position_x_input_label)
|
40
|
-
self.position_x_layout.addWidget(self.position_x_input)
|
41
|
-
# Position y input
|
42
|
-
self.position_y_input_label = QLabel(language_wrapper.language_word_dict.get("position_y"))
|
43
|
-
self.position_y_input = QLineEdit()
|
44
|
-
self.position_y_input.setValidator(QIntValidator(0, 999999, self))
|
45
|
-
self.position_y_layout = QHBoxLayout()
|
46
|
-
self.position_y_layout.addWidget(self.position_y_input_label)
|
47
|
-
self.position_y_layout.addWidget(self.position_y_input)
|
48
|
-
# Set UI
|
49
|
-
self.box_layout.addLayout(self.opacity_box_h_layout)
|
50
|
-
self.box_layout.addLayout(self.position_x_layout)
|
51
|
-
self.box_layout.addLayout(self.position_y_layout)
|
52
|
-
self.box_layout.addWidget(self.image_button)
|
53
|
-
self.setLayout(self.box_layout)
|
54
|
-
|
55
|
-
def add_image(self) -> None:
|
56
|
-
image_path = choose_image(self)
|
57
|
-
if image_path is not None:
|
58
|
-
row_data = ["IMAGE", image_path, "", "", str(self.opacity_slider.value()), "", "", "", "", "", "",
|
59
|
-
self.position_x_input.text(), self.position_y_input.text()]
|
60
|
-
front_engine_logger.info(f"add image, param: {row_data}")
|
61
|
-
add_row_data(row_data)
|
@@ -1,74 +0,0 @@
|
|
1
|
-
from PySide6.QtCore import Qt
|
2
|
-
from PySide6.QtGui import QIntValidator
|
3
|
-
from PySide6.QtWidgets import QWidget, QBoxLayout, QPushButton, QSlider, QLabel, QLineEdit, QHBoxLayout
|
4
|
-
from frontengine.utils.multi_language.language_wrapper import language_wrapper
|
5
|
-
|
6
|
-
from frontengine.ui.dialog.choose_file_dialog import choose_gif
|
7
|
-
from frontengine.ui.setting.scene_setting.scene_tabs.tableview_model import add_row_data
|
8
|
-
from frontengine.utils.logging.loggin_instance import front_engine_logger
|
9
|
-
|
10
|
-
|
11
|
-
class GIFSceneSettingUI(QWidget):
|
12
|
-
|
13
|
-
def __init__(self):
|
14
|
-
super().__init__()
|
15
|
-
self.setAttribute(Qt.WidgetAttribute.WA_DeleteOnClose)
|
16
|
-
self.box_layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
|
17
|
-
# GIF button
|
18
|
-
self.gif_button = QPushButton(
|
19
|
-
language_wrapper.language_word_dict.get("scene_add_gif")
|
20
|
-
)
|
21
|
-
self.gif_button.clicked.connect(self.add_gif)
|
22
|
-
# Opacity slider
|
23
|
-
self.opacity_slider = QSlider()
|
24
|
-
self.opacity_slider.setMinimum(1)
|
25
|
-
self.opacity_slider.setMaximum(100)
|
26
|
-
self.opacity_slider.setTickInterval(1)
|
27
|
-
self.opacity_slider.setValue(20)
|
28
|
-
self.opacity_slider.setOrientation(Qt.Orientation.Horizontal)
|
29
|
-
self.opacity_label = QLabel()
|
30
|
-
self.opacity_label.setText(language_wrapper.language_word_dict.get("Opacity"))
|
31
|
-
self.opacity_box_h_layout = QHBoxLayout()
|
32
|
-
self.opacity_box_h_layout.addWidget(self.opacity_label)
|
33
|
-
self.opacity_box_h_layout.addWidget(self.opacity_slider)
|
34
|
-
# Speed slider
|
35
|
-
self.speed_slider = QSlider()
|
36
|
-
self.speed_slider.setMinimum(1)
|
37
|
-
self.speed_slider.setMaximum(100)
|
38
|
-
self.speed_slider.setTickInterval(1)
|
39
|
-
self.speed_slider.setValue(100)
|
40
|
-
self.speed_slider.setOrientation(Qt.Orientation.Horizontal)
|
41
|
-
self.speed_label = QLabel()
|
42
|
-
self.speed_label.setText(language_wrapper.language_word_dict.get("Speed"))
|
43
|
-
self.speed_box_h_layout = QHBoxLayout()
|
44
|
-
self.speed_box_h_layout.addWidget(self.speed_label)
|
45
|
-
self.speed_box_h_layout.addWidget(self.speed_slider)
|
46
|
-
# Position x input
|
47
|
-
self.position_x_input_label = QLabel(language_wrapper.language_word_dict.get("position_x"))
|
48
|
-
self.position_x_input = QLineEdit()
|
49
|
-
self.position_x_input.setValidator(QIntValidator(0, 999999, self))
|
50
|
-
self.position_x_layout = QHBoxLayout()
|
51
|
-
self.position_x_layout.addWidget(self.position_x_input_label)
|
52
|
-
self.position_x_layout.addWidget(self.position_x_input)
|
53
|
-
# Position y input
|
54
|
-
self.position_y_input_label = QLabel(language_wrapper.language_word_dict.get("position_y"))
|
55
|
-
self.position_y_input = QLineEdit()
|
56
|
-
self.position_y_input.setValidator(QIntValidator(0, 999999, self))
|
57
|
-
self.position_y_layout = QHBoxLayout()
|
58
|
-
self.position_y_layout.addWidget(self.position_y_input_label)
|
59
|
-
self.position_y_layout.addWidget(self.position_y_input)
|
60
|
-
# Set UI
|
61
|
-
self.box_layout.addLayout(self.opacity_box_h_layout)
|
62
|
-
self.box_layout.addLayout(self.speed_box_h_layout)
|
63
|
-
self.box_layout.addLayout(self.position_x_layout)
|
64
|
-
self.box_layout.addLayout(self.position_y_layout)
|
65
|
-
self.box_layout.addWidget(self.gif_button)
|
66
|
-
self.setLayout(self.box_layout)
|
67
|
-
|
68
|
-
def add_gif(self) -> None:
|
69
|
-
gif_path = choose_gif(self)
|
70
|
-
if gif_path is not None:
|
71
|
-
row_data = ["GIF", gif_path, "", "", str(self.opacity_slider.value()), str(self.speed_slider.value()),
|
72
|
-
"", "", "", "", "", self.position_x_input.text(), self.position_y_input.text()]
|
73
|
-
front_engine_logger.info(f"add gif, param: {row_data}")
|
74
|
-
add_row_data(row_data)
|