GameSentenceMiner 2.19.16__py3-none-any.whl → 2.20.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.

Potentially problematic release.


This version of GameSentenceMiner might be problematic. Click here for more details.

Files changed (70) hide show
  1. GameSentenceMiner/__init__.py +39 -0
  2. GameSentenceMiner/anki.py +6 -3
  3. GameSentenceMiner/gametext.py +13 -2
  4. GameSentenceMiner/gsm.py +40 -3
  5. GameSentenceMiner/locales/en_us.json +4 -0
  6. GameSentenceMiner/locales/ja_jp.json +4 -0
  7. GameSentenceMiner/locales/zh_cn.json +4 -0
  8. GameSentenceMiner/obs.py +4 -1
  9. GameSentenceMiner/owocr/owocr/ocr.py +304 -134
  10. GameSentenceMiner/owocr/owocr/run.py +1 -1
  11. GameSentenceMiner/ui/anki_confirmation.py +4 -2
  12. GameSentenceMiner/ui/config_gui.py +12 -0
  13. GameSentenceMiner/util/configuration.py +6 -2
  14. GameSentenceMiner/util/cron/__init__.py +12 -0
  15. GameSentenceMiner/util/cron/daily_rollup.py +613 -0
  16. GameSentenceMiner/util/cron/jiten_update.py +397 -0
  17. GameSentenceMiner/util/cron/populate_games.py +154 -0
  18. GameSentenceMiner/util/cron/run_crons.py +148 -0
  19. GameSentenceMiner/util/cron/setup_populate_games_cron.py +118 -0
  20. GameSentenceMiner/util/cron_table.py +334 -0
  21. GameSentenceMiner/util/db.py +236 -49
  22. GameSentenceMiner/util/ffmpeg.py +23 -4
  23. GameSentenceMiner/util/games_table.py +340 -93
  24. GameSentenceMiner/util/jiten_api_client.py +188 -0
  25. GameSentenceMiner/util/stats_rollup_table.py +216 -0
  26. GameSentenceMiner/web/anki_api_endpoints.py +438 -220
  27. GameSentenceMiner/web/database_api.py +955 -1259
  28. GameSentenceMiner/web/jiten_database_api.py +1015 -0
  29. GameSentenceMiner/web/rollup_stats.py +672 -0
  30. GameSentenceMiner/web/static/css/dashboard-shared.css +75 -13
  31. GameSentenceMiner/web/static/css/overview.css +604 -47
  32. GameSentenceMiner/web/static/css/search.css +226 -0
  33. GameSentenceMiner/web/static/css/shared.css +762 -0
  34. GameSentenceMiner/web/static/css/stats.css +221 -0
  35. GameSentenceMiner/web/static/js/components/bar-chart.js +339 -0
  36. GameSentenceMiner/web/static/js/database-bulk-operations.js +320 -0
  37. GameSentenceMiner/web/static/js/database-game-data.js +390 -0
  38. GameSentenceMiner/web/static/js/database-game-operations.js +213 -0
  39. GameSentenceMiner/web/static/js/database-helpers.js +44 -0
  40. GameSentenceMiner/web/static/js/database-jiten-integration.js +750 -0
  41. GameSentenceMiner/web/static/js/database-popups.js +89 -0
  42. GameSentenceMiner/web/static/js/database-tabs.js +64 -0
  43. GameSentenceMiner/web/static/js/database-text-management.js +371 -0
  44. GameSentenceMiner/web/static/js/database.js +86 -718
  45. GameSentenceMiner/web/static/js/goals.js +79 -18
  46. GameSentenceMiner/web/static/js/heatmap.js +29 -23
  47. GameSentenceMiner/web/static/js/overview.js +1205 -339
  48. GameSentenceMiner/web/static/js/regex-patterns.js +100 -0
  49. GameSentenceMiner/web/static/js/search.js +215 -18
  50. GameSentenceMiner/web/static/js/shared.js +193 -39
  51. GameSentenceMiner/web/static/js/stats.js +1536 -179
  52. GameSentenceMiner/web/stats.py +1142 -269
  53. GameSentenceMiner/web/stats_api.py +2104 -0
  54. GameSentenceMiner/web/templates/anki_stats.html +4 -18
  55. GameSentenceMiner/web/templates/components/date-range.html +118 -3
  56. GameSentenceMiner/web/templates/components/html-head.html +40 -6
  57. GameSentenceMiner/web/templates/components/js-config.html +8 -8
  58. GameSentenceMiner/web/templates/components/regex-input.html +160 -0
  59. GameSentenceMiner/web/templates/database.html +564 -117
  60. GameSentenceMiner/web/templates/goals.html +41 -5
  61. GameSentenceMiner/web/templates/overview.html +159 -129
  62. GameSentenceMiner/web/templates/search.html +78 -9
  63. GameSentenceMiner/web/templates/stats.html +159 -5
  64. GameSentenceMiner/web/texthooking_page.py +280 -111
  65. {gamesentenceminer-2.19.16.dist-info → gamesentenceminer-2.20.0.dist-info}/METADATA +43 -2
  66. {gamesentenceminer-2.19.16.dist-info → gamesentenceminer-2.20.0.dist-info}/RECORD +70 -47
  67. {gamesentenceminer-2.19.16.dist-info → gamesentenceminer-2.20.0.dist-info}/WHEEL +0 -0
  68. {gamesentenceminer-2.19.16.dist-info → gamesentenceminer-2.20.0.dist-info}/entry_points.txt +0 -0
  69. {gamesentenceminer-2.19.16.dist-info → gamesentenceminer-2.20.0.dist-info}/licenses/LICENSE +0 -0
  70. {gamesentenceminer-2.19.16.dist-info → gamesentenceminer-2.20.0.dist-info}/top_level.txt +0 -0
@@ -164,32 +164,94 @@
164
164
  /* Date Range Card */
165
165
  .dashboard-date-range {
166
166
  display: flex;
167
- gap: 20px;
167
+ gap: 16px;
168
+ align-items: flex-end;
168
169
  }
169
170
  .dashboard-date-item {
170
171
  flex: 1;
171
172
  display: flex;
172
173
  flex-direction: column;
173
- gap: 6px;
174
+ gap: 8px;
174
175
  }
175
176
  .dashboard-date-item label {
176
- font-size: 13px;
177
+ font-size: 12px;
177
178
  color: var(--text-secondary);
178
- font-weight: 500;
179
+ font-weight: 600;
180
+ text-transform: uppercase;
181
+ letter-spacing: 0.5px;
179
182
  }
180
183
  .dashboard-date-input {
181
- padding: 8px 12px;
182
- border: 1px solid var(--border-color);
183
- border-radius: 8px;
184
- background: var(--bg-tertiary);
184
+ padding: 10px 14px;
185
+ border: 2px solid var(--border-color);
186
+ border-radius: 10px;
187
+ background: var(--bg-primary);
185
188
  color: var(--text-primary);
186
189
  font-size: 14px;
187
- transition: all 0.2s ease;
190
+ font-weight: 500;
191
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
192
+ cursor: pointer;
193
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
194
+ }
195
+ .dashboard-date-input:hover {
196
+ border-color: var(--accent-color);
197
+ background: var(--bg-secondary);
198
+ transform: translateY(-1px);
199
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
188
200
  }
189
201
  .dashboard-date-input:focus {
190
202
  outline: none;
191
203
  border-color: var(--accent-color);
192
- box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.15);
204
+ background: var(--bg-secondary);
205
+ box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.15), 0 4px 8px rgba(0, 0, 0, 0.1);
206
+ transform: translateY(-1px);
207
+ }
208
+ .dashboard-date-presets {
209
+ flex: 1;
210
+ display: flex;
211
+ flex-direction: column;
212
+ gap: 8px;
213
+ }
214
+ .dashboard-presets-label {
215
+ font-size: 12px;
216
+ color: var(--text-secondary);
217
+ font-weight: 600;
218
+ text-transform: uppercase;
219
+ letter-spacing: 0.5px;
220
+ }
221
+ .dashboard-presets-select {
222
+ padding: 10px 14px;
223
+ border: 2px solid var(--border-color);
224
+ border-radius: 10px;
225
+ background: var(--bg-tertiary);
226
+ color: var(--text-primary);
227
+ font-size: 14px;
228
+ font-weight: 500;
229
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
230
+ cursor: pointer;
231
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
232
+ appearance: none;
233
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 9L1 4h10z'/%3E%3C/svg%3E");
234
+ background-repeat: no-repeat;
235
+ background-position: right 12px center;
236
+ padding-right: 36px;
237
+ }
238
+ .dashboard-presets-select:hover {
239
+ border-color: var(--accent-color);
240
+ background-color: var(--bg-secondary);
241
+ transform: translateY(-1px);
242
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
243
+ }
244
+ .dashboard-presets-select:focus {
245
+ outline: none;
246
+ border-color: var(--accent-color);
247
+ background-color: var(--bg-secondary);
248
+ box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.15), 0 4px 8px rgba(0, 0, 0, 0.1);
249
+ transform: translateY(-1px);
250
+ }
251
+ .dashboard-presets-select option {
252
+ padding: 8px;
253
+ background: var(--bg-secondary);
254
+ color: var(--text-primary);
193
255
  }
194
256
 
195
257
  /* Responsive Design */
@@ -218,10 +280,10 @@
218
280
  }
219
281
  .dashboard-date-range {
220
282
  flex-direction: column;
221
- gap: 12px;
222
- padding: 12px 16px;
283
+ gap: 16px;
223
284
  }
224
- .dashboard-date-item {
285
+ .dashboard-date-item,
286
+ .dashboard-date-presets {
225
287
  width: 100%;
226
288
  }
227
289
  }