GameSentenceMiner 2.9.29__py3-none-any.whl → 2.10.1__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.
- GameSentenceMiner/anki.py +16 -14
- GameSentenceMiner/config_gui.py +826 -628
- GameSentenceMiner/gametext.py +5 -2
- GameSentenceMiner/gsm.py +19 -12
- GameSentenceMiner/ocr/gsm_ocr_config.py +16 -0
- GameSentenceMiner/ocr/owocr_area_selector.py +2 -0
- GameSentenceMiner/ocr/owocr_helper.py +18 -33
- GameSentenceMiner/ocr/ss_picker.py +17 -1
- GameSentenceMiner/util/audio_offset_selector.py +205 -0
- GameSentenceMiner/util/configuration.py +45 -16
- GameSentenceMiner/util/ffmpeg.py +23 -95
- GameSentenceMiner/util/gsm_utils.py +64 -5
- GameSentenceMiner/util/text_log.py +2 -2
- GameSentenceMiner/vad.py +3 -14
- GameSentenceMiner/web/service.py +10 -7
- GameSentenceMiner/web/texthooking_page.py +2 -2
- {gamesentenceminer-2.9.29.dist-info → gamesentenceminer-2.10.1.dist-info}/METADATA +4 -2
- {gamesentenceminer-2.9.29.dist-info → gamesentenceminer-2.10.1.dist-info}/RECORD +22 -21
- {gamesentenceminer-2.9.29.dist-info → gamesentenceminer-2.10.1.dist-info}/WHEEL +0 -0
- {gamesentenceminer-2.9.29.dist-info → gamesentenceminer-2.10.1.dist-info}/entry_points.txt +0 -0
- {gamesentenceminer-2.9.29.dist-info → gamesentenceminer-2.10.1.dist-info}/licenses/LICENSE +0 -0
- {gamesentenceminer-2.9.29.dist-info → gamesentenceminer-2.10.1.dist-info}/top_level.txt +0 -0
GameSentenceMiner/anki.py
CHANGED
@@ -86,10 +86,6 @@ def update_anki_card(last_note: AnkiCard, note=None, audio_path='', video_path='
|
|
86
86
|
if prev_screenshot_in_anki and get_config().anki.previous_image_field != get_config().anki.picture_field:
|
87
87
|
note['fields'][get_config().anki.previous_image_field] = prev_screenshot_html
|
88
88
|
|
89
|
-
if get_config().anki.anki_custom_fields:
|
90
|
-
for key, value in get_config().anki.anki_custom_fields.items():
|
91
|
-
note['fields'][key] = str(value)
|
92
|
-
|
93
89
|
|
94
90
|
tags = []
|
95
91
|
if get_config().anki.custom_tags:
|
@@ -100,6 +96,8 @@ def update_anki_card(last_note: AnkiCard, note=None, audio_path='', video_path='
|
|
100
96
|
tag_string = " ".join(tags)
|
101
97
|
invoke("addTags", tags=tag_string, notes=[last_note.noteId])
|
102
98
|
|
99
|
+
|
100
|
+
logger.info(f"Adding {game_line.id} to Anki Results Dict...")
|
103
101
|
if not reuse_audio:
|
104
102
|
anki_results[game_line.id] = AnkiUpdateResult(
|
105
103
|
success=True,
|
@@ -263,11 +261,13 @@ def get_cards_by_sentence(sentence):
|
|
263
261
|
logger.warning(f'Found more than 1, and not updating cards for query: \n{query}')
|
264
262
|
return {}
|
265
263
|
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
264
|
+
card_dict = invoke('notesInfo', notes=[card_ids[-1]])[0]
|
265
|
+
try:
|
266
|
+
return AnkiCard.from_dict(card_dict)
|
267
|
+
except Exception as e:
|
268
|
+
logger.error(f"Error fetching last card: {e}")
|
269
|
+
logger.info(card_dict)
|
270
|
+
raise e
|
271
271
|
|
272
272
|
last_connection_error = datetime.now()
|
273
273
|
|
@@ -298,18 +298,20 @@ def update_new_card():
|
|
298
298
|
if not last_card or not check_tags_for_should_update(last_card):
|
299
299
|
return
|
300
300
|
gsm_status.add_word_being_processed(last_card.get_field(get_config().anki.word_field))
|
301
|
-
use_prev_audio = sentence_is_same_as_previous(last_card)
|
302
301
|
logger.debug(f"last mined line: {gsm_state.last_mined_line}, current sentence: {get_sentence(last_card)}")
|
302
|
+
lines = texthooking_page.get_selected_lines()
|
303
|
+
game_line = get_mined_line(last_card, lines)
|
304
|
+
use_prev_audio = sentence_is_same_as_previous(last_card, lines) or game_line.id in anki_results
|
303
305
|
logger.info(f"New card using previous audio: {use_prev_audio}")
|
304
306
|
if get_config().obs.get_game_from_scene:
|
305
307
|
obs.update_current_game()
|
306
308
|
if use_prev_audio:
|
307
|
-
lines = texthooking_page.get_selected_lines()
|
308
309
|
run_new_thread(lambda: update_card_from_same_sentence(last_card, lines=lines, game_line=get_mined_line(last_card, lines)))
|
309
310
|
texthooking_page.reset_checked_lines()
|
310
311
|
else:
|
311
312
|
logger.info("New card(s) detected! Added to Processing Queue!")
|
312
|
-
card_queue.append((last_card, datetime.now()))
|
313
|
+
card_queue.append((last_card, datetime.now(), lines))
|
314
|
+
texthooking_page.reset_checked_lines()
|
313
315
|
try:
|
314
316
|
obs.save_replay_buffer()
|
315
317
|
except Exception as e:
|
@@ -329,10 +331,10 @@ def update_card_from_same_sentence(last_card, lines, game_line):
|
|
329
331
|
notification.send_error_no_anki_update()
|
330
332
|
|
331
333
|
|
332
|
-
def sentence_is_same_as_previous(last_card):
|
334
|
+
def sentence_is_same_as_previous(last_card, lines=None):
|
333
335
|
if not gsm_state.last_mined_line:
|
334
336
|
return False
|
335
|
-
return gsm_state.last_mined_line.id == get_mined_line(last_card).id
|
337
|
+
return gsm_state.last_mined_line.id == get_mined_line(last_card, lines).id
|
336
338
|
|
337
339
|
def get_sentence(card):
|
338
340
|
return card.get_field(get_config().anki.sentence_field)
|