GameSentenceMiner 2.9.8__tar.gz → 2.9.10__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.
Files changed (72) hide show
  1. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/anki.py +2 -2
  2. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/config_gui.py +9 -2
  3. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/gsm.py +3 -2
  4. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/configuration.py +1 -0
  5. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/notification.py +4 -1
  6. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner.egg-info/PKG-INFO +1 -1
  7. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/PKG-INFO +1 -1
  8. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/pyproject.toml +1 -1
  9. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/__init__.py +0 -0
  10. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/ai/__init__.py +0 -0
  11. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/ai/ai_prompting.py +0 -0
  12. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/assets/__init__.py +0 -0
  13. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/assets/icon.png +0 -0
  14. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/assets/icon128.png +0 -0
  15. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/assets/icon256.png +0 -0
  16. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/assets/icon32.png +0 -0
  17. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/assets/icon512.png +0 -0
  18. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/assets/icon64.png +0 -0
  19. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/assets/pickaxe.png +0 -0
  20. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/gametext.py +0 -0
  21. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/obs.py +0 -0
  22. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/ocr/__init__.py +0 -0
  23. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/ocr/gsm_ocr_config.py +0 -0
  24. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/ocr/ocrconfig.py +0 -0
  25. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/ocr/owocr_area_selector.py +0 -0
  26. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/ocr/owocr_helper.py +0 -0
  27. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/owocr/owocr/__init__.py +0 -0
  28. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/owocr/owocr/__main__.py +0 -0
  29. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/owocr/owocr/config.py +0 -0
  30. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/owocr/owocr/lens_betterproto.py +0 -0
  31. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/owocr/owocr/ocr.py +0 -0
  32. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/owocr/owocr/run.py +0 -0
  33. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py +0 -0
  34. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/__init__.py +0 -0
  35. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/communication/__init__.py +0 -0
  36. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/communication/send.py +0 -0
  37. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/communication/websocket.py +0 -0
  38. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/downloader/Untitled_json.py +0 -0
  39. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/downloader/__init__.py +0 -0
  40. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/downloader/download_tools.py +0 -0
  41. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/downloader/oneocr_dl.py +0 -0
  42. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/electron_config.py +0 -0
  43. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/ffmpeg.py +0 -0
  44. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/gsm_utils.py +0 -0
  45. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/model.py +0 -0
  46. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/package.py +0 -0
  47. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/ss_selector.py +0 -0
  48. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/util/text_log.py +0 -0
  49. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/vad.py +0 -0
  50. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/__init__.py +0 -0
  51. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/__init__.py +0 -0
  52. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/apple-touch-icon.png +0 -0
  53. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/favicon-96x96.png +0 -0
  54. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/favicon.ico +0 -0
  55. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/favicon.svg +0 -0
  56. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/site.webmanifest +0 -0
  57. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/style.css +0 -0
  58. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/web-app-manifest-192x192.png +0 -0
  59. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/static/web-app-manifest-512x512.png +0 -0
  60. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/templates/__init__.py +0 -0
  61. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/templates/index.html +0 -0
  62. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/templates/text_replacements.html +0 -0
  63. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/templates/utility.html +0 -0
  64. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner/web/texthooking_page.py +0 -0
  65. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner.egg-info/SOURCES.txt +0 -0
  66. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner.egg-info/dependency_links.txt +0 -0
  67. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner.egg-info/entry_points.txt +0 -0
  68. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner.egg-info/requires.txt +0 -0
  69. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/GameSentenceMiner.egg-info/top_level.txt +0 -0
  70. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/LICENSE +0 -0
  71. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/README.md +0 -0
  72. {gamesentenceminer-2.9.8 → gamesentenceminer-2.9.10}/setup.cfg +0 -0
@@ -41,13 +41,13 @@ def update_anki_card(last_note: AnkiCard, note=None, audio_path='', video_path='
41
41
  audio_in_anki = store_media_file(audio_path)
42
42
  if update_picture:
43
43
  logger.info("Getting Screenshot...")
44
- screenshot = ffmpeg.get_screenshot(video_path, ss_time)
44
+ screenshot = ffmpeg.get_screenshot(video_path, ss_time, try_selector=get_config().screenshot.use_screenshot_selector)
45
45
  wait_for_stable_file(screenshot)
46
46
  screenshot_in_anki = store_media_file(screenshot)
47
47
  if get_config().paths.remove_screenshot:
48
48
  os.remove(screenshot)
49
49
  if get_config().anki.previous_image_field and game_line.prev:
50
- prev_screenshot = ffmpeg.get_screenshot_for_line(video_path, selected_lines[0].prev if selected_lines else game_line.prev)
50
+ prev_screenshot = ffmpeg.get_screenshot_for_line(video_path, selected_lines[0].prev if selected_lines else game_line.prev, try_selector=get_config().screenshot.use_screenshot_selector)
51
51
  wait_for_stable_file(prev_screenshot)
52
52
  prev_screenshot_in_anki = store_media_file(prev_screenshot)
53
53
  if get_config().paths.remove_screenshot:
@@ -184,10 +184,11 @@ class ConfigApp:
184
184
  extension=self.screenshot_extension.get(),
185
185
  custom_ffmpeg_settings=self.screenshot_custom_ffmpeg_settings.get(),
186
186
  screenshot_hotkey_updates_anki=self.screenshot_hotkey_update_anki.get(),
187
- seconds_after_line = self.seconds_after_line.get(),
187
+ seconds_after_line = float(self.seconds_after_line.get()) if self.seconds_after_line.get() else 0.0,
188
188
  # use_beginning_of_line_as_screenshot=self.use_beginning_of_line_as_screenshot.get(),
189
189
  # use_new_screenshot_logic=self.use_new_screenshot_logic.get(),
190
- screenshot_timing_setting=self.screenshot_timing.get()
190
+ screenshot_timing_setting=self.screenshot_timing.get(),
191
+ use_screenshot_selector=self.use_screenshot_selector.get(),
191
192
  ),
192
193
  audio=Audio(
193
194
  enabled=self.audio_enabled.get(),
@@ -847,6 +848,12 @@ class ConfigApp:
847
848
  self.add_label_and_increment_row(screenshot_frame, "Time in seconds to offset the screenshot based on the Timing setting above (should almost always be positive, can be negative if you use \"middle\")", row=self.current_row,
848
849
  column=2)
849
850
 
851
+ ttk.Label(screenshot_frame, text="Use Screenshot Selector for every card:").grid(row=self.current_row, column=0, sticky='W')
852
+ self.use_screenshot_selector = tk.BooleanVar(value=self.settings.screenshot.use_screenshot_selector)
853
+ ttk.Checkbutton(screenshot_frame, variable=self.use_screenshot_selector).grid(row=self.current_row, column=1, sticky='W')
854
+ self.add_label_and_increment_row(screenshot_frame, "Enable to use the screenshot selector to choose the screenshot point on every card.", row=self.current_row,
855
+ column=2)
856
+
850
857
  # ttk.Label(screenshot_frame, text="Use Beginning of Line as Screenshot:").grid(row=self.current_row, column=0, sticky='W')
851
858
  # self.use_beginning_of_line_as_screenshot = tk.BooleanVar(value=self.settings.screenshot.use_beginning_of_line_as_screenshot)
852
859
  # ttk.Checkbutton(screenshot_frame, variable=self.use_beginning_of_line_as_screenshot).grid(row=self.current_row, column=1, sticky='W')
@@ -321,8 +321,9 @@ def register_hotkeys():
321
321
 
322
322
  def get_screenshot():
323
323
  # try:
324
- gsm_state.line_for_screenshot = game_log.get_last_line()
325
- gsm_state.anki_note_for_screenshot = anki.get_last_anki_card()
324
+ last_note = anki.get_last_anki_card()
325
+ gsm_state.anki_note_for_screenshot = last_note
326
+ gsm_state.line_for_screenshot = get_mined_line(last_note, get_all_lines())
326
327
  obs.save_replay_buffer()
327
328
  # image = obs.get_screenshot()
328
329
  # wait_for_stable_file(image, timeout=3)
@@ -145,6 +145,7 @@ class Screenshot:
145
145
  use_beginning_of_line_as_screenshot: bool = True
146
146
  use_new_screenshot_logic: bool = False
147
147
  screenshot_timing_setting: str = '' # 'middle', 'end'
148
+ use_screenshot_selector: bool = False
148
149
 
149
150
  def __post_init__(self):
150
151
  if not self.screenshot_timing_setting and self.use_beginning_of_line_as_screenshot:
@@ -34,7 +34,10 @@ def open_browser_window(note_id, query=None):
34
34
  try:
35
35
  response = requests.post(url, json=data, headers=headers)
36
36
  if response.status_code == 200:
37
- logger.info(f"Opened Anki note with ID {note_id}")
37
+ if query:
38
+ logger.info(f"Opened Anki browser with query: {query}")
39
+ else:
40
+ logger.info(f"Opened Anki note in browser with ID {note_id}")
38
41
  else:
39
42
  logger.error(f"Failed to open Anki note with ID {note_id}")
40
43
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GameSentenceMiner
3
- Version: 2.9.8
3
+ Version: 2.9.10
4
4
  Summary: A tool for mining sentences from games.
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.9.8
3
+ Version: 2.9.10
4
4
  Summary: A tool for mining sentences from games.
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.9.8"
10
+ version = "2.9.10"
11
11
  description = "A tool for mining sentences from games."
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.10"