GameSentenceMiner 2.16.0__tar.gz → 2.16.1__tar.gz
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.
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/downloader/download_tools.py +44 -1
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/css/shared.css +1 -1
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/templates/database.html +1 -1
- gamesentenceminer-2.16.1/GameSentenceMiner/web/templates/index.html +50 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/templates/search.html +1 -1
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/templates/stats.html +1 -1
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner.egg-info/PKG-INFO +1 -1
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/PKG-INFO +1 -1
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/pyproject.toml +1 -1
- gamesentenceminer-2.16.0/GameSentenceMiner/web/templates/index.html +0 -50
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/ai/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/ai/ai_prompting.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/anki.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/assets/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/assets/icon.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/assets/icon128.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/assets/icon256.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/assets/icon32.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/assets/icon512.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/assets/icon64.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/assets/pickaxe.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/config_gui.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/gametext.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/gsm.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/locales/en_us.json +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/locales/ja_jp.json +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/locales/zh_cn.json +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/obs.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/ocr/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/ocr/gsm_ocr_config.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/ocr/ocrconfig.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/ocr/owocr_area_selector.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/ocr/owocr_helper.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/ocr/ss_picker.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/owocr/owocr/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/owocr/owocr/__main__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/owocr/owocr/config.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/owocr/owocr/lens_betterproto.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/owocr/owocr/ocr.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/owocr/owocr/run.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/tools/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/tools/audio_offset_selector.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/tools/furigana_filter_preview.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/tools/ss_selector.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/tools/window_transparency.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/communication/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/communication/send.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/communication/websocket.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/configuration.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/db.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/downloader/Untitled_json.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/downloader/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/downloader/oneocr_dl.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/electron_config.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/ffmpeg.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/get_overlay_coords.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/gsm_utils.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/model.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/notification.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/text_log.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/win10toast/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/util/win10toast/__main__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/vad.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/database_api.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/events.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/service.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/__init__.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/apple-touch-icon.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/css/kanji-grid.css +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/css/search.css +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/css/stats.css +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/favicon-96x96.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/favicon.ico +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/favicon.svg +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/js/anki_stats.js +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/js/database.js +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/js/kanji-grid.js +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/js/search.js +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/js/shared.js +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/js/stats.js +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/site.webmanifest +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/style.css +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/web-app-manifest-192x192.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/static/web-app-manifest-512x512.png +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/stats.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/templates/anki_stats.html +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/templates/components/navigation.html +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/templates/components/theme-styles.html +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/templates/utility.html +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/texthooking_page.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/web/websockets.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner/wip/__init___.py +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner.egg-info/SOURCES.txt +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner.egg-info/dependency_links.txt +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner.egg-info/entry_points.txt +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner.egg-info/requires.txt +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/GameSentenceMiner.egg-info/top_level.txt +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/LICENSE +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/README.md +0 -0
- {gamesentenceminer-2.16.0 → gamesentenceminer-2.16.1}/setup.cfg +0 -0
@@ -10,9 +10,37 @@ from GameSentenceMiner.util.downloader.Untitled_json import scenes
|
|
10
10
|
from GameSentenceMiner.util.configuration import get_app_directory, logger
|
11
11
|
from GameSentenceMiner.util.ffmpeg import get_ffmpeg_path, get_ffprobe_path
|
12
12
|
from GameSentenceMiner.obs import get_obs_path
|
13
|
+
import tempfile
|
13
14
|
|
14
15
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
15
16
|
|
17
|
+
def cleanup_temp_files(func):
|
18
|
+
def wrapper(*args, **kwargs):
|
19
|
+
temp_files = []
|
20
|
+
|
21
|
+
# Patch tempfile.NamedTemporaryFile to track created temp files
|
22
|
+
orig_named_tempfile = tempfile.NamedTemporaryFile
|
23
|
+
def tracked_named_tempfile(*a, **kw):
|
24
|
+
tmp = orig_named_tempfile(*a, **kw)
|
25
|
+
temp_files.append(tmp.name)
|
26
|
+
return tmp
|
27
|
+
tempfile.NamedTemporaryFile = tracked_named_tempfile
|
28
|
+
|
29
|
+
try:
|
30
|
+
result = func(*args, **kwargs)
|
31
|
+
finally:
|
32
|
+
# Restore original NamedTemporaryFile
|
33
|
+
tempfile.NamedTemporaryFile = orig_named_tempfile
|
34
|
+
# Remove tracked temp files
|
35
|
+
for f in temp_files:
|
36
|
+
try:
|
37
|
+
if os.path.exists(f):
|
38
|
+
os.remove(f)
|
39
|
+
except Exception:
|
40
|
+
pass
|
41
|
+
return result
|
42
|
+
return wrapper
|
43
|
+
|
16
44
|
def copy_obs_settings(src, dest):
|
17
45
|
|
18
46
|
if os.path.exists(src):
|
@@ -111,6 +139,9 @@ def download_obs_if_needed():
|
|
111
139
|
with open(os.path.join(scene_json_path, 'Untitled.json'), 'w') as scene_file:
|
112
140
|
scene_file.write(scenes)
|
113
141
|
logger.info(f"OBS extracted to {obs_path}.")
|
142
|
+
|
143
|
+
# remove zip
|
144
|
+
os.unlink(obs_installer)
|
114
145
|
else:
|
115
146
|
logger.error(f"Please install OBS manually from {obs_installer}")
|
116
147
|
|
@@ -118,9 +149,14 @@ def download_ffmpeg_if_needed():
|
|
118
149
|
ffmpeg_dir = os.path.join(get_app_directory(), 'ffmpeg')
|
119
150
|
ffmpeg_exe_path = get_ffmpeg_path()
|
120
151
|
ffprobe_exe_path = get_ffprobe_path()
|
121
|
-
|
152
|
+
python_dir = os.path.join(get_app_directory(), 'python')
|
153
|
+
ffmpeg_in_python = os.path.join(python_dir, "ffmpeg.exe")
|
154
|
+
|
122
155
|
if os.path.exists(ffmpeg_dir) and os.path.exists(ffmpeg_exe_path) and os.path.exists(ffprobe_exe_path):
|
123
156
|
logger.debug(f"FFmpeg already installed at {ffmpeg_dir}.")
|
157
|
+
if not os.path.exists(ffmpeg_in_python):
|
158
|
+
shutil.copy2(ffmpeg_exe_path, ffmpeg_in_python)
|
159
|
+
logger.info(f"Copied ffmpeg.exe to Python folder: {ffmpeg_in_python}")
|
124
160
|
return
|
125
161
|
|
126
162
|
if os.path.exists(ffmpeg_dir) and (not os.path.exists(ffmpeg_exe_path) or not os.path.exists(ffprobe_exe_path)):
|
@@ -155,6 +191,13 @@ def download_ffmpeg_if_needed():
|
|
155
191
|
target = open(os.path.join(ffmpeg_dir, filename), "wb")
|
156
192
|
with source, target:
|
157
193
|
shutil.copyfileobj(source, target)
|
194
|
+
|
195
|
+
# Copy ffmpeg.exe to the python folder
|
196
|
+
if os.path.exists(ffmpeg_exe_path):
|
197
|
+
shutil.copy2(ffmpeg_exe_path, ffmpeg_in_python)
|
198
|
+
logger.info(f"Copied ffmpeg.exe to Python folder: {ffmpeg_in_python}")
|
199
|
+
else:
|
200
|
+
logger.warning(f"ffmpeg.exe not found in {ffmpeg_dir}.")
|
158
201
|
logger.info(f"FFmpeg extracted to {ffmpeg_dir}.")
|
159
202
|
|
160
203
|
def download_ocenaudio_if_needed():
|