GameSentenceMiner 2.19.1__tar.gz → 2.19.3__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.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/anki.py +3 -3
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/gametext.py +1 -1
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/gsm.py +3 -3
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/locales/en_us.json +10 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/locales/ja_jp.json +10 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/locales/zh_cn.json +10 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ui/config_gui.py +50 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/configuration.py +2 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/get_overlay_coords.py +54 -46
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/text_log.py +6 -4
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/texthooking_page.py +17 -2
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/PKG-INFO +1 -1
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/PKG-INFO +1 -1
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/pyproject.toml +1 -1
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ai/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ai/ai_prompting.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/assets/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/assets/icon.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/assets/icon128.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/assets/icon256.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/assets/icon32.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/assets/icon512.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/assets/icon64.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/assets/pickaxe.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/obs.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ocr/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ocr/gsm_ocr_config.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ocr/ocrconfig.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ocr/owocr_area_selector.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ocr/owocr_helper.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ocr/ss_picker.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/__main__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/config.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/lens_betterproto.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/ocr.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/run.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/tools/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/tools/audio_offset_selector.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/tools/furigana_filter_preview.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/tools/ss_selector.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/tools/window_transparency.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ui/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ui/anki_confirmation.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ui/furigana_filter_preview.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ui/screenshot_selector.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/audio_player.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/communication/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/communication/send.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/communication/websocket.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/db.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/downloader/Untitled_json.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/downloader/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/downloader/download_tools.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/downloader/oneocr_dl.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/electron_config.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/ffmpeg.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/games_table.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/gsm_utils.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/model.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/notification.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/win10toast/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/win10toast/__main__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/vad.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/anki_api_endpoints.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/database_api.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/events.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/gsm_websocket.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/service.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/__init__.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/apple-touch-icon.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/dashboard-shared.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/kanji-grid.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/loading-skeleton.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/overview.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/popups-shared.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/search.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/shared.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/stats.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/favicon-96x96.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/favicon.ico +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/favicon.svg +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/anki_stats.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/database.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/goals.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/heatmap.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/kanji-grid.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/overview.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/search.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/shared.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/stats.js +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/site.webmanifest +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/style.css +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/web-app-manifest-192x192.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/web-app-manifest-512x512.png +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/stats.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/anki_stats.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/date-range.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/html-head.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/js-config.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/basic_kanji_book_bkb_v1_v2.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/duolingo_kanji.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/grade.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/hk_primary_learning.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/hkscs2016.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/hsk_levels.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/humanum_frequency_list.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/jis_levels.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/jlpt_level.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/jpdb_kanji_frequency_list.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/jpdbv2_kanji_frequency_list.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/jun_das_modern_chinese_character_frequency_list.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/kanji_in_context_revised_edition.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/kanji_kentei_level.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/mainland_china_elementary_textbook_characters.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/moe_way_quiz.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/official_kanji.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/remembering_the_kanji.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/standard_form_of_national_characters.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/table_of_general_standard_chinese_characters.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/the_kodansha_kanji_learners_course_klc.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/thousand_character_classic.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/wanikani_levels.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/kanji_grid/words_hk_frequency_list.json +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/navigation.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/popups.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/settings-modal.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/components/theme-styles.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/database.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/goals.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/index.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/overview.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/search.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/stats.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/utility.html +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/wip/__init___.py +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/SOURCES.txt +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/dependency_links.txt +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/entry_points.txt +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/requires.txt +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/top_level.txt +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/LICENSE +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/README.md +0 -0
- {gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/setup.cfg +0 -0
|
@@ -559,10 +559,10 @@ def update_new_card():
|
|
|
559
559
|
else:
|
|
560
560
|
logger.info("New card(s) detected! Added to Processing Queue!")
|
|
561
561
|
gsm_state.last_mined_line = game_line
|
|
562
|
-
queue_card_for_processing(last_card, lines)
|
|
562
|
+
queue_card_for_processing(last_card, lines, game_line)
|
|
563
563
|
|
|
564
|
-
def queue_card_for_processing(last_card, lines):
|
|
565
|
-
card_queue.append((last_card, datetime.now(), lines))
|
|
564
|
+
def queue_card_for_processing(last_card, lines, last_mined_line):
|
|
565
|
+
card_queue.append((last_card, datetime.now(), lines, last_mined_line))
|
|
566
566
|
texthooking_page.reset_checked_lines()
|
|
567
567
|
try:
|
|
568
568
|
obs.save_replay_buffer()
|
|
@@ -260,7 +260,7 @@ async def add_line_to_text_log(line, line_time=None):
|
|
|
260
260
|
await add_event_to_texthooker(get_text_log()[-1])
|
|
261
261
|
if get_config().overlay.websocket_port and overlay_server_thread.has_clients():
|
|
262
262
|
if get_overlay_processor().ready:
|
|
263
|
-
|
|
263
|
+
asyncio.create_task(get_overlay_processor().find_box_and_send_to_overlay(current_line_after_regex))
|
|
264
264
|
add_srt_line(line_time, new_line)
|
|
265
265
|
if 'nostatspls' not in new_line.scene.lower():
|
|
266
266
|
GameLinesTable.add_line(new_line)
|
|
@@ -187,7 +187,7 @@ class VideoToAudioHandler(FileSystemEventHandler):
|
|
|
187
187
|
return
|
|
188
188
|
try:
|
|
189
189
|
if anki.card_queue and len(anki.card_queue) > 0:
|
|
190
|
-
last_note, anki_card_creation_time, selected_lines = anki.card_queue.pop(
|
|
190
|
+
last_note, anki_card_creation_time, selected_lines, mined_line = anki.card_queue.pop(
|
|
191
191
|
0)
|
|
192
192
|
else:
|
|
193
193
|
logger.info(
|
|
@@ -211,11 +211,11 @@ class VideoToAudioHandler(FileSystemEventHandler):
|
|
|
211
211
|
full_text = ''
|
|
212
212
|
if selected_lines:
|
|
213
213
|
start_line = selected_lines[0]
|
|
214
|
-
mined_line = get_mined_line(last_note, selected_lines)
|
|
214
|
+
# mined_line = get_mined_line(last_note, selected_lines)
|
|
215
215
|
line_cutoff = selected_lines[-1].get_next_time()
|
|
216
216
|
full_text = remove_html_and_cloze_tags(note['fields'][get_config().anki.sentence_field])
|
|
217
217
|
else:
|
|
218
|
-
mined_line = get_text_event(last_note)
|
|
218
|
+
# mined_line = get_text_event(last_note)
|
|
219
219
|
if mined_line:
|
|
220
220
|
start_line = mined_line
|
|
221
221
|
if mined_line.next:
|
|
@@ -597,6 +597,16 @@
|
|
|
597
597
|
"label": "Capture Interval (Seconds):",
|
|
598
598
|
"tooltip": "Interval in seconds for periodic screen capture."
|
|
599
599
|
}
|
|
600
|
+
,
|
|
601
|
+
"periodic_ratio": {
|
|
602
|
+
"label": "Periodic Match Ratio:",
|
|
603
|
+
"tooltip": "Ratio (0-1) used during periodic scanning to determine how much of the region must match to count as detected. Higher = Less Strict, more Scanning."
|
|
604
|
+
}
|
|
605
|
+
,
|
|
606
|
+
"number_of_local_scans_per_event": {
|
|
607
|
+
"label": "Local Scans Per Text Event:",
|
|
608
|
+
"tooltip": "How many local scans to perform per text event (agent, textractor, etc.) before stopping or sending results to the OCR engine. .1s delay between scans for now."
|
|
609
|
+
}
|
|
600
610
|
},
|
|
601
611
|
"wip": {
|
|
602
612
|
"title": "WIP",
|
|
@@ -596,6 +596,16 @@
|
|
|
596
596
|
"label": "キャプチャ間隔(秒):",
|
|
597
597
|
"tooltip": "定期的な画面キャプチャの間隔(秒単位)。"
|
|
598
598
|
}
|
|
599
|
+
,
|
|
600
|
+
"periodic_ratio": {
|
|
601
|
+
"label": "定期一致比率:",
|
|
602
|
+
"tooltip": "定期スキャン中に使用される比率 (0-1)。領域がどれだけ一致すれば検出と見なすかを決定します。"
|
|
603
|
+
}
|
|
604
|
+
,
|
|
605
|
+
"number_of_local_scans_per_event": {
|
|
606
|
+
"label": "イベントごとのローカルスキャン数:",
|
|
607
|
+
"tooltip": "停止するかOCRエンジンに送信する前に、イベントごとに実行するローカルスキャンの回数。"
|
|
608
|
+
}
|
|
599
609
|
},
|
|
600
610
|
"wip": {
|
|
601
611
|
"title": "WIP",
|
|
@@ -585,6 +585,16 @@
|
|
|
585
585
|
"label": "捕获间隔(秒):",
|
|
586
586
|
"tooltip": "定期屏幕捕获的时间间隔(秒)。"
|
|
587
587
|
}
|
|
588
|
+
,
|
|
589
|
+
"periodic_ratio": {
|
|
590
|
+
"label": "定期匹配比率:",
|
|
591
|
+
"tooltip": "在定期扫描期间使用的比率(0-1),用于确定区域匹配多少才算检测到。"
|
|
592
|
+
}
|
|
593
|
+
,
|
|
594
|
+
"number_of_local_scans_per_event": {
|
|
595
|
+
"label": "每次事件本地扫描数:",
|
|
596
|
+
"tooltip": "在停止或将结果发送到OCR引擎之前,每个事件执行的本地扫描次数。"
|
|
597
|
+
}
|
|
588
598
|
},
|
|
589
599
|
"wip": {
|
|
590
600
|
"title": "WIP",
|
|
@@ -512,9 +512,11 @@ class ConfigApp:
|
|
|
512
512
|
self.overlay_websocket_send_value = tk.BooleanVar(value=self.settings.overlay.monitor_to_capture)
|
|
513
513
|
self.overlay_engine_value = tk.StringVar(value=self.settings.overlay.engine)
|
|
514
514
|
self.periodic_value = tk.BooleanVar(value=self.settings.overlay.periodic)
|
|
515
|
+
self.periodic_ratio_value = tk.StringVar(value=str(self.settings.overlay.periodic_ratio))
|
|
515
516
|
self.periodic_interval_value = tk.StringVar(value=str(self.settings.overlay.periodic_interval))
|
|
516
517
|
self.scan_delay_value = tk.StringVar(value=str(self.settings.overlay.scan_delay))
|
|
517
518
|
self.overlay_minimum_character_size_value = tk.StringVar(value=str(self.settings.overlay.minimum_character_size))
|
|
519
|
+
self.number_of_local_scans_per_event_value = tk.StringVar(value=str(getattr(self.settings.overlay, 'number_of_local_scans_per_event', 1)))
|
|
518
520
|
|
|
519
521
|
# Master Config Settings
|
|
520
522
|
self.switch_to_default_if_not_found_value = tk.BooleanVar(value=self.master_config.switch_to_default_if_not_found)
|
|
@@ -616,6 +618,28 @@ class ConfigApp:
|
|
|
616
618
|
self.sync_changes_checkbutton.state(['!selected'])
|
|
617
619
|
|
|
618
620
|
# Create a new Config instance
|
|
621
|
+
# Validate and clamp periodic_ratio to [0.0, 1.0]
|
|
622
|
+
try:
|
|
623
|
+
_periodic_ratio = float(self.periodic_ratio_value.get())
|
|
624
|
+
except Exception:
|
|
625
|
+
_periodic_ratio = 0.9
|
|
626
|
+
# clamp
|
|
627
|
+
if _periodic_ratio < 0.0:
|
|
628
|
+
_periodic_ratio = 0.0
|
|
629
|
+
if _periodic_ratio > 1.0:
|
|
630
|
+
_periodic_ratio = 1.0
|
|
631
|
+
# reflect back to UI variable (keep consistent formatting)
|
|
632
|
+
self.periodic_ratio_value.set(str(_periodic_ratio))
|
|
633
|
+
|
|
634
|
+
# Validate and clamp number_of_local_scans_per_event to positive integer
|
|
635
|
+
try:
|
|
636
|
+
_local_scans = int(float(self.number_of_local_scans_per_event_value.get()))
|
|
637
|
+
except Exception:
|
|
638
|
+
_local_scans = int(getattr(self.settings.overlay, 'number_of_local_scans_per_event', 1))
|
|
639
|
+
if _local_scans < 1:
|
|
640
|
+
_local_scans = 1
|
|
641
|
+
self.number_of_local_scans_per_event_value.set(str(_local_scans))
|
|
642
|
+
|
|
619
643
|
config = ProfileConfig(
|
|
620
644
|
scenes=self.settings.scenes,
|
|
621
645
|
general=General(
|
|
@@ -754,7 +778,9 @@ class ConfigApp:
|
|
|
754
778
|
engine=OverlayEngine(self.overlay_engine_value.get()).value if self.overlay_engine_value.get() else OverlayEngine.LENS.value,
|
|
755
779
|
scan_delay=float(self.scan_delay_value.get()),
|
|
756
780
|
periodic=float(self.periodic_value.get()),
|
|
781
|
+
periodic_ratio=_periodic_ratio,
|
|
757
782
|
periodic_interval=float(self.periodic_interval_value.get()),
|
|
783
|
+
number_of_local_scans_per_event=int(self.number_of_local_scans_per_event_value.get()),
|
|
758
784
|
minimum_character_size=int(self.overlay_minimum_character_size_value.get()),
|
|
759
785
|
)
|
|
760
786
|
# wip=WIP(
|
|
@@ -819,6 +845,14 @@ class ConfigApp:
|
|
|
819
845
|
|
|
820
846
|
title_template = self.i18n.get('app', {}).get('title_with_profile', 'GameSentenceMiner Configuration - {profile_name}')
|
|
821
847
|
self.window.title(title_template.format(profile_name=current_config.name))
|
|
848
|
+
|
|
849
|
+
try:
|
|
850
|
+
import mss as mss
|
|
851
|
+
self.monitors = [f"Monitor {i}: width: {monitor['width']}, height: {monitor['height']}" for i, monitor in enumerate(mss.mss().monitors[1:], start=1)]
|
|
852
|
+
if len(self.monitors) == 0:
|
|
853
|
+
self.monitors = [1]
|
|
854
|
+
except ImportError:
|
|
855
|
+
self.monitors = []
|
|
822
856
|
|
|
823
857
|
if current_config.name != self.settings.name or self.settings.config_changed(current_config) or force_refresh:
|
|
824
858
|
logger.info("Config changed, reloading settings.")
|
|
@@ -2434,6 +2468,22 @@ class ConfigApp:
|
|
|
2434
2468
|
ttk.Entry(overlay_frame, textvariable=self.periodic_interval_value).grid(row=self.current_row, column=1, sticky='EW', pady=2)
|
|
2435
2469
|
self.current_row += 1
|
|
2436
2470
|
|
|
2471
|
+
# Periodic Ratio (how much of the screen must match to count)
|
|
2472
|
+
periodic_ratio_i18n = overlay_i18n.get('periodic_ratio', {})
|
|
2473
|
+
HoverInfoLabelWidget(overlay_frame, text=periodic_ratio_i18n.get('label', 'Periodic Ratio:'),
|
|
2474
|
+
tooltip=periodic_ratio_i18n.get('tooltip', 'Ratio (0-1) used during periodic scanning to determine matching threshold.'),
|
|
2475
|
+
row=self.current_row, column=0)
|
|
2476
|
+
ttk.Entry(overlay_frame, textvariable=self.periodic_ratio_value).grid(row=self.current_row, column=1, sticky='EW', pady=2)
|
|
2477
|
+
self.current_row += 1
|
|
2478
|
+
|
|
2479
|
+
# Number of Local Scans Per Event
|
|
2480
|
+
local_scans_i18n = overlay_i18n.get('number_of_local_scans_per_event', {})
|
|
2481
|
+
HoverInfoLabelWidget(overlay_frame, text=local_scans_i18n.get('label', 'Local Scans Per Event:'),
|
|
2482
|
+
tooltip=local_scans_i18n.get('tooltip', 'How many local scans to perform per event before stopping or sending to lens.'),
|
|
2483
|
+
row=self.current_row, column=0)
|
|
2484
|
+
ttk.Entry(overlay_frame, textvariable=self.number_of_local_scans_per_event_value).grid(row=self.current_row, column=1, sticky='EW', pady=2)
|
|
2485
|
+
self.current_row += 1
|
|
2486
|
+
|
|
2437
2487
|
# Minimum Character Size
|
|
2438
2488
|
minimum_character_size_i18n = overlay_i18n.get('minimum_character_size', {})
|
|
2439
2489
|
HoverInfoLabelWidget(overlay_frame, text=minimum_character_size_i18n.get('label', 'Minimum Character Size:'),
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/configuration.py
RENAMED
|
@@ -675,8 +675,10 @@ class Overlay:
|
|
|
675
675
|
monitor_to_capture: int = 0
|
|
676
676
|
periodic: bool = False
|
|
677
677
|
periodic_interval: float = 1.0
|
|
678
|
+
periodic_ratio: float = 0.9
|
|
678
679
|
scan_delay: float = 0.25
|
|
679
680
|
minimum_character_size: int = 0
|
|
681
|
+
number_of_local_scans_per_event: int = 1
|
|
680
682
|
|
|
681
683
|
def __post_init__(self):
|
|
682
684
|
if self.monitor_to_capture == -1:
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/get_overlay_coords.py
RENAMED
|
@@ -330,56 +330,64 @@ class OverlayProcessor:
|
|
|
330
330
|
# Check for cancellation after screenshot
|
|
331
331
|
if asyncio.current_task().cancelled():
|
|
332
332
|
raise asyncio.CancelledError()
|
|
333
|
-
|
|
333
|
+
|
|
334
334
|
if self.oneocr:
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
335
|
+
tries = get_overlay_config().number_of_local_scans_per_event if not check_against_last else 1
|
|
336
|
+
for i in range(tries):
|
|
337
|
+
if i > 0:
|
|
338
|
+
try:
|
|
339
|
+
await asyncio.sleep(0.1)
|
|
340
|
+
except asyncio.CancelledError:
|
|
341
|
+
logger.info("OCR task cancelled during local scan delay")
|
|
342
|
+
raise
|
|
343
|
+
# 2. Use OneOCR to find general text areas (fast)
|
|
344
|
+
res, text, oneocr_results, crop_coords_list = self.oneocr(
|
|
345
|
+
full_screenshot,
|
|
346
|
+
return_coords=True,
|
|
347
|
+
multiple_crop_coords=True,
|
|
348
|
+
return_one_box=False,
|
|
349
|
+
furigana_filter_sensitivity=get_overlay_config().minimum_character_size,
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
if not crop_coords_list:
|
|
353
|
+
return
|
|
354
|
+
|
|
355
|
+
# Check for cancellation after OneOCR
|
|
356
|
+
if asyncio.current_task().cancelled():
|
|
357
|
+
raise asyncio.CancelledError()
|
|
355
358
|
|
|
356
|
-
|
|
357
|
-
|
|
359
|
+
text_str = "".join([text for text in text if self.regex.match(text)])
|
|
360
|
+
|
|
361
|
+
# RapidFuzz fuzzy match 90% to not send the same results repeatedly
|
|
362
|
+
if self.last_oneocr_result and check_against_last:
|
|
363
|
+
|
|
364
|
+
score = fuzz.ratio(text_str, self.last_oneocr_result)
|
|
365
|
+
if score >= get_config().overlay.periodic_ratio * 100:
|
|
366
|
+
return
|
|
367
|
+
self.last_oneocr_result = text_str
|
|
368
|
+
|
|
369
|
+
await send_word_coordinates_to_overlay(self._convert_oneocr_results_to_percentages(oneocr_results, monitor_width, monitor_height))
|
|
370
|
+
|
|
371
|
+
# If User Home is beangate
|
|
372
|
+
if is_beangate:
|
|
373
|
+
with open("oneocr_results.json", "w", encoding="utf-8") as f:
|
|
374
|
+
f.write(json.dumps(oneocr_results, ensure_ascii=False, indent=2))
|
|
375
|
+
|
|
376
|
+
if get_config().overlay.engine == OverlayEngine.ONEOCR.value and self.oneocr:
|
|
377
|
+
logger.info("Sent %d text boxes to overlay.", len(oneocr_results))
|
|
358
378
|
return
|
|
359
|
-
self.last_oneocr_result = text_str
|
|
360
379
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
if is_beangate:
|
|
365
|
-
with open("oneocr_results.json", "w", encoding="utf-8") as f:
|
|
366
|
-
f.write(json.dumps(oneocr_results, ensure_ascii=False, indent=2))
|
|
367
|
-
|
|
368
|
-
if get_config().overlay.engine == OverlayEngine.ONEOCR.value and self.oneocr:
|
|
369
|
-
logger.info("Sent %d text boxes to overlay.", len(oneocr_results))
|
|
370
|
-
return
|
|
380
|
+
# Check for cancellation before creating composite image
|
|
381
|
+
if asyncio.current_task().cancelled():
|
|
382
|
+
raise asyncio.CancelledError()
|
|
371
383
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
crop_coords_list,
|
|
380
|
-
monitor_width,
|
|
381
|
-
monitor_height
|
|
382
|
-
)
|
|
384
|
+
# 3. Create a composite image with only the detected text regions
|
|
385
|
+
composite_image = self._create_composite_image(
|
|
386
|
+
full_screenshot,
|
|
387
|
+
crop_coords_list,
|
|
388
|
+
monitor_width,
|
|
389
|
+
monitor_height
|
|
390
|
+
)
|
|
383
391
|
else:
|
|
384
392
|
composite_image = full_screenshot
|
|
385
393
|
|
|
@@ -408,7 +416,7 @@ class OverlayProcessor:
|
|
|
408
416
|
# RapidFuzz fuzzy match 90% to not send the same results repeatedly
|
|
409
417
|
if self.last_lens_result and check_against_last:
|
|
410
418
|
score = fuzz.ratio(text_str, self.last_lens_result)
|
|
411
|
-
if score >=
|
|
419
|
+
if score >= get_config().overlay.periodic_ratio * 100:
|
|
412
420
|
logger.info("Google Lens results are similar to the last results (score: %d). Skipping overlay update.", score)
|
|
413
421
|
return
|
|
414
422
|
self.last_lens_result = text_str
|
|
@@ -146,25 +146,27 @@ def get_matching_line(last_note: AnkiCard, lines=None) -> GameLine:
|
|
|
146
146
|
|
|
147
147
|
if not lines:
|
|
148
148
|
raise Exception("No voicelines in GSM. GSM can only do work on text that has been sent to it since it started. If you are not getting any text into GSM, please check your setup/config.")
|
|
149
|
+
|
|
150
|
+
last_line = lines[-1] # Store reference to the latest line
|
|
149
151
|
|
|
150
152
|
if not last_note:
|
|
151
|
-
return
|
|
153
|
+
return last_line
|
|
152
154
|
|
|
153
155
|
sentence = last_note.get_field(get_config().anki.sentence_field)
|
|
154
156
|
if not sentence:
|
|
155
|
-
return
|
|
157
|
+
return last_line
|
|
156
158
|
|
|
157
159
|
logger.info(f"Replay buffer length: {gsm_state.replay_buffer_length}")
|
|
158
160
|
time_window = datetime.now() - timedelta(seconds=gsm_state.replay_buffer_length) - timedelta(seconds=5)
|
|
159
161
|
for line in reversed(lines):
|
|
160
162
|
if line.time < time_window:
|
|
161
163
|
logger.info("Could not find matching sentence from GSM's history within the replay buffer time window. Using the latest line.")
|
|
162
|
-
return
|
|
164
|
+
return last_line
|
|
163
165
|
if lines_match(line.text, remove_html_and_cloze_tags(sentence)):
|
|
164
166
|
return line
|
|
165
167
|
|
|
166
168
|
logger.info("Could not find matching sentence from GSM's history. Using the latest line.")
|
|
167
|
-
return
|
|
169
|
+
return last_line
|
|
168
170
|
|
|
169
171
|
|
|
170
172
|
def get_text_event(last_note) -> GameLine:
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/texthooking_page.py
RENAMED
|
@@ -235,14 +235,29 @@ def translate_line():
|
|
|
235
235
|
if event_id is None:
|
|
236
236
|
return jsonify({'error': 'Missing id'}), 400
|
|
237
237
|
|
|
238
|
+
prompt = f"""
|
|
239
|
+
**Professional Game Localization Task**
|
|
240
|
+
|
|
241
|
+
**Task Directive:**
|
|
242
|
+
Translate ONLY the provided line of game dialogue specified below into natural-sounding, context-aware {get_config().general.get_native_language_name()}. The translation must preserve the original tone and intent of the source.
|
|
243
|
+
|
|
244
|
+
**Output Requirements:**
|
|
245
|
+
- Provide only the single, best {get_config().general.get_native_language_name()} translation.
|
|
246
|
+
- Use expletives if they are natural for the context and enhance the translation's impact, but do not over-exaggerate.
|
|
247
|
+
- Do not include notes, alternatives, explanations, or any other surrounding text. Absolutely nothing but the translated line.
|
|
248
|
+
|
|
249
|
+
**Line to Translate:**
|
|
250
|
+
"""
|
|
251
|
+
|
|
238
252
|
if not get_config().ai.is_configured():
|
|
239
253
|
return jsonify({'error': 'AI translation is not properly configured. Please check your settings in the "AI" Tab.'}), 400
|
|
240
254
|
line = get_line_by_id(event_id)
|
|
241
255
|
if line is None:
|
|
242
256
|
return jsonify({'error': 'Invalid id'}), 400
|
|
243
257
|
line_to_translate = text if text else line.text
|
|
244
|
-
translation = get_ai_prompt_result(
|
|
245
|
-
|
|
258
|
+
translation = get_ai_prompt_result(
|
|
259
|
+
get_all_lines(), line_to_translate, line, get_current_game(), custom_prompt=prompt
|
|
260
|
+
)
|
|
246
261
|
line.set_TL(translation)
|
|
247
262
|
return jsonify({'TL': translation}), 200
|
|
248
263
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GameSentenceMiner
|
|
3
|
-
Version: 2.19.
|
|
3
|
+
Version: 2.19.3
|
|
4
4
|
Summary: A tool for mining sentences from games. Update: Dependencies, replay buffer based line searching, and bug fixes.
|
|
5
5
|
Author-email: Beangate <bpwhelan95@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GameSentenceMiner
|
|
3
|
-
Version: 2.19.
|
|
3
|
+
Version: 2.19.3
|
|
4
4
|
Summary: A tool for mining sentences from games. Update: Dependencies, replay buffer based line searching, and bug fixes.
|
|
5
5
|
Author-email: Beangate <bpwhelan95@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "GameSentenceMiner"
|
|
10
|
-
version = "2.19.
|
|
10
|
+
version = "2.19.3"
|
|
11
11
|
description = "A tool for mining sentences from games. Update: Dependencies, replay buffer based line searching, and bug fixes."
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
requires-python = ">=3.10"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ocr/gsm_ocr_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ocr/owocr_area_selector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/__init__.py
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/__main__.py
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/owocr/owocr/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/tools/ss_selector.py
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/tools/window_transparency.py
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ui/anki_confirmation.py
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/ui/screenshot_selector.py
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/audio_player.py
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/communication/send.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/downloader/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/downloader/oneocr_dl.py
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/electron_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/notification.py
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/win10toast/__init__.py
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/util/win10toast/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/anki_api_endpoints.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/gsm_websocket.py
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/overview.css
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/search.css
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/shared.css
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/css/stats.css
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/favicon-96x96.png
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/favicon.ico
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/favicon.svg
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/anki_stats.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/database.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/goals.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/heatmap.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/kanji-grid.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/overview.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/search.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/shared.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/js/stats.js
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/site.webmanifest
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/static/style.css
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/database.html
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/goals.html
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/index.html
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/overview.html
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/search.html
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/stats.html
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner/web/templates/utility.html
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/requires.txt
RENAMED
|
File without changes
|
{gamesentenceminer-2.19.1 → gamesentenceminer-2.19.3}/GameSentenceMiner.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|