GameSentenceMiner 2.17.7__py3-none-any.whl → 2.18.0__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.
Files changed (51) hide show
  1. GameSentenceMiner/ai/ai_prompting.py +6 -6
  2. GameSentenceMiner/anki.py +236 -152
  3. GameSentenceMiner/gametext.py +7 -4
  4. GameSentenceMiner/gsm.py +49 -10
  5. GameSentenceMiner/locales/en_us.json +7 -3
  6. GameSentenceMiner/locales/ja_jp.json +8 -4
  7. GameSentenceMiner/locales/zh_cn.json +8 -4
  8. GameSentenceMiner/obs.py +238 -59
  9. GameSentenceMiner/ocr/owocr_helper.py +1 -1
  10. GameSentenceMiner/tools/ss_selector.py +7 -8
  11. GameSentenceMiner/ui/__init__.py +0 -0
  12. GameSentenceMiner/ui/anki_confirmation.py +187 -0
  13. GameSentenceMiner/{config_gui.py → ui/config_gui.py} +100 -35
  14. GameSentenceMiner/ui/screenshot_selector.py +215 -0
  15. GameSentenceMiner/util/configuration.py +124 -22
  16. GameSentenceMiner/util/db.py +22 -13
  17. GameSentenceMiner/util/downloader/download_tools.py +2 -2
  18. GameSentenceMiner/util/ffmpeg.py +24 -30
  19. GameSentenceMiner/util/get_overlay_coords.py +34 -34
  20. GameSentenceMiner/util/gsm_utils.py +31 -1
  21. GameSentenceMiner/util/text_log.py +11 -9
  22. GameSentenceMiner/vad.py +31 -12
  23. GameSentenceMiner/web/database_api.py +742 -123
  24. GameSentenceMiner/web/static/css/dashboard-shared.css +241 -0
  25. GameSentenceMiner/web/static/css/kanji-grid.css +94 -2
  26. GameSentenceMiner/web/static/css/overview.css +850 -0
  27. GameSentenceMiner/web/static/css/popups-shared.css +126 -0
  28. GameSentenceMiner/web/static/css/shared.css +97 -0
  29. GameSentenceMiner/web/static/css/stats.css +192 -597
  30. GameSentenceMiner/web/static/js/anki_stats.js +6 -4
  31. GameSentenceMiner/web/static/js/database.js +209 -5
  32. GameSentenceMiner/web/static/js/goals.js +610 -0
  33. GameSentenceMiner/web/static/js/kanji-grid.js +267 -4
  34. GameSentenceMiner/web/static/js/overview.js +1176 -0
  35. GameSentenceMiner/web/static/js/shared.js +25 -0
  36. GameSentenceMiner/web/static/js/stats.js +154 -1459
  37. GameSentenceMiner/web/stats.py +2 -2
  38. GameSentenceMiner/web/templates/anki_stats.html +5 -0
  39. GameSentenceMiner/web/templates/components/navigation.html +3 -1
  40. GameSentenceMiner/web/templates/database.html +73 -1
  41. GameSentenceMiner/web/templates/goals.html +376 -0
  42. GameSentenceMiner/web/templates/index.html +13 -11
  43. GameSentenceMiner/web/templates/overview.html +416 -0
  44. GameSentenceMiner/web/templates/stats.html +46 -251
  45. GameSentenceMiner/web/texthooking_page.py +18 -0
  46. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.0.dist-info}/METADATA +5 -1
  47. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.0.dist-info}/RECORD +51 -41
  48. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.0.dist-info}/WHEEL +0 -0
  49. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.0.dist-info}/entry_points.txt +0 -0
  50. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.0.dist-info}/licenses/LICENSE +0 -0
  51. {gamesentenceminer-2.17.7.dist-info → gamesentenceminer-2.18.0.dist-info}/top_level.txt +0 -0
@@ -16,6 +16,10 @@
16
16
 
17
17
  <!-- Include shared CSS -->
18
18
  <link rel="stylesheet" href="/static/css/shared.css">
19
+
20
+ <!-- Include shared dashboard and popup CSS -->
21
+ <link rel="stylesheet" href="/static/css/dashboard-shared.css">
22
+ <link rel="stylesheet" href="/static/css/popups-shared.css">
19
23
 
20
24
  <!-- Include stats-specific CSS -->
21
25
  <link rel="stylesheet" href="/static/css/stats.css">
@@ -31,7 +35,6 @@
31
35
 
32
36
  <!-- Include shared navigation -->
33
37
  {% include 'components/navigation.html' %}
34
-
35
38
  <div class="dashboard-card date-range">
36
39
  <div class="dashboard-card-header">
37
40
  <h3 class="dashboard-card-title">
@@ -39,7 +42,6 @@
39
42
  Date Range
40
43
  </h3>
41
44
  </div>
42
-
43
45
  <div class="dashboard-date-range">
44
46
  <div class="dashboard-date-item tooltip" data-tooltip="Select the start date for your stats">
45
47
  <label for="fromDate">From</label>
@@ -51,7 +53,6 @@
51
53
  </div>
52
54
  </div>
53
55
  </div>
54
-
55
56
  <div id="dateErrorPopup" class="dashboard-popup hidden">
56
57
  <div class="dashboard-popup-content">
57
58
  <div class="dashboard-popup-icon">⚠️</div>
@@ -59,7 +60,6 @@
59
60
  <button id="closePopupBtn" class="dashboard-popup-btn">OK</button>
60
61
  </div>
61
62
  </div>
62
-
63
63
  <div id="noDataPopup" class="no-data-popup hidden">
64
64
  <div class="no-data-content">
65
65
  <p>No data found for the selected range.</p>
@@ -67,253 +67,6 @@
67
67
  </div>
68
68
  </div>
69
69
 
70
- <!-- Dashboard Statistics Sections -->
71
- <div class="dashboard-container">
72
- <!-- Current Game Statistics Panel -->
73
- <div class="dashboard-card current-game" id="currentGameCard">
74
- <div class="dashboard-card-header">
75
- <div>
76
- <h3 class="dashboard-card-title">
77
- <span class="dashboard-card-icon">🎮</span>
78
- Current Game Statistics
79
- </h3>
80
- <p class="dashboard-card-subtitle" id="currentGameName">Loading...</p>
81
- </div>
82
- <div class="dashboard-streak-indicator" id="currentGameStreak" style="display: none;">
83
- <span id="currentStreakValue">0</span> day streak
84
- </div>
85
- </div>
86
-
87
- <div class="dashboard-stats-grid" id="currentGameStats">
88
- <div class="dashboard-stat-item tooltip" data-tooltip="Total characters read in this game">
89
- <span class="dashboard-stat-value" id="currentTotalChars">-</span>
90
- <span class="dashboard-stat-label">Characters</span>
91
- </div>
92
- <div class="dashboard-stat-item tooltip" data-tooltip="Total time spent reading this game">
93
- <span class="dashboard-stat-value" id="currentTotalTime">-</span>
94
- <span class="dashboard-stat-label">Time Spent</span>
95
- </div>
96
- <div class="dashboard-stat-item tooltip" data-tooltip="Average reading speed for this game">
97
- <span class="dashboard-stat-value" id="currentReadingSpeed">-</span>
98
- <span class="dashboard-stat-label">Chars/Hour</span>
99
- </div>
100
- <div class="dashboard-stat-item tooltip" data-tooltip="Number of reading sessions for this game">
101
- <span class="dashboard-stat-value" id="currentSessions">-</span>
102
- <span class="dashboard-stat-label">Sessions</span>
103
- </div>
104
- </div>
105
-
106
- <div class="dashboard-progress-section">
107
- <div class="dashboard-progress-title">Recent Progress</div>
108
- <div class="dashboard-progress-items">
109
- <div class="dashboard-progress-item">
110
- <div class="dashboard-progress-value positive" id="currentMonthlyChars">-</div>
111
- <div class="dashboard-progress-label">Monthly Characters</div>
112
- </div>
113
- <div class="dashboard-progress-item">
114
- <div class="dashboard-progress-value neutral" id="currentFirstDate">-</div>
115
- <div class="dashboard-progress-label">Started</div>
116
- </div>
117
- <div class="dashboard-progress-item">
118
- <div class="dashboard-progress-value neutral" id="currentLastDate">-</div>
119
- <div class="dashboard-progress-label">Last Activity</div>
120
- </div>
121
- </div>
122
- </div>
123
- </div>
124
-
125
- <!-- All Games Historical Overview -->
126
- <div class="dashboard-card all-games" id="allGamesCard">
127
- <div class="dashboard-card-header">
128
- <div>
129
- <h3 class="dashboard-card-title">
130
- <span class="dashboard-card-icon">📚</span>
131
- All Games Overview
132
- </h3>
133
- <p class="dashboard-card-subtitle" id="totalGamesCount">Loading...</p>
134
- </div>
135
- <div class="dashboard-streak-indicator" id="allGamesStreak" style="display: none;">
136
- <span id="allStreakValue">0</span> day streak
137
- </div>
138
- </div>
139
-
140
- <div class="dashboard-stats-grid" id="allGamesStats">
141
- <div class="dashboard-stat-item tooltip" data-tooltip="Total characters read across all games">
142
- <span class="dashboard-stat-value" id="allTotalChars">-</span>
143
- <span class="dashboard-stat-label">Characters</span>
144
- </div>
145
- <div class="dashboard-stat-item tooltip" data-tooltip="Total time spent reading across all games">
146
- <span class="dashboard-stat-value" id="allTotalTime">-</span>
147
- <span class="dashboard-stat-label">Time Spent</span>
148
- </div>
149
- <div class="dashboard-stat-item tooltip" data-tooltip="Overall average reading speed">
150
- <span class="dashboard-stat-value" id="allReadingSpeed">-</span>
151
- <span class="dashboard-stat-label">Chars/Hour</span>
152
- </div>
153
- <div class="dashboard-stat-item tooltip" data-tooltip="Total number of reading sessions">
154
- <span class="dashboard-stat-value" id="allSessions">-</span>
155
- <span class="dashboard-stat-label">Sessions</span>
156
- </div>
157
- </div>
158
-
159
- <div class="dashboard-progress-section">
160
- <div class="dashboard-progress-title">Overall Progress</div>
161
- <div class="dashboard-progress-items">
162
- <div class="dashboard-progress-item">
163
- <div class="dashboard-progress-value positive" id="allMonthlyChars">-</div>
164
- <div class="dashboard-progress-label">Monthly Characters</div>
165
- </div>
166
- <div class="dashboard-progress-item">
167
- <div class="dashboard-progress-value neutral" id="allUniqueGames">-</div>
168
- <div class="dashboard-progress-label">Games Played</div>
169
- </div>
170
- <div class="dashboard-progress-item">
171
- <div class="dashboard-progress-value neutral" id="allTotalSentences">-</div>
172
- <div class="dashboard-progress-label">Total Sentences</div>
173
- </div>
174
- </div>
175
- </div>
176
- </div>
177
- </div>
178
-
179
- <!-- Loading/Error states for dashboard -->
180
- <div class="dashboard-loading" id="dashboardLoading" style="display: none;">
181
- <div class="spinner"></div>
182
- <span>Loading dashboard statistics...</span>
183
- </div>
184
-
185
- <div class="dashboard-error" id="dashboardError" style="display: none;">
186
- <div class="dashboard-error-icon">⚠️</div>
187
- <div class="dashboard-error-message">Failed to load dashboard statistics</div>
188
- <button class="dashboard-retry-btn" data-action="loadDashboardData">Retry</button>
189
- </div>
190
-
191
-
192
- <!-- Today's Overview Card -->
193
- <div class="dashboard-card today-overview" id="todayOverviewCard" style="margin-bottom: 24px;">
194
- <div class="dashboard-card-header">
195
- <h3 class="dashboard-card-title">
196
- <span class="dashboard-card-icon">📅</span>
197
- Today's Overview
198
- </h3>
199
- <p class="dashboard-card-subtitle" id="todayDate">Loading...</p>
200
- </div>
201
- <div class="dashboard-stats-grid" id="todayStats">
202
- <div class="dashboard-stat-item tooltip" data-tooltip="Total hours spent reading today">
203
- <span class="dashboard-stat-value" id="todayTotalHours">-</span>
204
- <span class="dashboard-stat-label">Hours Spent</span>
205
- </div>
206
- <div class="dashboard-stat-item tooltip" data-tooltip="Total characters read today">
207
- <span class="dashboard-stat-value" id="todayTotalChars">-</span>
208
- <span class="dashboard-stat-label">Characters</span>
209
- </div>
210
- <div class="dashboard-stat-item tooltip" data-tooltip="Number of reading sessions today">
211
- <span class="dashboard-stat-value" id="todaySessions">-</span>
212
- <span class="dashboard-stat-label">Sessions</span>
213
- </div>
214
- <div class="dashboard-stat-item tooltip" data-tooltip="Average reading speed today">
215
- <span class="dashboard-stat-value" id="todayCharsPerHour">-</span>
216
- <span class="dashboard-stat-label">Chars/Hour</span>
217
- </div>
218
- </div>
219
- </div>
220
-
221
- <!-- Goal Progress Chart -->
222
- <div class="dashboard-card goal-progress-chart" id="goalProgressChart" style="margin-bottom: 30px;">
223
- <div class="dashboard-card-header">
224
- <h3 class="dashboard-card-title">
225
- <span class="dashboard-card-icon">🎯</span>
226
- Goal Progress Chart
227
- </h3>
228
- <p class="dashboard-card-subtitle">Track your reading goals and projected completion dates</p>
229
- </div>
230
-
231
- <div class="goal-progress-grid">
232
- <!-- Reading Hours Goal -->
233
- <div class="goal-progress-item">
234
- <div class="goal-progress-header">
235
- <div class="goal-progress-label">
236
- <span class="goal-icon">⏱️</span>
237
- Reading Hours
238
- </div>
239
- <div class="goal-progress-values">
240
- <span class="goal-current" id="goalHoursCurrent">-</span>
241
- <span class="goal-separator">/</span>
242
- <span class="goal-target" id="goalHoursTarget">-</span>
243
- </div>
244
- </div>
245
- <div class="goal-progress-bar">
246
- <div class="goal-progress-fill" id="goalHoursProgress" data-percentage="0"></div>
247
- </div>
248
- <div class="goal-progress-info">
249
- <span class="goal-percentage" id="goalHoursPercentage">0%</span>
250
- <span class="goal-projection" id="goalHoursProjection">-</span>
251
- </div>
252
- </div>
253
-
254
- <!-- Character Count Goal -->
255
- <div class="goal-progress-item">
256
- <div class="goal-progress-header">
257
- <div class="goal-progress-label">
258
- <span class="goal-icon">📖</span>
259
- Characters Read
260
- </div>
261
- <div class="goal-progress-values">
262
- <span class="goal-current" id="goalCharsCurrent">-</span>
263
- <span class="goal-separator">/</span>
264
- <span class="goal-target" id="goalCharsTarget">-</span>
265
- </div>
266
- </div>
267
- <div class="goal-progress-bar">
268
- <div class="goal-progress-fill" id="goalCharsProgress" data-percentage="0"></div>
269
- </div>
270
- <div class="goal-progress-info">
271
- <span class="goal-percentage" id="goalCharsPercentage">0%</span>
272
- <span class="goal-projection" id="goalCharsProjection">-</span>
273
- </div>
274
- </div>
275
-
276
- <!-- Games Goal -->
277
- <div class="goal-progress-item">
278
- <div class="goal-progress-header">
279
- <div class="goal-progress-label">
280
- <span class="goal-icon">🎮</span>
281
- Games
282
- </div>
283
- <div class="goal-progress-values">
284
- <span class="goal-current" id="goalGamesCurrent">-</span>
285
- <span class="goal-separator">/</span>
286
- <span class="goal-target" id="goalGamesTarget">-</span>
287
- </div>
288
- </div>
289
- <div class="goal-progress-bar">
290
- <div class="goal-progress-fill" id="goalGamesProgress" data-percentage="0"></div>
291
- </div>
292
- <div class="goal-progress-info">
293
- <span class="goal-percentage" id="goalGamesPercentage">0%</span>
294
- <span class="goal-projection" id="goalGamesProjection">-</span>
295
- </div>
296
- </div>
297
- </div>
298
-
299
- <!-- Loading/Error states -->
300
- <div class="goal-progress-loading" id="goalProgressLoading" style="display: none;">
301
- <div class="spinner"></div>
302
- <span>Loading goal progress...</span>
303
- </div>
304
-
305
- <div class="goal-progress-error" id="goalProgressError" style="display: none;">
306
- <div class="goal-progress-error-icon">⚠️</div>
307
- <div class="goal-progress-error-message">Failed to load goal progress</div>
308
- <button class="retry-btn" onclick="loadGoalProgress()">Retry</button>
309
- </div>
310
- </div>
311
-
312
- <div class="chart-container">
313
- <h2>Activity Heatmap</h2>
314
- <div id="heatmapContainer"></div>
315
- </div>
316
-
317
70
  <div class="chart-container">
318
71
  <h2>Lines Received Over Time</h2>
319
72
  <canvas id="linesChart"></canvas>
@@ -474,6 +227,34 @@
474
227
  </small>
475
228
  </div>
476
229
 
230
+ <div style="margin-bottom: 15px;">
231
+ <label for="readingHoursTargetDate"
232
+ style="display: block; font-weight: 600; margin-bottom: 8px; color: var(--text-primary);">
233
+ Reading Hours Target Date
234
+ </label>
235
+ <input type="date" id="readingHoursTargetDate" name="reading_hours_target_date"
236
+ style="width: 90%; padding: 10px; border: 1px solid var(--border-color); border-radius: 5px; background: var(--bg-tertiary); color: var(--text-primary); font-size: 14px;"
237
+ data-date-format="yyyy-mm-dd">
238
+ <small
239
+ style="color: var(--text-tertiary); font-size: 12px; margin-top: 4px; display: block;">
240
+ Target date to achieve your reading hours goal
241
+ </small>
242
+ </div>
243
+
244
+ <div style="margin-bottom: 15px;">
245
+ <label for="characterCountTargetDate"
246
+ style="display: block; font-weight: 600; margin-bottom: 8px; color: var(--text-primary);">
247
+ Character Count Target Date
248
+ </label>
249
+ <input type="date" id="characterCountTargetDate" name="character_count_target_date"
250
+ style="width: 90%; padding: 10px; border: 1px solid var(--border-color); border-radius: 5px; background: var(--bg-tertiary); color: var(--text-primary); font-size: 14px;"
251
+ data-date-format="yyyy-mm-dd">
252
+ <small
253
+ style="color: var(--text-tertiary); font-size: 12px; margin-top: 4px; display: block;">
254
+ Target date to achieve your character count goal
255
+ </small>
256
+ </div>
257
+
477
258
  <div style="margin-bottom: 15px;">
478
259
  <label for="gamesTarget"
479
260
  style="display: block; font-weight: 600; margin-bottom: 8px; color: var(--text-primary);">
@@ -488,6 +269,20 @@
488
269
  standards
489
270
  </small>
490
271
  </div>
272
+
273
+ <div style="margin-bottom: 15px;">
274
+ <label for="gamesTargetDate"
275
+ style="display: block; font-weight: 600; margin-bottom: 8px; color: var(--text-primary);">
276
+ Games/Visual Novels Target Date
277
+ </label>
278
+ <input type="date" id="gamesTargetDate" name="games_target_date"
279
+ style="width: 90%; padding: 10px; border: 1px solid var(--border-color); border-radius: 5px; background: var(--bg-tertiary); color: var(--text-primary); font-size: 14px;"
280
+ data-date-format="yyyy-mm-dd">
281
+ <small
282
+ style="color: var(--text-tertiary); font-size: 12px; margin-top: 4px; display: block;">
283
+ Target date to achieve your games goal
284
+ </small>
285
+ </div>
491
286
  </div>
492
287
 
493
288
  <!-- Import ExStatic Lines Section -->
@@ -260,6 +260,15 @@ def datetimeformat(value, format='%Y-%m-%d %H:%M:%S'):
260
260
  return datetime.datetime.fromtimestamp(float(value)).strftime(format)
261
261
 
262
262
 
263
+ @app.route('/overview')
264
+ def overview():
265
+ """Renders the overview page."""
266
+ from GameSentenceMiner.util.configuration import get_master_config, get_stats_config
267
+ return render_template('overview.html',
268
+ config=get_config(),
269
+ master_config=get_master_config(),
270
+ stats_config=get_stats_config())
271
+
263
272
  @app.route('/stats')
264
273
  def stats():
265
274
  """Renders the stats page."""
@@ -269,6 +278,15 @@ def stats():
269
278
  master_config=get_master_config(),
270
279
  stats_config=get_stats_config())
271
280
 
281
+ @app.route('/goals')
282
+ def goals():
283
+ """Renders the goals page."""
284
+ from GameSentenceMiner.util.configuration import get_master_config, get_stats_config
285
+ return render_template('goals.html',
286
+ config=get_config(),
287
+ master_config=get_master_config(),
288
+ stats_config=get_stats_config())
289
+
272
290
  @app.route('/api/anki_earliest_date')
273
291
  def anki_earliest_date():
274
292
  """Returns the timestamp of earliest available card in anki collection."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GameSentenceMiner
3
- Version: 2.17.7
3
+ Version: 2.18.0
4
4
  Summary: A tool for mining sentences from games. Update: Overlay?
5
5
  Author-email: Beangate <bpwhelan95@gmail.com>
6
6
  License: MIT License
@@ -163,6 +163,10 @@ If you encounter issues, please ask for help in my [Discord](https://discord.gg/
163
163
 
164
164
  * https://github.com/Saplling/transparent-texthooker-overlay
165
165
 
166
+ * [exSTATic](https://github.com/KamWithK/exSTATic) for inspiration for GSM's Stats.
167
+
168
+ * [Kanji Grid](https://github.com/Kuuuube/kanjigrid)
169
+
166
170
  ## Donations
167
171
 
168
172
  If you've found this or any of my other projects helpful, please consider supporting my work through [GitHub Sponsors](https://github.com/sponsors/bpwhelan), or [Ko-fi](https://ko-fi.com/beangate).
@@ -1,12 +1,11 @@
1
1
  GameSentenceMiner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- GameSentenceMiner/anki.py,sha256=o1mq9y-PZh4Sjo1qWfdONZEc7_7PJlx_nymaxqtgVSk,27433
3
- GameSentenceMiner/config_gui.py,sha256=w6GpmEpgLGtOstaw6QHERowTGWwZUMPj-CfVJ3Mlb-E,148184
4
- GameSentenceMiner/gametext.py,sha256=fQYVsXO9VirzKwca_ktek0oTnerhStIDVsxHiyG3_AM,10533
5
- GameSentenceMiner/gsm.py,sha256=JZUj8PkwHW6RPzJ-rvpOYMY7F-TO7EsHRWSzlZqPE8w,34069
6
- GameSentenceMiner/obs.py,sha256=Xa4-SFm2Ftlnk6KX_XaDWjhSEPW_7rSDRe9WDNW8JLY,29377
7
- GameSentenceMiner/vad.py,sha256=cujto_lzAuljldBBnve4JuK54tInWVGSp7NGg-xkaCY,19830
2
+ GameSentenceMiner/anki.py,sha256=TgLJIGZq6qPfmXV378BzG_SEnL6KvHK74u4ztTggzbM,31139
3
+ GameSentenceMiner/gametext.py,sha256=FBL3kgJ71hCg5Nczuo9dAEi_sLGdVIGgvc62bT5KhCc,10691
4
+ GameSentenceMiner/gsm.py,sha256=0hEpEBDbI9FtiKtHeyrSLKV1nys-mKTKfxLY0Dk7mOQ,36387
5
+ GameSentenceMiner/obs.py,sha256=R2Rsq2rMnWIoIb4tArTY7oAFIsyxfp1Nf-XnX_E95io,35858
6
+ GameSentenceMiner/vad.py,sha256=dhZpbTsVI4scqXZ0M701BenUur0EzYM96tnyGXo8iI0,21021
8
7
  GameSentenceMiner/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- GameSentenceMiner/ai/ai_prompting.py,sha256=epKsOky_2lN5f-wHeKewU7tN9adxhw5J9IYXTYR8yQM,29154
8
+ GameSentenceMiner/ai/ai_prompting.py,sha256=mq9Odv_FpohXagU-OoSZbLWttdrEl1M1NiqnodeUpD8,29126
10
9
  GameSentenceMiner/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
10
  GameSentenceMiner/assets/icon.png,sha256=9GRL8uXUAgkUSlvbm9Pv9o2poFVRGdW6s2ub_DeUD9M,937624
12
11
  GameSentenceMiner/assets/icon128.png,sha256=l90j7biwdz5ahwOd5wZ-406ryEV9Pan93dquJQ3e1CI,18395
@@ -15,14 +14,14 @@ GameSentenceMiner/assets/icon32.png,sha256=Kww0hU_qke9_22wBuO_Nq0Dv2SfnOLwMhCyGg
15
14
  GameSentenceMiner/assets/icon512.png,sha256=HxUj2GHjyQsk8NV433256UxU9phPhtjCY-YB_7W4sqs,192487
16
15
  GameSentenceMiner/assets/icon64.png,sha256=N8xgdZXvhqVQP9QUK3wX5iqxX9LxHljD7c-Bmgim6tM,9301
17
16
  GameSentenceMiner/assets/pickaxe.png,sha256=VfIGyXyIZdzEnVcc4PmG3wszPMO1W4KCT7Q_nFK6eSE,1403829
18
- GameSentenceMiner/locales/en_us.json,sha256=pyh8X6BHVny9Rk3fTBcW9wgbyysvpgWT2cebFAzIyv4,27917
19
- GameSentenceMiner/locales/ja_jp.json,sha256=zqbZM04BV0qWR7Al_vdsL8b2hNq_B6oq2msvJc1AMOA,29854
20
- GameSentenceMiner/locales/zh_cn.json,sha256=QLkCZF6zomPGT52UpS8x4ntW3YdeJyfvQTqyZgqdcFk,25914
17
+ GameSentenceMiner/locales/en_us.json,sha256=FMoG9Nggx3G48ydy9bXgEBwQv9lxb4UZI7WzXatdBtY,28202
18
+ GameSentenceMiner/locales/ja_jp.json,sha256=ilCa04D4MbtCc2dlnij_a5qpZ_ity4CLtmSrRJ2h_7M,30172
19
+ GameSentenceMiner/locales/zh_cn.json,sha256=tFhxETRemkhFOcNIF_1R4TiFDdKHrSqq8BoIbZ5KoHc,26190
21
20
  GameSentenceMiner/ocr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
21
  GameSentenceMiner/ocr/gsm_ocr_config.py,sha256=Ov04c-nKzh3sADxO-5JyZWVe4DlrHM9edM9tc7-97Jo,5970
23
22
  GameSentenceMiner/ocr/ocrconfig.py,sha256=_tY8mjnzHMJrLS8E5pHqYXZjMuLoGKYgJwdhYgN-ny4,6466
24
23
  GameSentenceMiner/ocr/owocr_area_selector.py,sha256=4MjItlaZ78Smxa3uxMxbjU0n2z_IBTG-iBpDB9COSL8,29270
25
- GameSentenceMiner/ocr/owocr_helper.py,sha256=BGBiMDziPknCSj2VM4kpVL3iCtIswbisiPuiPOAVqjs,32370
24
+ GameSentenceMiner/ocr/owocr_helper.py,sha256=GL16SZa48LwmVQ7xKYRtEgbj8V-7JwOfAHUw-CPwfp4,32370
26
25
  GameSentenceMiner/ocr/ss_picker.py,sha256=0IhxUdaKruFpZyBL-8SpxWg7bPrlGpy3lhTcMMZ5rwo,5224
27
26
  GameSentenceMiner/owocr/owocr/__init__.py,sha256=87hfN5u_PbL_onLfMACbc0F5j4KyIK9lKnRCj6oZgR0,49
28
27
  GameSentenceMiner/owocr/owocr/__main__.py,sha256=XQaqZY99EKoCpU-gWQjNbTs7Kg17HvBVE7JY8LqIE0o,157
@@ -34,34 +33,38 @@ GameSentenceMiner/owocr/owocr/screen_coordinate_picker.py,sha256=Na6XStbQBtpQUSd
34
33
  GameSentenceMiner/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
34
  GameSentenceMiner/tools/audio_offset_selector.py,sha256=8Stk3BP-XVIuzRv9nl9Eqd2D-1yD3JrgU-CamBywJmY,8542
36
35
  GameSentenceMiner/tools/furigana_filter_preview.py,sha256=BXv7FChPEJW_VeG5XYt6suAsMKVArsjr3cEduE9KhYg,13642
37
- GameSentenceMiner/tools/ss_selector.py,sha256=cbjMxiKOCuOfbRvLR_PCRlykBrGtm1LXd6u5czPqkmc,4793
36
+ GameSentenceMiner/tools/ss_selector.py,sha256=ob2oJdiYreDMMau7CvsglpnhZ1CDnJqop3lV54-PjRo,4782
38
37
  GameSentenceMiner/tools/window_transparency.py,sha256=GtbxbmZg0-UYPXhfHff-7IKZyY2DKe4B9GdyovfmpeM,8166
38
+ GameSentenceMiner/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ GameSentenceMiner/ui/anki_confirmation.py,sha256=m27IcWbUwb6o6Klh3NwXBc2FtMX9Da3vbLc2Bdht1G8,8593
40
+ GameSentenceMiner/ui/config_gui.py,sha256=Nt6uuJrinOrSpDdrw92zdd1GvyQNjOoGvkZQdGWA9ds,151913
41
+ GameSentenceMiner/ui/screenshot_selector.py,sha256=AKML87MpgYQeSuj1F10GngpNrn9qp06zLLzNRwrQWM8,8900
39
42
  GameSentenceMiner/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- GameSentenceMiner/util/configuration.py,sha256=B-vXvOt5OfdJZ6WbAPLbvXfT4hMAjqd3pT3gGSxenKg,42623
41
- GameSentenceMiner/util/db.py,sha256=nUVKUBk0wtRocxVXhiFRXfaiVD77DGCsMp4uj1Rrvd8,28088
43
+ GameSentenceMiner/util/configuration.py,sha256=K3NIcqwMtAgB_ZytucTgBgDqV1243yrWM5mp5qj2WlE,46577
44
+ GameSentenceMiner/util/db.py,sha256=3Fs75pGJyf8-3y3k6Zfpgp8z9tYL9-ZvQUk_FgDc9Vw,28664
42
45
  GameSentenceMiner/util/electron_config.py,sha256=KfeJToeFFVw0IR5MKa-gBzpzaGrU-lyJbR9z-sDEHYU,8767
43
- GameSentenceMiner/util/ffmpeg.py,sha256=Wf7I4Ko0rykvm5fAuhedP1Gu5550mMHm_qtlK3arJTM,29080
44
- GameSentenceMiner/util/get_overlay_coords.py,sha256=RE0aZHTPORe2TI2vJI1GkqEmgP-ljudMz4PYkeslFcw,22150
45
- GameSentenceMiner/util/gsm_utils.py,sha256=OUCBmYwEFSmAb0E0s9mtcE2VSyCWbbjG-5bLk6p1ngw,9340
46
+ GameSentenceMiner/util/ffmpeg.py,sha256=cAzztfY36Xf2WvsJDjavoiMOvA9ac2GVdCrSB4LzHk4,29007
47
+ GameSentenceMiner/util/get_overlay_coords.py,sha256=aYmSxJzyCeIRLNEwL2V8GxMVIsj8qvUv4ysE4YxpWNM,22144
48
+ GameSentenceMiner/util/gsm_utils.py,sha256=mASECTmN10c2yPL4NEfLg0Y0YWwFso1i6r_hhJPR3MY,10974
46
49
  GameSentenceMiner/util/model.py,sha256=R-_RYTYLSDNgBoVTPuPBcIHeOznIqi_vBzQ7VQ20WYk,6727
47
50
  GameSentenceMiner/util/notification.py,sha256=YBhf_mSo_i3cjBz-pmeTPx3wchKiG9BK2VBdZSa2prQ,4597
48
- GameSentenceMiner/util/text_log.py,sha256=eqLchRrRsWeuex13f5IoxENLWMhjfZtJgUnh9N5jnJQ,6782
51
+ GameSentenceMiner/util/text_log.py,sha256=ZR98XFiOx9OWbZz5DzviHLjbg-j01OnPtIj6MnSfFU4,6877
49
52
  GameSentenceMiner/util/communication/__init__.py,sha256=xh__yn2MhzXi9eLi89PeZWlJPn-cbBSjskhi1BRraXg,643
50
53
  GameSentenceMiner/util/communication/send.py,sha256=Wki9qIY2CgYnuHbmnyKVIYkcKAN_oYS4up93XMikBaI,222
51
54
  GameSentenceMiner/util/communication/websocket.py,sha256=Zpnqsy8RUeYxMFNGVUaPrWrlbAHjuNxCsn908iWL_kU,3344
52
55
  GameSentenceMiner/util/downloader/Untitled_json.py,sha256=RUUl2bbbCpUDUUS0fP0tdvf5FngZ7ILdA_J5TFYAXUQ,15272
53
56
  GameSentenceMiner/util/downloader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- GameSentenceMiner/util/downloader/download_tools.py,sha256=axKhUplGx3ATZv83n-EajSK8iCXm41AprbixQt6yJKA,11522
57
+ GameSentenceMiner/util/downloader/download_tools.py,sha256=pcT-lQDAwEgEVIK1smwfysXGNWWMGnRT-Xu93Km_A6o,11529
55
58
  GameSentenceMiner/util/downloader/oneocr_dl.py,sha256=l3s9Z-x1b57GX048o5h-MVv0UTZo4H-Q-zb-JREkMLI,10439
56
59
  GameSentenceMiner/util/win10toast/__init__.py,sha256=6TL2w6rzNmpJEp6_v2cAJP_7ExA3UsKzwdM08pNcVfE,5341
57
60
  GameSentenceMiner/util/win10toast/__main__.py,sha256=5MYnBcFj8y_6Dyc1kiPd0_FsUuh4yl1cv5wsleU6V4w,668
58
61
  GameSentenceMiner/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- GameSentenceMiner/web/database_api.py,sha256=bFtU427dQEVqtp4y7nqQzhmuaL0FHS3drWc3KIlRJr8,52643
62
+ GameSentenceMiner/web/database_api.py,sha256=pY1j8b1H5VdkDv5aaZjBnpx4tSNfJhfsuukyty6jbi0,84812
60
63
  GameSentenceMiner/web/events.py,sha256=6Vyz5c9MdpMIa7Zqljqhap2XFQnAVYJ0CdQV64TSZsA,5119
61
64
  GameSentenceMiner/web/gsm_websocket.py,sha256=B0VKpxmsRu0WRh5nFWlpDPBQ6-K2ed7TEIa0O6YWeoo,4166
62
65
  GameSentenceMiner/web/service.py,sha256=YZchmScTn7AX_GkwV1ULEK6qjdOnJcpc3qfMwDf7cUE,5363
63
- GameSentenceMiner/web/stats.py,sha256=h4tRA_00OdQ9uVYrQuAE5SmeSGHMLfTUHPOy6re_h5s,22366
64
- GameSentenceMiner/web/texthooking_page.py,sha256=IgHsm7l-5pPaYBD8moJnFxRpcvPo_AHNYRi77cPhyRM,14515
66
+ GameSentenceMiner/web/stats.py,sha256=zIK0ZzyInvvlJh87KhAKYl2CCuMJWW6Wyv7UssURFbE,22366
67
+ GameSentenceMiner/web/texthooking_page.py,sha256=f_-oqyb4NoU4ZrveDkPhGbHR4REdYiceceohKDq2e_I,15253
65
68
  GameSentenceMiner/web/static/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
69
  GameSentenceMiner/web/static/apple-touch-icon.png,sha256=OcMI8af_68DA_tweOsQ5LytTyMwm7-hPW07IfrOVgEs,46132
67
70
  GameSentenceMiner/web/static/favicon-96x96.png,sha256=lOePzjiKl1JY2J1kT_PMdyEnrlJmi5GWbmXJunM12B4,16502
@@ -71,28 +74,35 @@ GameSentenceMiner/web/static/site.webmanifest,sha256=kaeNT-FjFt-T7JGzOhXH7YSqsrD
71
74
  GameSentenceMiner/web/static/style.css,sha256=bPZK0NVMuyRl5NNDuT7ZTzVLKlvSsdmeVHmAW4y5FM0,7001
72
75
  GameSentenceMiner/web/static/web-app-manifest-192x192.png,sha256=EfSNnBmsSaLfESbkGfYwbKzcjKOdzuWo18ABADfN974,51117
73
76
  GameSentenceMiner/web/static/web-app-manifest-512x512.png,sha256=wyqgCWCrLEUxSRXmaA3iJEESd-vM-ZmlTtZFBY4V8Pk,230819
74
- GameSentenceMiner/web/static/css/kanji-grid.css,sha256=FjgoZW77Uy8mTM6lHGO85tjzoNhkAS6cdXzLDcLLMh8,2449
77
+ GameSentenceMiner/web/static/css/dashboard-shared.css,sha256=qWE6OXcMyVJrCd-UO2jQEq-6sPkJJDA4rJsrpfeodMU,5392
78
+ GameSentenceMiner/web/static/css/kanji-grid.css,sha256=NzJg0Y85mMn4y0Ri5PPm7ATyIgfwGhTHDETQGogzeFM,4328
79
+ GameSentenceMiner/web/static/css/overview.css,sha256=FW1ZKLbMRvCm2do0Z5dfzA4sYLQkCTJuLO77aUiJIYU,16313
80
+ GameSentenceMiner/web/static/css/popups-shared.css,sha256=OMbDk6rF5spkFp2Zk3CkkE84Sl4RP4H4h-AhA8lCjhM,2393
75
81
  GameSentenceMiner/web/static/css/search.css,sha256=x06xsErfThUpE1NAG4CA2sCPSZ-ofNWEI_ekV2Ok5hY,253
76
- GameSentenceMiner/web/static/css/shared.css,sha256=NjnWdZwlmMn-OoN_4q7CG2rwcS4zRuP9rwnYQogo5Wc,17835
77
- GameSentenceMiner/web/static/css/stats.css,sha256=4-rKsi6DuCxd4EoBxKRxZVXAmqkdkuXBQe7oswXAC7w,24284
78
- GameSentenceMiner/web/static/js/anki_stats.js,sha256=1NWGAD2qJnfQpPWzENZdRjxz3xO2iN8ApegsDz9Mb9w,6843
79
- GameSentenceMiner/web/static/js/database.js,sha256=-SjMmhXzU8a3QNGrwGtJCu55ZXXfkBxlYSkySEBdclU,22097
80
- GameSentenceMiner/web/static/js/kanji-grid.js,sha256=rUa8_TGFm4Z8CtURoAlZjCN032PLe0YmHvN52S4_sE0,7181
82
+ GameSentenceMiner/web/static/css/shared.css,sha256=qIah6fFXr7ckRxnHSMfT79qu_tJ67fN-fCcDpU4exHA,19589
83
+ GameSentenceMiner/web/static/css/stats.css,sha256=MJTzhC0gjRa9szN5ZpZSOwiXAuwr5nGoA2AplYGhw68,16670
84
+ GameSentenceMiner/web/static/js/anki_stats.js,sha256=ZZqvqvePan9w17Nry7ui1ozR0SM0lAjfvZNI4XDPSzU,6871
85
+ GameSentenceMiner/web/static/js/database.js,sha256=Yz72C0u2KbL8w9mkenNzeBi_v8mZrMyM3dEsxps7r5E,31133
86
+ GameSentenceMiner/web/static/js/goals.js,sha256=PaJNS1jR1pIpBxYrI8Gog6XFQNPrnbaNWZ1QX7JVlAo,30938
87
+ GameSentenceMiner/web/static/js/kanji-grid.js,sha256=k9y25X4TvFYi2CEO7cusrcFVSQRBFWAT1LQ3zJhewYc,16365
88
+ GameSentenceMiner/web/static/js/overview.js,sha256=V9doaiu8axN5xl6cA0d7lAjc4R56W66XP7pnIFI0gr0,51858
81
89
  GameSentenceMiner/web/static/js/search.js,sha256=QrjsVXf90c1LzD09TPaK93RbIN9yEiXF8IKAKrDY4hw,10482
82
- GameSentenceMiner/web/static/js/shared.js,sha256=LM4NN3YhAMqyyFAcgwKyKs3cLm5beL9VidGK-k5uFnU,19134
83
- GameSentenceMiner/web/static/js/stats.js,sha256=3mSUn77PwaxqB7CXAlkUYKUHSkdUTQG0gw7YfEmjvN0,95373
84
- GameSentenceMiner/web/templates/anki_stats.html,sha256=FMRtl0voshXhAUCxCZaM4PQJEGgbwvK7KV-UMCDGLII,12388
85
- GameSentenceMiner/web/templates/database.html,sha256=Gd54rgZmfcV7ufoJ69COeMncs5Q5u-rSJcsIvROVCEo,13732
86
- GameSentenceMiner/web/templates/index.html,sha256=-_qnXY6YR2S6mJ4aRz98fM_3gI4ke4QOjv3CtiBbr1k,229563
90
+ GameSentenceMiner/web/static/js/shared.js,sha256=ZNibQkJxdypg93uMhmr_NEgoT5hJfxikzF6RKGz5Wy0,20416
91
+ GameSentenceMiner/web/static/js/stats.js,sha256=kfJ756a9JPK8l9S8YUldxXuICAGMIHMGaDoJCKpjfEs,35604
92
+ GameSentenceMiner/web/templates/anki_stats.html,sha256=0Y5lT-wGlliqgWHx9bgRZyiT_y2p-kqZcBA-ufwzR48,12715
93
+ GameSentenceMiner/web/templates/database.html,sha256=fwqNfS4yX_LOXAMCSL3ieuuvzWz8KuwXizFplPFyzSs,17972
94
+ GameSentenceMiner/web/templates/goals.html,sha256=kYUIteYzIArDWyZguuNzJScwMrrezWjFXxreU-LzzRk,21755
95
+ GameSentenceMiner/web/templates/index.html,sha256=y1mrlcKWRdwmfBP8B06p1CBk1avAJOr32388nX8YX4A,229074
96
+ GameSentenceMiner/web/templates/overview.html,sha256=mSlASGqiRO4oUsUDIhZhaPhFF396_xjE5sMJKtLmhqQ,23924
87
97
  GameSentenceMiner/web/templates/search.html,sha256=nao3M_hAbm5ftzThi91NtQ3ZiINMPUNx4ngFmqLnLQ4,4060
88
- GameSentenceMiner/web/templates/stats.html,sha256=i6kVMx6Up2Ilc0nf-Uh70GbloUcYRqxOYrA7XwLZxd4,33035
98
+ GameSentenceMiner/web/templates/stats.html,sha256=IOOFK3DXa3UVSrTLR_kLLNl6iy3ei-_C4EGqdbvZCos,22811
89
99
  GameSentenceMiner/web/templates/utility.html,sha256=KtqnZUMAYs5XsEdC9Tlsd40NKAVic0mu6sh-ReMDJpU,16940
90
- GameSentenceMiner/web/templates/components/navigation.html,sha256=6y9PvM3nh8LY6JWrZb6zVOm0vqkBLDc6d3gB9X5lT_w,1055
100
+ GameSentenceMiner/web/templates/components/navigation.html,sha256=7FGv59-4QocYy3b_BolkPXsp2drwwLjHraL5GUM27b4,1165
91
101
  GameSentenceMiner/web/templates/components/theme-styles.html,sha256=hiq3zdJljpRjQO1iUA7gfFKwXebltG-IWW-gnKS4GHA,3439
92
102
  GameSentenceMiner/wip/__init___.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
- gamesentenceminer-2.17.7.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
94
- gamesentenceminer-2.17.7.dist-info/METADATA,sha256=WieK1TkFmZG6pZkNIXm5lnTzjz8Qlr-m8mJbC9tuqVI,7348
95
- gamesentenceminer-2.17.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
96
- gamesentenceminer-2.17.7.dist-info/entry_points.txt,sha256=2APEP25DbfjSxGeHtwBstMH8mulVhLkqF_b9bqzU6vQ,65
97
- gamesentenceminer-2.17.7.dist-info/top_level.txt,sha256=V1hUY6xVSyUEohb0uDoN4UIE6rUZ_JYx8yMyPGX4PgQ,18
98
- gamesentenceminer-2.17.7.dist-info/RECORD,,
103
+ gamesentenceminer-2.18.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
104
+ gamesentenceminer-2.18.0.dist-info/METADATA,sha256=O4oqrmEnz5k4p6I1H8etRvYGRE8XBkG0T95KEZ3o_Us,7487
105
+ gamesentenceminer-2.18.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
106
+ gamesentenceminer-2.18.0.dist-info/entry_points.txt,sha256=2APEP25DbfjSxGeHtwBstMH8mulVhLkqF_b9bqzU6vQ,65
107
+ gamesentenceminer-2.18.0.dist-info/top_level.txt,sha256=V1hUY6xVSyUEohb0uDoN4UIE6rUZ_JYx8yMyPGX4PgQ,18
108
+ gamesentenceminer-2.18.0.dist-info/RECORD,,