codex 1.12.7__tar.gz → 2.0.0a1__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 (1944) hide show
  1. codex-2.0.0a1/NEWS.md +2188 -0
  2. codex-2.0.0a1/PKG-INFO +1041 -0
  3. codex-2.0.0a1/README.md +985 -0
  4. codex-2.0.0a1/bin/benchmark-opds.sh +17 -0
  5. codex-2.0.0a1/bin/ci-download-dist-if-identical.sh +38 -0
  6. codex-2.0.0a1/bin/cleanup-pypi-alpha.sh +31 -0
  7. codex-2.0.0a1/bin/delete-files.sh +13 -0
  8. codex-2.0.0a1/bin/dev.sh +88 -0
  9. codex-2.0.0a1/bin/docker-tag-latest.sh +40 -0
  10. codex-2.0.0a1/bin/fix-docker.sh +11 -0
  11. codex-2.0.0a1/bin/fix-sh.sh +7 -0
  12. codex-2.0.0a1/bin/ghcr-prune-alphas.sh +224 -0
  13. codex-2.0.0a1/bin/lint-ci.sh +11 -0
  14. codex-2.0.0a1/bin/lint-complexity.sh +10 -0
  15. codex-2.0.0a1/bin/lint-darwin.sh +10 -0
  16. codex-2.0.0a1/bin/lint-docker.sh +12 -0
  17. codex-2.0.0a1/bin/lint-sh.sh +8 -0
  18. codex-2.0.0a1/bin/prettier-nginx.sh +7 -0
  19. codex-2.0.0a1/bin/remark-for-claude.sh +7 -0
  20. codex-2.0.0a1/bin/sort-ignore.sh +10 -0
  21. codex-2.0.0a1/bin/type-python.sh +9 -0
  22. codex-2.0.0a1/bin/vendor-diff-package.sh +34 -0
  23. codex-2.0.0a1/bin/version-node.sh +15 -0
  24. codex-2.0.0a1/bin/version-python.sh +9 -0
  25. codex-2.0.0a1/bun.lock +1252 -0
  26. codex-2.0.0a1/codex/applications/websocket.py +22 -0
  27. codex-2.0.0a1/codex/choices/admin.py +74 -0
  28. codex-2.0.0a1/codex/choices/browser.py +708 -0
  29. codex-2.0.0a1/codex/choices/choices_to_json.py +194 -0
  30. codex-2.0.0a1/codex/choices/jobs.py +441 -0
  31. codex-2.0.0a1/codex/choices/notifications.py +41 -0
  32. codex-2.0.0a1/codex/choices/statii.py +46 -0
  33. codex-2.0.0a1/codex/choices/tagging.py +227 -0
  34. codex-2.0.0a1/codex/collection.py +95 -0
  35. codex-2.0.0a1/codex/librarian/bookmark/latest_version.py +63 -0
  36. codex-2.0.0a1/codex/librarian/covers/purge.py +115 -0
  37. codex-2.0.0a1/codex/librarian/fs/filters.py +96 -0
  38. codex-2.0.0a1/codex/librarian/fs/poller/poller.py +328 -0
  39. codex-2.0.0a1/codex/librarian/fs/poller/snapshot.py +211 -0
  40. codex-2.0.0a1/codex/librarian/fs/watcher/dirs.py +81 -0
  41. codex-2.0.0a1/codex/librarian/fs/watcher/events.py +104 -0
  42. codex-2.0.0a1/codex/librarian/fs/watcher/move.py +131 -0
  43. codex-2.0.0a1/codex/librarian/fs/watcher/watcher.py +199 -0
  44. codex-2.0.0a1/codex/librarian/librariand.py +212 -0
  45. codex-2.0.0a1/codex/librarian/memory.py +72 -0
  46. codex-2.0.0a1/codex/librarian/notifier/tasks.py +61 -0
  47. codex-2.0.0a1/codex/librarian/onlinetag/__init__.py +1 -0
  48. codex-2.0.0a1/codex/librarian/onlinetag/credential_validator.py +101 -0
  49. codex-2.0.0a1/codex/librarian/onlinetag/onlinetagd.py +72 -0
  50. codex-2.0.0a1/codex/librarian/onlinetag/session_cache.py +90 -0
  51. codex-2.0.0a1/codex/librarian/onlinetag/session_manager.py +369 -0
  52. codex-2.0.0a1/codex/librarian/onlinetag/session_state.py +56 -0
  53. codex-2.0.0a1/codex/librarian/onlinetag/status.py +31 -0
  54. codex-2.0.0a1/codex/librarian/onlinetag/tag_pass_runner.py +150 -0
  55. codex-2.0.0a1/codex/librarian/onlinetag/tasks.py +47 -0
  56. codex-2.0.0a1/codex/librarian/scribe/importer/const.py +427 -0
  57. codex-2.0.0a1/codex/librarian/scribe/importer/create/comics.py +208 -0
  58. codex-2.0.0a1/codex/librarian/scribe/importer/create/const.py +131 -0
  59. codex-2.0.0a1/codex/librarian/scribe/importer/create/covers.py +111 -0
  60. codex-2.0.0a1/codex/librarian/scribe/importer/create/folders.py +98 -0
  61. codex-2.0.0a1/codex/librarian/scribe/importer/create/foreign_keys.py +309 -0
  62. codex-2.0.0a1/codex/librarian/scribe/importer/create/link_fks.py +88 -0
  63. codex-2.0.0a1/codex/librarian/scribe/importer/delete/__init__.py +30 -0
  64. codex-2.0.0a1/codex/librarian/scribe/importer/delete/comics.py +87 -0
  65. codex-2.0.0a1/codex/librarian/scribe/importer/delete/folders.py +34 -0
  66. codex-2.0.0a1/codex/librarian/scribe/importer/init.py +355 -0
  67. codex-2.0.0a1/codex/librarian/scribe/importer/link/const.py +33 -0
  68. codex-2.0.0a1/codex/librarian/scribe/importer/link/covers.py +17 -0
  69. codex-2.0.0a1/codex/librarian/scribe/importer/moved/covers.py +88 -0
  70. codex-2.0.0a1/codex/librarian/scribe/importer/query/filters.py +61 -0
  71. codex-2.0.0a1/codex/librarian/scribe/importer/query/links_fk.py +123 -0
  72. codex-2.0.0a1/codex/librarian/scribe/importer/query/links_m2m.py +135 -0
  73. codex-2.0.0a1/codex/librarian/scribe/importer/query/update_comics.py +69 -0
  74. codex-2.0.0a1/codex/librarian/scribe/importer/read/aggregate_path.py +109 -0
  75. codex-2.0.0a1/codex/librarian/scribe/importer/read/const.py +135 -0
  76. codex-2.0.0a1/codex/librarian/scribe/importer/read/extract.py +300 -0
  77. codex-2.0.0a1/codex/librarian/scribe/importer/read/folders.py +41 -0
  78. codex-2.0.0a1/codex/librarian/scribe/importer/read/foreign_keys.py +161 -0
  79. codex-2.0.0a1/codex/librarian/scribe/importer/read/many_to_many.py +283 -0
  80. codex-2.0.0a1/codex/librarian/scribe/janitor/adopt_folders.py +120 -0
  81. codex-2.0.0a1/codex/librarian/scribe/janitor/cleanup.py +482 -0
  82. codex-2.0.0a1/codex/librarian/scribe/janitor/failed_imports.py +30 -0
  83. codex-2.0.0a1/codex/librarian/scribe/janitor/janitor.py +171 -0
  84. codex-2.0.0a1/codex/librarian/scribe/janitor/status.py +194 -0
  85. codex-2.0.0a1/codex/librarian/scribe/janitor/tasks.py +87 -0
  86. codex-2.0.0a1/codex/librarian/scribe/janitor/update.py +91 -0
  87. codex-2.0.0a1/codex/librarian/scribe/janitor/vacuum.py +171 -0
  88. codex-2.0.0a1/codex/librarian/scribe/lazy_importer.py +50 -0
  89. codex-2.0.0a1/codex/librarian/scribe/priority.py +83 -0
  90. codex-2.0.0a1/codex/librarian/scribe/scribed.py +163 -0
  91. codex-2.0.0a1/codex/librarian/scribe/status.py +30 -0
  92. codex-2.0.0a1/codex/librarian/scribe/tag_writer.py +151 -0
  93. codex-2.0.0a1/codex/librarian/scribe/tagwrite_errors.py +56 -0
  94. codex-2.0.0a1/codex/librarian/scribe/tasks.py +61 -0
  95. codex-2.0.0a1/codex/librarian/scribe/timestamp_update.py +132 -0
  96. codex-2.0.0a1/codex/librarian/telemeter/scheduled_time.py +69 -0
  97. codex-2.0.0a1/codex/librarian/telemeter/stats.py +202 -0
  98. codex-2.0.0a1/codex/librarian/telemeter/telemeter.py +86 -0
  99. codex-2.0.0a1/codex/mail.py +59 -0
  100. codex-2.0.0a1/codex/management/__init__.py +1 -0
  101. codex-2.0.0a1/codex/management/commands/__init__.py +1 -0
  102. codex-2.0.0a1/codex/management/commands/restore_user_data.py +60 -0
  103. codex-2.0.0a1/codex/migrations/0034_comicbox2.py +792 -0
  104. codex-2.0.0a1/codex/migrations/0038_settings_tables.py +991 -0
  105. codex-2.0.0a1/codex/migrations/0039_metron_age_rating_default_view_and_performance.py +1092 -0
  106. codex-2.0.0a1/codex/migrations/0042_browser_table_view_and_favorites.py +274 -0
  107. codex-2.0.0a1/codex/migrations/0043_comicbox_tagging_defaults.py +1090 -0
  108. codex-2.0.0a1/codex/models/__init__.py +14 -0
  109. codex-2.0.0a1/codex/models/admin.py +274 -0
  110. codex-2.0.0a1/codex/models/collections.py +214 -0
  111. codex-2.0.0a1/codex/models/comic.py +411 -0
  112. codex-2.0.0a1/codex/models/favorite.py +66 -0
  113. codex-2.0.0a1/codex/models/fields.py +137 -0
  114. codex-2.0.0a1/codex/models/library.py +67 -0
  115. codex-2.0.0a1/codex/models/named.py +180 -0
  116. codex-2.0.0a1/codex/models/paths.py +156 -0
  117. codex-2.0.0a1/codex/models/settings.py +583 -0
  118. codex-2.0.0a1/codex/serializers/admin/custom_cover.py +106 -0
  119. codex-2.0.0a1/codex/serializers/admin/email.py +73 -0
  120. codex-2.0.0a1/codex/serializers/admin/flags.py +57 -0
  121. codex-2.0.0a1/codex/serializers/admin/groups.py +69 -0
  122. codex-2.0.0a1/codex/serializers/admin/libraries.py +116 -0
  123. codex-2.0.0a1/codex/serializers/admin/stats.py +131 -0
  124. codex-2.0.0a1/codex/serializers/admin/tagging.py +145 -0
  125. codex-2.0.0a1/codex/serializers/admin/throttle.py +25 -0
  126. codex-2.0.0a1/codex/serializers/admin/users.py +92 -0
  127. codex-2.0.0a1/codex/serializers/auth.py +141 -0
  128. codex-2.0.0a1/codex/serializers/browser/metadata.py +243 -0
  129. codex-2.0.0a1/codex/serializers/browser/mixins.py +76 -0
  130. codex-2.0.0a1/codex/serializers/browser/mtime.py +23 -0
  131. codex-2.0.0a1/codex/serializers/browser/page.py +323 -0
  132. codex-2.0.0a1/codex/serializers/browser/settings.py +243 -0
  133. codex-2.0.0a1/codex/serializers/fields/__init__.py +37 -0
  134. codex-2.0.0a1/codex/serializers/fields/collection.py +19 -0
  135. codex-2.0.0a1/codex/serializers/fields/reader.py +33 -0
  136. codex-2.0.0a1/codex/serializers/models/collections.py +54 -0
  137. codex-2.0.0a1/codex/serializers/models/comic.py +84 -0
  138. codex-2.0.0a1/codex/serializers/models/named.py +269 -0
  139. codex-2.0.0a1/codex/serializers/opds/v1.py +73 -0
  140. codex-2.0.0a1/codex/serializers/opds/v2/progression.py +43 -0
  141. codex-2.0.0a1/codex/serializers/opds/v2/publication.py +162 -0
  142. codex-2.0.0a1/codex/serializers/reader.py +148 -0
  143. codex-2.0.0a1/codex/serializers/route.py +81 -0
  144. codex-2.0.0a1/codex/settings/__init__.py +1100 -0
  145. codex-2.0.0a1/codex/settings/codex.toml.default +166 -0
  146. codex-2.0.0a1/codex/settings/config.py +159 -0
  147. codex-2.0.0a1/codex/settings/db.py +207 -0
  148. codex-2.0.0a1/codex/settings/logging.py +154 -0
  149. codex-2.0.0a1/codex/settings/secret_key.py +28 -0
  150. codex-2.0.0a1/codex/signals/django_signals.py +73 -0
  151. codex-2.0.0a1/codex/startup/__init__.py +246 -0
  152. codex-2.0.0a1/codex/startup/db.py +244 -0
  153. codex-2.0.0a1/codex/startup/loguru.py +100 -0
  154. codex-2.0.0a1/codex/startup/registration.py +41 -0
  155. codex-2.0.0a1/codex/static/assets/VCard-BCYbpv-w.css +1 -0
  156. codex-2.0.0a1/codex/static/assets/VCard-BCYbpv-w.css.br +0 -0
  157. codex-2.0.0a1/codex/static/assets/VCard-BCYbpv-w.css.gz +0 -0
  158. codex-2.0.0a1/codex/static/assets/VCard-ByYBI7Af.js +1 -0
  159. codex-2.0.0a1/codex/static/assets/VCard-ByYBI7Af.js.br +0 -0
  160. codex-2.0.0a1/codex/static/assets/VCard-ByYBI7Af.js.gz +0 -0
  161. codex-2.0.0a1/codex/static/assets/VCheckbox-jBmatnGy.js +1 -0
  162. codex-2.0.0a1/codex/static/assets/VCheckbox-jBmatnGy.js.br +0 -0
  163. codex-2.0.0a1/codex/static/assets/VCheckbox-jBmatnGy.js.gz +0 -0
  164. codex-2.0.0a1/codex/static/assets/VChip-DYEA3aEu.css +1 -0
  165. codex-2.0.0a1/codex/static/assets/VChip-DYEA3aEu.css.br +0 -0
  166. codex-2.0.0a1/codex/static/assets/VChip-DYEA3aEu.css.gz +0 -0
  167. codex-2.0.0a1/codex/static/assets/VChip-r_d6JTB9.js +1 -0
  168. codex-2.0.0a1/codex/static/assets/VChip-r_d6JTB9.js.br +0 -0
  169. codex-2.0.0a1/codex/static/assets/VChip-r_d6JTB9.js.gz +0 -0
  170. codex-2.0.0a1/codex/static/assets/VCombobox-BzeE6aNK.js +2 -0
  171. codex-2.0.0a1/codex/static/assets/VCombobox-BzeE6aNK.js.br +0 -0
  172. codex-2.0.0a1/codex/static/assets/VCombobox-BzeE6aNK.js.gz +0 -0
  173. codex-2.0.0a1/codex/static/assets/VExpansionPanels-DHpvb_Iz.js +1 -0
  174. codex-2.0.0a1/codex/static/assets/VExpansionPanels-DHpvb_Iz.js.br +0 -0
  175. codex-2.0.0a1/codex/static/assets/VExpansionPanels-DHpvb_Iz.js.gz +0 -0
  176. codex-2.0.0a1/codex/static/assets/VExpansionPanels-cvCWEkWz.css +1 -0
  177. codex-2.0.0a1/codex/static/assets/VExpansionPanels-cvCWEkWz.css.br +0 -0
  178. codex-2.0.0a1/codex/static/assets/VExpansionPanels-cvCWEkWz.css.gz +0 -0
  179. codex-2.0.0a1/codex/static/assets/VForm-BEQJHGgJ.js +1 -0
  180. codex-2.0.0a1/codex/static/assets/VForm-BEQJHGgJ.js.br +0 -0
  181. codex-2.0.0a1/codex/static/assets/VForm-BEQJHGgJ.js.gz +0 -0
  182. codex-2.0.0a1/codex/static/assets/VProgressCircular-BT8mV8ah.js +10 -0
  183. codex-2.0.0a1/codex/static/assets/VProgressCircular-BT8mV8ah.js.br +0 -0
  184. codex-2.0.0a1/codex/static/assets/VProgressCircular-BT8mV8ah.js.gz +0 -0
  185. codex-2.0.0a1/codex/static/assets/VRadioGroup-DN4olEF5.js +1 -0
  186. codex-2.0.0a1/codex/static/assets/VRadioGroup-DN4olEF5.js.br +0 -0
  187. codex-2.0.0a1/codex/static/assets/VRadioGroup-DN4olEF5.js.gz +0 -0
  188. codex-2.0.0a1/codex/static/assets/VSelect-ADVcmNWY.css +1 -0
  189. codex-2.0.0a1/codex/static/assets/VSelect-ADVcmNWY.css.br +0 -0
  190. codex-2.0.0a1/codex/static/assets/VSelect-ADVcmNWY.css.gz +0 -0
  191. codex-2.0.0a1/codex/static/assets/VSelect-vVxiy1EU.js +1 -0
  192. codex-2.0.0a1/codex/static/assets/VSelect-vVxiy1EU.js.br +0 -0
  193. codex-2.0.0a1/codex/static/assets/VSelect-vVxiy1EU.js.gz +0 -0
  194. codex-2.0.0a1/codex/static/assets/VSelectionControl-CDP6nWYm.js +1 -0
  195. codex-2.0.0a1/codex/static/assets/VSelectionControl-CDP6nWYm.js.br +0 -0
  196. codex-2.0.0a1/codex/static/assets/VSelectionControl-CDP6nWYm.js.gz +0 -0
  197. codex-2.0.0a1/codex/static/assets/VSelectionControl-D9YoCXbC.css +1 -0
  198. codex-2.0.0a1/codex/static/assets/VSelectionControl-D9YoCXbC.css.br +0 -0
  199. codex-2.0.0a1/codex/static/assets/VSelectionControl-D9YoCXbC.css.gz +0 -0
  200. codex-2.0.0a1/codex/static/assets/VTable-CwczWcO5.js +1 -0
  201. codex-2.0.0a1/codex/static/assets/VTable-CwczWcO5.js.br +0 -0
  202. codex-2.0.0a1/codex/static/assets/VTable-CwczWcO5.js.gz +0 -0
  203. codex-2.0.0a1/codex/static/assets/VTable-DJhP1HWb.css +1 -0
  204. codex-2.0.0a1/codex/static/assets/VTable-DJhP1HWb.css.br +0 -0
  205. codex-2.0.0a1/codex/static/assets/VTable-DJhP1HWb.css.gz +0 -0
  206. codex-2.0.0a1/codex/static/assets/VTextField-CFx8vXau.js +1 -0
  207. codex-2.0.0a1/codex/static/assets/VTextField-CFx8vXau.js.br +0 -0
  208. codex-2.0.0a1/codex/static/assets/VTextField-CFx8vXau.js.gz +0 -0
  209. codex-2.0.0a1/codex/static/assets/VTextField-CrvY9Oj5.css +1 -0
  210. codex-2.0.0a1/codex/static/assets/VTextField-CrvY9Oj5.css.br +0 -0
  211. codex-2.0.0a1/codex/static/assets/VTextField-CrvY9Oj5.css.gz +0 -0
  212. codex-2.0.0a1/codex/static/assets/VWindowItem-DScdD-wI.js +1 -0
  213. codex-2.0.0a1/codex/static/assets/VWindowItem-DScdD-wI.js.br +0 -0
  214. codex-2.0.0a1/codex/static/assets/VWindowItem-DScdD-wI.js.gz +0 -0
  215. codex-2.0.0a1/codex/static/assets/action-bar-CykaRyze.js +1 -0
  216. codex-2.0.0a1/codex/static/assets/action-bar-CykaRyze.js.br +2 -0
  217. codex-2.0.0a1/codex/static/assets/action-bar-CykaRyze.js.gz +0 -0
  218. codex-2.0.0a1/codex/static/assets/action-bar-aKyi5Oi9.css +1 -0
  219. codex-2.0.0a1/codex/static/assets/action-bar-aKyi5Oi9.css.br +0 -0
  220. codex-2.0.0a1/codex/static/assets/action-bar-aKyi5Oi9.css.gz +0 -0
  221. codex-2.0.0a1/codex/static/assets/admin-BMaUEPEU.css +1 -0
  222. codex-2.0.0a1/codex/static/assets/admin-BMaUEPEU.css.br +0 -0
  223. codex-2.0.0a1/codex/static/assets/admin-BMaUEPEU.css.gz +0 -0
  224. codex-2.0.0a1/codex/static/assets/admin-DmOuaw7d.js +1 -0
  225. codex-2.0.0a1/codex/static/assets/admin-DmOuaw7d.js.br +0 -0
  226. codex-2.0.0a1/codex/static/assets/admin-DmOuaw7d.js.gz +0 -0
  227. codex-2.0.0a1/codex/static/assets/admin-DqKXNcbg.js +1 -0
  228. codex-2.0.0a1/codex/static/assets/admin-DqKXNcbg.js.br +0 -0
  229. codex-2.0.0a1/codex/static/assets/admin-DqKXNcbg.js.gz +0 -0
  230. codex-2.0.0a1/codex/static/assets/admin-menu-CCwIA63a.js +1 -0
  231. codex-2.0.0a1/codex/static/assets/admin-menu-CCwIA63a.js.br +0 -0
  232. codex-2.0.0a1/codex/static/assets/admin-menu-CCwIA63a.js.gz +0 -0
  233. codex-2.0.0a1/codex/static/assets/admin-menu-DfwlNsF2.css +1 -0
  234. codex-2.0.0a1/codex/static/assets/admin-menu-DfwlNsF2.css.br +0 -0
  235. codex-2.0.0a1/codex/static/assets/admin-menu-DfwlNsF2.css.gz +0 -0
  236. codex-2.0.0a1/codex/static/assets/admin-section-B1HNBc5t.js +1 -0
  237. codex-2.0.0a1/codex/static/assets/admin-section-B1HNBc5t.js.br +0 -0
  238. codex-2.0.0a1/codex/static/assets/admin-section-B1HNBc5t.js.gz +0 -0
  239. codex-2.0.0a1/codex/static/assets/admin-section-C4UIQD_6.css +1 -0
  240. codex-2.0.0a1/codex/static/assets/admin-section-C4UIQD_6.css.br +0 -0
  241. codex-2.0.0a1/codex/static/assets/admin-section-C4UIQD_6.css.gz +0 -0
  242. codex-2.0.0a1/codex/static/assets/admin-settings-button-errors-8nyZgICC.css +1 -0
  243. codex-2.0.0a1/codex/static/assets/admin-settings-button-errors-8nyZgICC.css.br +0 -0
  244. codex-2.0.0a1/codex/static/assets/admin-settings-button-errors-8nyZgICC.css.gz +0 -0
  245. codex-2.0.0a1/codex/static/assets/admin-settings-button-errors-BBGDFbet.js +1 -0
  246. codex-2.0.0a1/codex/static/assets/admin-settings-button-errors-BBGDFbet.js.br +0 -0
  247. codex-2.0.0a1/codex/static/assets/admin-settings-button-errors-BBGDFbet.js.gz +0 -0
  248. codex-2.0.0a1/codex/static/assets/admin-settings-button-progress-B_a99YdW.js +1 -0
  249. codex-2.0.0a1/codex/static/assets/admin-settings-button-progress-B_a99YdW.js.br +0 -0
  250. codex-2.0.0a1/codex/static/assets/admin-settings-button-progress-B_a99YdW.js.gz +0 -0
  251. codex-2.0.0a1/codex/static/assets/admin-settings-button-prompts-BeknDDNu.js +1 -0
  252. codex-2.0.0a1/codex/static/assets/admin-settings-button-prompts-BeknDDNu.js.br +2 -0
  253. codex-2.0.0a1/codex/static/assets/admin-settings-button-prompts-BeknDDNu.js.gz +0 -0
  254. codex-2.0.0a1/codex/static/assets/admin-settings-button-prompts-DqHaoDam.css +1 -0
  255. codex-2.0.0a1/codex/static/assets/admin-settings-button-prompts-DqHaoDam.css.br +0 -0
  256. codex-2.0.0a1/codex/static/assets/admin-settings-button-prompts-DqHaoDam.css.gz +0 -0
  257. codex-2.0.0a1/codex/static/assets/auth-DjmgeHAW.js +1 -0
  258. codex-2.0.0a1/codex/static/assets/auth-DjmgeHAW.js.br +0 -0
  259. codex-2.0.0a1/codex/static/assets/auth-DjmgeHAW.js.gz +0 -0
  260. codex-2.0.0a1/codex/static/assets/base-CtB9eVX-.js +1 -0
  261. codex-2.0.0a1/codex/static/assets/base-CtB9eVX-.js.br +0 -0
  262. codex-2.0.0a1/codex/static/assets/base-CtB9eVX-.js.gz +0 -0
  263. codex-2.0.0a1/codex/static/assets/browser-CDgSvvhP.js +1 -0
  264. codex-2.0.0a1/codex/static/assets/browser-CDgSvvhP.js.br +0 -0
  265. codex-2.0.0a1/codex/static/assets/browser-CDgSvvhP.js.gz +0 -0
  266. codex-2.0.0a1/codex/static/assets/browser-wOyS0g8D.css +1 -0
  267. codex-2.0.0a1/codex/static/assets/browser-wOyS0g8D.css.br +0 -0
  268. codex-2.0.0a1/codex/static/assets/browser-wOyS0g8D.css.gz +0 -0
  269. codex-2.0.0a1/codex/static/assets/clipboard-C42x-R2u.js +1 -0
  270. codex-2.0.0a1/codex/static/assets/clipboard-C42x-R2u.js.br +0 -0
  271. codex-2.0.0a1/codex/static/assets/clipboard-C42x-R2u.js.gz +0 -0
  272. codex-2.0.0a1/codex/static/assets/close-button-4JyOc_TE.js +1 -0
  273. codex-2.0.0a1/codex/static/assets/close-button-4JyOc_TE.js.br +0 -0
  274. codex-2.0.0a1/codex/static/assets/close-button-4JyOc_TE.js.gz +0 -0
  275. codex-2.0.0a1/codex/static/assets/close-button-CEYanHQ4.css +1 -0
  276. codex-2.0.0a1/codex/static/assets/confirm-dialog-D5_8m9zi.css +1 -0
  277. codex-2.0.0a1/codex/static/assets/confirm-dialog-D5_8m9zi.css.br +0 -0
  278. codex-2.0.0a1/codex/static/assets/confirm-dialog-D5_8m9zi.css.gz +0 -0
  279. codex-2.0.0a1/codex/static/assets/confirm-dialog-DYv9lzYe.js +1 -0
  280. codex-2.0.0a1/codex/static/assets/confirm-dialog-DYv9lzYe.js.br +0 -0
  281. codex-2.0.0a1/codex/static/assets/confirm-dialog-DYv9lzYe.js.gz +0 -0
  282. codex-2.0.0a1/codex/static/assets/custom-covers-tab-B9snxWCh.js +1 -0
  283. codex-2.0.0a1/codex/static/assets/custom-covers-tab-B9snxWCh.js.br +0 -0
  284. codex-2.0.0a1/codex/static/assets/custom-covers-tab-B9snxWCh.js.gz +0 -0
  285. codex-2.0.0a1/codex/static/assets/custom-covers-tab-_wL0WYqc.css +1 -0
  286. codex-2.0.0a1/codex/static/assets/custom-covers-tab-_wL0WYqc.css.br +0 -0
  287. codex-2.0.0a1/codex/static/assets/custom-covers-tab-_wL0WYqc.css.gz +0 -0
  288. codex-2.0.0a1/codex/static/assets/datetime-column-DDmVeGT3.js +1 -0
  289. codex-2.0.0a1/codex/static/assets/datetime-column-DDmVeGT3.js.br +2 -0
  290. codex-2.0.0a1/codex/static/assets/datetime-column-DDmVeGT3.js.gz +0 -0
  291. codex-2.0.0a1/codex/static/assets/delete-row-dialog-BQyRHYO8.js +1 -0
  292. codex-2.0.0a1/codex/static/assets/delete-row-dialog-BQyRHYO8.js.br +0 -0
  293. codex-2.0.0a1/codex/static/assets/delete-row-dialog-BQyRHYO8.js.gz +0 -0
  294. codex-2.0.0a1/codex/static/assets/delete-row-dialog-CH0WB-vX.css +1 -0
  295. codex-2.0.0a1/codex/static/assets/delete-row-dialog-CH0WB-vX.css.br +0 -0
  296. codex-2.0.0a1/codex/static/assets/delete-row-dialog-CH0WB-vX.css.gz +0 -0
  297. codex-2.0.0a1/codex/static/assets/edit-panel-BUDPIQgw.css +1 -0
  298. codex-2.0.0a1/codex/static/assets/edit-panel-BUDPIQgw.css.br +0 -0
  299. codex-2.0.0a1/codex/static/assets/edit-panel-BUDPIQgw.css.gz +0 -0
  300. codex-2.0.0a1/codex/static/assets/edit-panel-Dkm7UgJy.js +1 -0
  301. codex-2.0.0a1/codex/static/assets/edit-panel-Dkm7UgJy.js.br +0 -0
  302. codex-2.0.0a1/codex/static/assets/edit-panel-Dkm7UgJy.js.gz +0 -0
  303. codex-2.0.0a1/codex/static/assets/email-tab-9vY4EQIt.css +1 -0
  304. codex-2.0.0a1/codex/static/assets/email-tab-9vY4EQIt.css.br +0 -0
  305. codex-2.0.0a1/codex/static/assets/email-tab-9vY4EQIt.css.gz +0 -0
  306. codex-2.0.0a1/codex/static/assets/email-tab-Cha3LXiA.js +1 -0
  307. codex-2.0.0a1/codex/static/assets/email-tab-Cha3LXiA.js.br +0 -0
  308. codex-2.0.0a1/codex/static/assets/email-tab-Cha3LXiA.js.gz +0 -0
  309. codex-2.0.0a1/codex/static/assets/expand-toggle-Ce6U_Lna.js +1 -0
  310. codex-2.0.0a1/codex/static/assets/expand-toggle-Ce6U_Lna.js.br +0 -0
  311. codex-2.0.0a1/codex/static/assets/expand-toggle-Ce6U_Lna.js.gz +0 -0
  312. codex-2.0.0a1/codex/static/assets/expand-toggle-DSKe4ham.css +1 -0
  313. codex-2.0.0a1/codex/static/assets/expand-toggle-DSKe4ham.css.br +0 -0
  314. codex-2.0.0a1/codex/static/assets/expand-toggle-DSKe4ham.css.gz +0 -0
  315. codex-2.0.0a1/codex/static/assets/flag-card-C3uGjSqH.js +1 -0
  316. codex-2.0.0a1/codex/static/assets/flag-card-C3uGjSqH.js.br +0 -0
  317. codex-2.0.0a1/codex/static/assets/flag-card-C3uGjSqH.js.gz +0 -0
  318. codex-2.0.0a1/codex/static/assets/flag-card-Usnel6Y1.css +1 -0
  319. codex-2.0.0a1/codex/static/assets/flag-card-Usnel6Y1.css.br +0 -0
  320. codex-2.0.0a1/codex/static/assets/flag-card-Usnel6Y1.css.gz +0 -0
  321. codex-2.0.0a1/codex/static/assets/forwardRefs-CvzvePTj.css +1 -0
  322. codex-2.0.0a1/codex/static/assets/forwardRefs-CvzvePTj.css.br +0 -0
  323. codex-2.0.0a1/codex/static/assets/forwardRefs-CvzvePTj.css.gz +0 -0
  324. codex-2.0.0a1/codex/static/assets/forwardRefs-U3sKIrMR.js +1 -0
  325. codex-2.0.0a1/codex/static/assets/forwardRefs-U3sKIrMR.js.br +0 -0
  326. codex-2.0.0a1/codex/static/assets/forwardRefs-U3sKIrMR.js.gz +0 -0
  327. codex-2.0.0a1/codex/static/assets/group-tab-D8pysP7I.js +1 -0
  328. codex-2.0.0a1/codex/static/assets/group-tab-D8pysP7I.js.br +0 -0
  329. codex-2.0.0a1/codex/static/assets/group-tab-D8pysP7I.js.gz +0 -0
  330. codex-2.0.0a1/codex/static/assets/group-tab-DuIq7Kai.css +1 -0
  331. codex-2.0.0a1/codex/static/assets/group-tab-DuIq7Kai.css.br +0 -0
  332. codex-2.0.0a1/codex/static/assets/group-tab-DuIq7Kai.css.gz +0 -0
  333. codex-2.0.0a1/codex/static/assets/http-error-BidBitzp.js +1 -0
  334. codex-2.0.0a1/codex/static/assets/http-error-BidBitzp.js.br +0 -0
  335. codex-2.0.0a1/codex/static/assets/http-error-BidBitzp.js.gz +0 -0
  336. codex-2.0.0a1/codex/static/assets/job-tab-BaSK0l0z.js +1 -0
  337. codex-2.0.0a1/codex/static/assets/job-tab-BaSK0l0z.js.br +0 -0
  338. codex-2.0.0a1/codex/static/assets/job-tab-BaSK0l0z.js.gz +0 -0
  339. codex-2.0.0a1/codex/static/assets/job-tab-BvmDWqzr.css +1 -0
  340. codex-2.0.0a1/codex/static/assets/job-tab-BvmDWqzr.css.br +0 -0
  341. codex-2.0.0a1/codex/static/assets/job-tab-BvmDWqzr.css.gz +0 -0
  342. codex-2.0.0a1/codex/static/assets/library-tab-CPGSZEcQ.js +1 -0
  343. codex-2.0.0a1/codex/static/assets/library-tab-CPGSZEcQ.js.br +0 -0
  344. codex-2.0.0a1/codex/static/assets/library-tab-CPGSZEcQ.js.gz +0 -0
  345. codex-2.0.0a1/codex/static/assets/library-tab-NdSulWoZ.css +1 -0
  346. codex-2.0.0a1/codex/static/assets/library-tab-NdSulWoZ.css.br +0 -0
  347. codex-2.0.0a1/codex/static/assets/library-tab-NdSulWoZ.css.gz +0 -0
  348. codex-2.0.0a1/codex/static/assets/main-DA6DuzZj.css +1 -0
  349. codex-2.0.0a1/codex/static/assets/main-DA6DuzZj.css.br +0 -0
  350. codex-2.0.0a1/codex/static/assets/main-DA6DuzZj.css.gz +0 -0
  351. codex-2.0.0a1/codex/static/assets/main-DHY6NEXf.js +6 -0
  352. codex-2.0.0a1/codex/static/assets/main-DHY6NEXf.js.br +0 -0
  353. codex-2.0.0a1/codex/static/assets/main-DHY6NEXf.js.gz +0 -0
  354. codex-2.0.0a1/codex/static/assets/online-tag-BkYyEC_J.js +1 -0
  355. codex-2.0.0a1/codex/static/assets/online-tag-BkYyEC_J.js.br +0 -0
  356. codex-2.0.0a1/codex/static/assets/online-tag-BkYyEC_J.js.gz +0 -0
  357. codex-2.0.0a1/codex/static/assets/pagination-toolbar-CsPQbiWa.js +2 -0
  358. codex-2.0.0a1/codex/static/assets/pagination-toolbar-CsPQbiWa.js.br +0 -0
  359. codex-2.0.0a1/codex/static/assets/pagination-toolbar-CsPQbiWa.js.gz +0 -0
  360. codex-2.0.0a1/codex/static/assets/pagination-toolbar-iRN84Lr0.css +1 -0
  361. codex-2.0.0a1/codex/static/assets/pagination-toolbar-iRN84Lr0.css.br +0 -0
  362. codex-2.0.0a1/codex/static/assets/pagination-toolbar-iRN84Lr0.css.gz +0 -0
  363. codex-2.0.0a1/codex/static/assets/pdf-doc-BLgNiuH-.js +378 -0
  364. codex-2.0.0a1/codex/static/assets/pdf-doc-BLgNiuH-.js.br +0 -0
  365. codex-2.0.0a1/codex/static/assets/pdf-doc-BLgNiuH-.js.gz +0 -0
  366. codex-2.0.0a1/codex/static/assets/prompt-popup-CEgl_EVI.js +2 -0
  367. codex-2.0.0a1/codex/static/assets/prompt-popup-CEgl_EVI.js.br +0 -0
  368. codex-2.0.0a1/codex/static/assets/prompt-popup-CEgl_EVI.js.gz +0 -0
  369. codex-2.0.0a1/codex/static/assets/prompt-popup-Cgn4Tl0B.css +1 -0
  370. codex-2.0.0a1/codex/static/assets/prompt-popup-Cgn4Tl0B.css.br +0 -0
  371. codex-2.0.0a1/codex/static/assets/prompt-popup-Cgn4Tl0B.css.gz +0 -0
  372. codex-2.0.0a1/codex/static/assets/reader-CdzLPVKx.css +1 -0
  373. codex-2.0.0a1/codex/static/assets/reader-CdzLPVKx.css.br +0 -0
  374. codex-2.0.0a1/codex/static/assets/reader-CdzLPVKx.css.gz +0 -0
  375. codex-2.0.0a1/codex/static/assets/reader-NSj6aW54.js +2 -0
  376. codex-2.0.0a1/codex/static/assets/reader-NSj6aW54.js.br +0 -0
  377. codex-2.0.0a1/codex/static/assets/reader-NSj6aW54.js.gz +0 -0
  378. codex-2.0.0a1/codex/static/assets/relation-chips-BW9xLO0r.js +1 -0
  379. codex-2.0.0a1/codex/static/assets/relation-chips-BW9xLO0r.js.br +0 -0
  380. codex-2.0.0a1/codex/static/assets/relation-chips-BW9xLO0r.js.gz +0 -0
  381. codex-2.0.0a1/codex/static/assets/relation-chips-CVzPLks2.css +1 -0
  382. codex-2.0.0a1/codex/static/assets/relation-chips-CVzPLks2.css.br +1 -0
  383. codex-2.0.0a1/codex/static/assets/relation-chips-CVzPLks2.css.gz +0 -0
  384. codex-2.0.0a1/codex/static/assets/reset-password-confirm-ByPxowqs.css +1 -0
  385. codex-2.0.0a1/codex/static/assets/reset-password-confirm-ByPxowqs.css.br +0 -0
  386. codex-2.0.0a1/codex/static/assets/reset-password-confirm-ByPxowqs.css.gz +0 -0
  387. codex-2.0.0a1/codex/static/assets/reset-password-confirm-DlItYdhc.js +1 -0
  388. codex-2.0.0a1/codex/static/assets/reset-password-confirm-DlItYdhc.js.br +0 -0
  389. codex-2.0.0a1/codex/static/assets/reset-password-confirm-DlItYdhc.js.gz +0 -0
  390. codex-2.0.0a1/codex/static/assets/restore-tab-CvlIQqI-.js +3 -0
  391. codex-2.0.0a1/codex/static/assets/restore-tab-CvlIQqI-.js.br +0 -0
  392. codex-2.0.0a1/codex/static/assets/restore-tab-CvlIQqI-.js.gz +0 -0
  393. codex-2.0.0a1/codex/static/assets/restore-tab-x0r0JIjS.css +1 -0
  394. codex-2.0.0a1/codex/static/assets/restore-tab-x0r0JIjS.css.br +0 -0
  395. codex-2.0.0a1/codex/static/assets/restore-tab-x0r0JIjS.css.gz +0 -0
  396. codex-2.0.0a1/codex/static/assets/settings-tab-C3v6mhJb.css +1 -0
  397. codex-2.0.0a1/codex/static/assets/settings-tab-C3v6mhJb.css.br +0 -0
  398. codex-2.0.0a1/codex/static/assets/settings-tab-C3v6mhJb.css.gz +0 -0
  399. codex-2.0.0a1/codex/static/assets/settings-tab-CQjDWKVl.js +1 -0
  400. codex-2.0.0a1/codex/static/assets/settings-tab-CQjDWKVl.js.br +0 -0
  401. codex-2.0.0a1/codex/static/assets/settings-tab-CQjDWKVl.js.gz +0 -0
  402. codex-2.0.0a1/codex/static/assets/ssrBoot-r_MQBFjc.js +1 -0
  403. codex-2.0.0a1/codex/static/assets/ssrBoot-r_MQBFjc.js.br +0 -0
  404. codex-2.0.0a1/codex/static/assets/ssrBoot-r_MQBFjc.js.gz +0 -0
  405. codex-2.0.0a1/codex/static/assets/stats-tab-BoLJfSqD.css +1 -0
  406. codex-2.0.0a1/codex/static/assets/stats-tab-BoLJfSqD.css.br +0 -0
  407. codex-2.0.0a1/codex/static/assets/stats-tab-BoLJfSqD.css.gz +0 -0
  408. codex-2.0.0a1/codex/static/assets/stats-tab-C4uRlDdk.js +1 -0
  409. codex-2.0.0a1/codex/static/assets/stats-tab-C4uRlDdk.js.br +0 -0
  410. codex-2.0.0a1/codex/static/assets/stats-tab-C4uRlDdk.js.gz +0 -0
  411. codex-2.0.0a1/codex/static/assets/submit-footer-sEIlugu5.js +1 -0
  412. codex-2.0.0a1/codex/static/assets/submit-footer-sEIlugu5.js.br +0 -0
  413. codex-2.0.0a1/codex/static/assets/submit-footer-sEIlugu5.js.gz +0 -0
  414. codex-2.0.0a1/codex/static/assets/tagging-choices-BH2u4elJ.js +1 -0
  415. codex-2.0.0a1/codex/static/assets/tagging-choices-BH2u4elJ.js.br +0 -0
  416. codex-2.0.0a1/codex/static/assets/tagging-choices-BH2u4elJ.js.gz +0 -0
  417. codex-2.0.0a1/codex/static/assets/tagging-tab-B0C_v2DD.css +1 -0
  418. codex-2.0.0a1/codex/static/assets/tagging-tab-B0C_v2DD.css.br +0 -0
  419. codex-2.0.0a1/codex/static/assets/tagging-tab-B0C_v2DD.css.gz +0 -0
  420. codex-2.0.0a1/codex/static/assets/tagging-tab-DPObxxh7.js +1 -0
  421. codex-2.0.0a1/codex/static/assets/tagging-tab-DPObxxh7.js.br +0 -0
  422. codex-2.0.0a1/codex/static/assets/tagging-tab-DPObxxh7.js.gz +0 -0
  423. codex-2.0.0a1/codex/static/assets/tooltip-Md8djmjQ.js +1 -0
  424. codex-2.0.0a1/codex/static/assets/tooltip-Md8djmjQ.js.br +0 -0
  425. codex-2.0.0a1/codex/static/assets/tooltip-Md8djmjQ.js.gz +0 -0
  426. codex-2.0.0a1/codex/static/assets/unauthorized-DoPdHZ05.css +1 -0
  427. codex-2.0.0a1/codex/static/assets/unauthorized-DoPdHZ05.css.br +0 -0
  428. codex-2.0.0a1/codex/static/assets/unauthorized-DoPdHZ05.css.gz +0 -0
  429. codex-2.0.0a1/codex/static/assets/unauthorized-p-32pwlt.js +1 -0
  430. codex-2.0.0a1/codex/static/assets/unauthorized-p-32pwlt.js.br +0 -0
  431. codex-2.0.0a1/codex/static/assets/unauthorized-p-32pwlt.js.gz +0 -0
  432. codex-2.0.0a1/codex/static/assets/use-now-timer-BafADZdN.js +1 -0
  433. codex-2.0.0a1/codex/static/assets/use-now-timer-BafADZdN.js.br +0 -0
  434. codex-2.0.0a1/codex/static/assets/use-now-timer-BafADZdN.js.gz +0 -0
  435. codex-2.0.0a1/codex/static/assets/user-tab-BHrfMNm5.css +1 -0
  436. codex-2.0.0a1/codex/static/assets/user-tab-BHrfMNm5.css.br +0 -0
  437. codex-2.0.0a1/codex/static/assets/user-tab-BHrfMNm5.css.gz +0 -0
  438. codex-2.0.0a1/codex/static/assets/user-tab-Ypxd3FCn.js +1 -0
  439. codex-2.0.0a1/codex/static/assets/user-tab-Ypxd3FCn.js.br +0 -0
  440. codex-2.0.0a1/codex/static/assets/user-tab-Ypxd3FCn.js.gz +0 -0
  441. codex-2.0.0a1/codex/static/assets/vendor-vue-CMvFUqt2.js +1 -0
  442. codex-2.0.0a1/codex/static/assets/vendor-vue-CMvFUqt2.js.br +0 -0
  443. codex-2.0.0a1/codex/static/assets/vendor-vue-CMvFUqt2.js.gz +0 -0
  444. codex-2.0.0a1/codex/static/manifest.json +1124 -0
  445. codex-2.0.0a1/codex/static/manifest.json.br +0 -0
  446. codex-2.0.0a1/codex/static/manifest.json.gz +0 -0
  447. codex-2.0.0a1/codex/templates/headers-script-globals.html +9 -0
  448. codex-2.0.0a1/codex/templates/opds_v1/index.xml +114 -0
  449. codex-2.0.0a1/codex/templates/opds_v1/opensearch_v1.xml +10 -0
  450. codex-2.0.0a1/codex/templates/rest_registration/register/body.txt +11 -0
  451. codex-2.0.0a1/codex/templates/rest_registration/register/subject.txt +1 -0
  452. codex-2.0.0a1/codex/templates/rest_registration/reset_password/body.html +82 -0
  453. codex-2.0.0a1/codex/templates/rest_registration/reset_password/body.txt +14 -0
  454. codex-2.0.0a1/codex/templates/rest_registration/reset_password/subject.txt +1 -0
  455. codex-2.0.0a1/codex/throttling.py +69 -0
  456. codex-2.0.0a1/codex/urls/api/root.py +12 -0
  457. codex-2.0.0a1/codex/urls/api/v4/__init__.py +32 -0
  458. codex-2.0.0a1/codex/urls/api/v4/admin.py +280 -0
  459. codex-2.0.0a1/codex/urls/api/v4/auth.py +34 -0
  460. codex-2.0.0a1/codex/urls/api/v4/browse.py +86 -0
  461. codex-2.0.0a1/codex/urls/api/v4/comics.py +46 -0
  462. codex-2.0.0a1/codex/urls/api/v4/favorites.py +16 -0
  463. codex-2.0.0a1/codex/urls/api/v4/reader.py +12 -0
  464. codex-2.0.0a1/codex/urls/app.py +50 -0
  465. codex-2.0.0a1/codex/urls/converters.py +45 -0
  466. codex-2.0.0a1/codex/urls/opds/root.py +34 -0
  467. codex-2.0.0a1/codex/urls/opds/v1.py +39 -0
  468. codex-2.0.0a1/codex/urls/opds/v2.py +57 -0
  469. codex-2.0.0a1/codex/urls/root.py +52 -0
  470. codex-2.0.0a1/codex/user_data/__init__.py +1 -0
  471. codex-2.0.0a1/codex/user_data/backups.py +109 -0
  472. codex-2.0.0a1/codex/user_data/dump.py +260 -0
  473. codex-2.0.0a1/codex/user_data/identifiers.py +143 -0
  474. codex-2.0.0a1/codex/user_data/restore.py +690 -0
  475. codex-2.0.0a1/codex/user_data/schema.sql +189 -0
  476. codex-2.0.0a1/codex/user_data/serializers.py +386 -0
  477. codex-2.0.0a1/codex/user_data/store.py +240 -0
  478. codex-2.0.0a1/codex/views/admin/api_key.py +41 -0
  479. codex-2.0.0a1/codex/views/admin/auth.py +59 -0
  480. codex-2.0.0a1/codex/views/admin/custom_cover.py +285 -0
  481. codex-2.0.0a1/codex/views/admin/dump_user_data.py +18 -0
  482. codex-2.0.0a1/codex/views/admin/email.py +144 -0
  483. codex-2.0.0a1/codex/views/admin/failed_imports_seen.py +40 -0
  484. codex-2.0.0a1/codex/views/admin/flag.py +49 -0
  485. codex-2.0.0a1/codex/views/admin/json_api.py +57 -0
  486. codex-2.0.0a1/codex/views/admin/library.py +235 -0
  487. codex-2.0.0a1/codex/views/admin/onlinetag.py +131 -0
  488. codex-2.0.0a1/codex/views/admin/permissions.py +23 -0
  489. codex-2.0.0a1/codex/views/admin/restore_user_data.py +52 -0
  490. codex-2.0.0a1/codex/views/admin/stats.py +106 -0
  491. codex-2.0.0a1/codex/views/admin/tag_write_errors.py +32 -0
  492. codex-2.0.0a1/codex/views/admin/tagging_defaults.py +27 -0
  493. codex-2.0.0a1/codex/views/admin/tagging_validate.py +61 -0
  494. codex-2.0.0a1/codex/views/admin/tagwrite.py +158 -0
  495. codex-2.0.0a1/codex/views/admin/tasks.py +205 -0
  496. codex-2.0.0a1/codex/views/admin/throttle.py +25 -0
  497. codex-2.0.0a1/codex/views/admin/user.py +274 -0
  498. codex-2.0.0a1/codex/views/auth.py +615 -0
  499. codex-2.0.0a1/codex/views/bookmark.py +80 -0
  500. codex-2.0.0a1/codex/views/browser/annotate/bookmark.py +116 -0
  501. codex-2.0.0a1/codex/views/browser/annotate/card.py +117 -0
  502. codex-2.0.0a1/codex/views/browser/annotate/cover.py +128 -0
  503. codex-2.0.0a1/codex/views/browser/annotate/order.py +564 -0
  504. codex-2.0.0a1/codex/views/browser/bookmark.py +96 -0
  505. codex-2.0.0a1/codex/views/browser/breadcrumbs.py +190 -0
  506. codex-2.0.0a1/codex/views/browser/browser.py +419 -0
  507. codex-2.0.0a1/codex/views/browser/collection_mtime.py +174 -0
  508. codex-2.0.0a1/codex/views/browser/columns.py +308 -0
  509. codex-2.0.0a1/codex/views/browser/cover.py +194 -0
  510. codex-2.0.0a1/codex/views/browser/download.py +67 -0
  511. codex-2.0.0a1/codex/views/browser/filters/collection.py +58 -0
  512. codex-2.0.0a1/codex/views/browser/filters/field.py +75 -0
  513. codex-2.0.0a1/codex/views/browser/filters/filter.py +252 -0
  514. codex-2.0.0a1/codex/views/browser/filters/search/field/expression.py +190 -0
  515. codex-2.0.0a1/codex/views/browser/filters/search/parse.py +296 -0
  516. codex-2.0.0a1/codex/views/browser/force_update.py +52 -0
  517. codex-2.0.0a1/codex/views/browser/intersections.py +969 -0
  518. codex-2.0.0a1/codex/views/browser/metadata/__init__.py +118 -0
  519. codex-2.0.0a1/codex/views/browser/metadata/annotate.py +147 -0
  520. codex-2.0.0a1/codex/views/browser/metadata/collection_list.py +44 -0
  521. codex-2.0.0a1/codex/views/browser/metadata/const.py +112 -0
  522. codex-2.0.0a1/codex/views/browser/metadata/copy_intersections.py +90 -0
  523. codex-2.0.0a1/codex/views/browser/metadata/query_intersections.py +152 -0
  524. codex-2.0.0a1/codex/views/browser/mtime.py +52 -0
  525. codex-2.0.0a1/codex/views/browser/order_by.py +228 -0
  526. codex-2.0.0a1/codex/views/browser/page_in_bounds.py +65 -0
  527. codex-2.0.0a1/codex/views/browser/paginate.py +111 -0
  528. codex-2.0.0a1/codex/views/browser/params.py +67 -0
  529. codex-2.0.0a1/codex/views/browser/saved_settings.py +309 -0
  530. codex-2.0.0a1/codex/views/browser/settings.py +184 -0
  531. codex-2.0.0a1/codex/views/browser/title.py +51 -0
  532. codex-2.0.0a1/codex/views/browser/validate.py +198 -0
  533. codex-2.0.0a1/codex/views/const.py +188 -0
  534. codex-2.0.0a1/codex/views/envelope.py +79 -0
  535. codex-2.0.0a1/codex/views/exceptions.py +100 -0
  536. codex-2.0.0a1/codex/views/favorites.py +105 -0
  537. codex-2.0.0a1/codex/views/frontend.py +45 -0
  538. codex-2.0.0a1/codex/views/lazy_import.py +28 -0
  539. codex-2.0.0a1/codex/views/mixins.py +128 -0
  540. codex-2.0.0a1/codex/views/opds/authentication/v1.py +93 -0
  541. codex-2.0.0a1/codex/views/opds/const.py +124 -0
  542. codex-2.0.0a1/codex/views/opds/error.py +71 -0
  543. codex-2.0.0a1/codex/views/opds/feed.py +22 -0
  544. codex-2.0.0a1/codex/views/opds/metadata.py +147 -0
  545. codex-2.0.0a1/codex/views/opds/opensearch/v1.py +51 -0
  546. codex-2.0.0a1/codex/views/opds/route.py +69 -0
  547. codex-2.0.0a1/codex/views/opds/start.py +20 -0
  548. codex-2.0.0a1/codex/views/opds/urls.py +27 -0
  549. codex-2.0.0a1/codex/views/opds/v1/const.py +207 -0
  550. codex-2.0.0a1/codex/views/opds/v1/entry/entry.py +159 -0
  551. codex-2.0.0a1/codex/views/opds/v1/entry/links.py +196 -0
  552. codex-2.0.0a1/codex/views/opds/v1/facets.py +173 -0
  553. codex-2.0.0a1/codex/views/opds/v1/feed.py +236 -0
  554. codex-2.0.0a1/codex/views/opds/v1/links.py +154 -0
  555. codex-2.0.0a1/codex/views/opds/v2/const.py +197 -0
  556. codex-2.0.0a1/codex/views/opds/v2/feed/__init__.py +218 -0
  557. codex-2.0.0a1/codex/views/opds/v2/feed/feed_links.py +141 -0
  558. codex-2.0.0a1/codex/views/opds/v2/feed/groups.py +218 -0
  559. codex-2.0.0a1/codex/views/opds/v2/feed/links.py +152 -0
  560. codex-2.0.0a1/codex/views/opds/v2/feed/publications.py +580 -0
  561. codex-2.0.0a1/codex/views/opds/v2/href.py +63 -0
  562. codex-2.0.0a1/codex/views/opds/v2/manifest.py +409 -0
  563. codex-2.0.0a1/codex/views/opds/v2/progression.py +254 -0
  564. codex-2.0.0a1/codex/views/opds/v2/renderers.py +26 -0
  565. codex-2.0.0a1/codex/views/pagination.py +25 -0
  566. codex-2.0.0a1/codex/views/reader/arcs.py +160 -0
  567. codex-2.0.0a1/codex/views/reader/books.py +240 -0
  568. codex-2.0.0a1/codex/views/reader/params.py +80 -0
  569. codex-2.0.0a1/codex/views/reader/reader.py +49 -0
  570. codex-2.0.0a1/codex/views/reader/settings.py +348 -0
  571. codex-2.0.0a1/codex/views/register.py +87 -0
  572. codex-2.0.0a1/codex/views/reset_password.py +24 -0
  573. codex-2.0.0a1/codex/views/session.py +107 -0
  574. codex-2.0.0a1/codex/views/settings.py +525 -0
  575. codex-2.0.0a1/codex/views/util.py +68 -0
  576. codex-2.0.0a1/codex/views/version.py +52 -0
  577. codex-2.0.0a1/codex/websockets/consumers.py +71 -0
  578. codex-2.0.0a1/codex/websockets/payloads.py +45 -0
  579. codex-2.0.0a1/codex/xz.py +147 -0
  580. codex-2.0.0a1/docs/DOCKER.md +114 -0
  581. codex-2.0.0a1/docs/NEWS.md +2188 -0
  582. codex-2.0.0a1/docs/README.md +985 -0
  583. codex-2.0.0a1/eslint.config.js +82 -0
  584. codex-2.0.0a1/frontend/.eslintcache +1 -0
  585. codex-2.0.0a1/frontend/DESIGN.md +154 -0
  586. codex-2.0.0a1/frontend/bin/fix-sh.sh +7 -0
  587. codex-2.0.0a1/frontend/bin/lint-darwin.sh +10 -0
  588. codex-2.0.0a1/frontend/bin/lint-sh.sh +8 -0
  589. codex-2.0.0a1/frontend/bin/remark-for-claude.sh +7 -0
  590. codex-2.0.0a1/frontend/bin/sort-ignore.sh +10 -0
  591. codex-2.0.0a1/frontend/bin/version-node.sh +15 -0
  592. codex-2.0.0a1/frontend/bun.lock +1145 -0
  593. codex-2.0.0a1/frontend/package.json +55 -0
  594. codex-2.0.0a1/frontend/src/admin.vue +40 -0
  595. codex-2.0.0a1/frontend/src/api/v4/abortable.js +38 -0
  596. codex-2.0.0a1/frontend/src/api/v4/admin.js +230 -0
  597. codex-2.0.0a1/frontend/src/api/v4/auth.js +45 -0
  598. codex-2.0.0a1/frontend/src/api/v4/base.js +72 -0
  599. codex-2.0.0a1/frontend/src/api/v4/browser.js +204 -0
  600. codex-2.0.0a1/frontend/src/api/v4/common.js +88 -0
  601. codex-2.0.0a1/frontend/src/api/v4/favorites.js +11 -0
  602. codex-2.0.0a1/frontend/src/api/v4/notify.js +48 -0
  603. codex-2.0.0a1/frontend/src/api/v4/reader.js +53 -0
  604. codex-2.0.0a1/frontend/src/app.vue +102 -0
  605. codex-2.0.0a1/frontend/src/browser.vue +80 -0
  606. codex-2.0.0a1/frontend/src/choices/admin-flag-choices.json +17 -0
  607. codex-2.0.0a1/frontend/src/choices/admin-jobs.json +417 -0
  608. codex-2.0.0a1/frontend/src/choices/admin-status-titles.json +62 -0
  609. codex-2.0.0a1/frontend/src/choices/browser-choices.json +266 -0
  610. codex-2.0.0a1/frontend/src/choices/browser-defaults.json +52 -0
  611. codex-2.0.0a1/frontend/src/choices/browser-map.json +75 -0
  612. codex-2.0.0a1/frontend/src/choices/browser-table-columns.json +303 -0
  613. codex-2.0.0a1/frontend/src/choices/browser-table-default-columns.json +53 -0
  614. codex-2.0.0a1/frontend/src/choices/format-field-support.json +58 -0
  615. codex-2.0.0a1/frontend/src/choices/format-field-values.json +111 -0
  616. codex-2.0.0a1/frontend/src/choices/identifier-sources.json +66 -0
  617. codex-2.0.0a1/frontend/src/choices/identifier-types.json +58 -0
  618. codex-2.0.0a1/frontend/src/choices/languages.json +738 -0
  619. codex-2.0.0a1/frontend/src/choices/tagging-choices.json +28 -0
  620. codex-2.0.0a1/frontend/src/choices/websocket-messages.json +14 -0
  621. codex-2.0.0a1/frontend/src/components/admin/admin-header.vue +119 -0
  622. codex-2.0.0a1/frontend/src/components/admin/create-update-dialog/create-update-dialog.vue +214 -0
  623. codex-2.0.0a1/frontend/src/components/admin/create-update-dialog/create-update-inputs-mixin.js +60 -0
  624. codex-2.0.0a1/frontend/src/components/admin/create-update-dialog/group-create-update-inputs.vue +99 -0
  625. codex-2.0.0a1/frontend/src/components/admin/create-update-dialog/library-create-update-inputs.vue +121 -0
  626. codex-2.0.0a1/frontend/src/components/admin/create-update-dialog/user-create-update-inputs.vue +153 -0
  627. codex-2.0.0a1/frontend/src/components/admin/drawer/admin-menu.vue +133 -0
  628. codex-2.0.0a1/frontend/src/components/admin/drawer/admin-settings-button-errors.vue +58 -0
  629. codex-2.0.0a1/frontend/src/components/admin/drawer/admin-settings-button-prompts.vue +45 -0
  630. codex-2.0.0a1/frontend/src/components/admin/status-helpers.js +57 -0
  631. codex-2.0.0a1/frontend/src/components/admin/tabs/action-bar.vue +45 -0
  632. codex-2.0.0a1/frontend/src/components/admin/tabs/admin-section.scss +231 -0
  633. codex-2.0.0a1/frontend/src/components/admin/tabs/admin-section.vue +31 -0
  634. codex-2.0.0a1/frontend/src/components/admin/tabs/custom-covers-tab.vue +263 -0
  635. codex-2.0.0a1/frontend/src/components/admin/tabs/design.scss +28 -0
  636. codex-2.0.0a1/frontend/src/components/admin/tabs/email-tab.vue +426 -0
  637. codex-2.0.0a1/frontend/src/components/admin/tabs/expand-toggle.vue +46 -0
  638. codex-2.0.0a1/frontend/src/components/admin/tabs/failed-imports-panel.vue +195 -0
  639. codex-2.0.0a1/frontend/src/components/admin/tabs/flag-card.vue +224 -0
  640. codex-2.0.0a1/frontend/src/components/admin/tabs/flag-descriptions.json +15 -0
  641. codex-2.0.0a1/frontend/src/components/admin/tabs/flag-groups.json +14 -0
  642. codex-2.0.0a1/frontend/src/components/admin/tabs/group-tab.vue +189 -0
  643. codex-2.0.0a1/frontend/src/components/admin/tabs/job-tab.vue +593 -0
  644. codex-2.0.0a1/frontend/src/components/admin/tabs/key-value-table.vue +88 -0
  645. codex-2.0.0a1/frontend/src/components/admin/tabs/library-tab.vue +64 -0
  646. codex-2.0.0a1/frontend/src/components/admin/tabs/library-table.vue +235 -0
  647. codex-2.0.0a1/frontend/src/components/admin/tabs/replace-cover-button.vue +87 -0
  648. codex-2.0.0a1/frontend/src/components/admin/tabs/restore-tab.vue +328 -0
  649. codex-2.0.0a1/frontend/src/components/admin/tabs/settings-tab.vue +137 -0
  650. codex-2.0.0a1/frontend/src/components/admin/tabs/stats-tab.vue +150 -0
  651. codex-2.0.0a1/frontend/src/components/admin/tabs/tag-write-errors-panel.vue +140 -0
  652. codex-2.0.0a1/frontend/src/components/admin/tabs/tagging-tab.vue +600 -0
  653. codex-2.0.0a1/frontend/src/components/admin/tabs/tagging-validation-chip.vue +35 -0
  654. codex-2.0.0a1/frontend/src/components/admin/tabs/throttling-section.vue +175 -0
  655. codex-2.0.0a1/frontend/src/components/admin/tabs/user-tab.vue +298 -0
  656. codex-2.0.0a1/frontend/src/components/auth/auth-menu.vue +52 -0
  657. codex-2.0.0a1/frontend/src/components/auth/auth-token.vue +126 -0
  658. codex-2.0.0a1/frontend/src/components/auth/change-password-dialog.vue +208 -0
  659. codex-2.0.0a1/frontend/src/components/auth/login-dialog.vue +229 -0
  660. codex-2.0.0a1/frontend/src/components/auth/profile-dialog.vue +337 -0
  661. codex-2.0.0a1/frontend/src/components/auth/reset-password-confirm.vue +186 -0
  662. codex-2.0.0a1/frontend/src/components/auth/reset-password-request-dialog.vue +125 -0
  663. codex-2.0.0a1/frontend/src/components/book-cover.vue +207 -0
  664. codex-2.0.0a1/frontend/src/components/browser/card/browser-card-menu.vue +80 -0
  665. codex-2.0.0a1/frontend/src/components/browser/card/card.vue +319 -0
  666. codex-2.0.0a1/frontend/src/components/browser/card/controls.vue +96 -0
  667. codex-2.0.0a1/frontend/src/components/browser/card/order-by-caption.vue +114 -0
  668. codex-2.0.0a1/frontend/src/components/browser/card/remove-cover-button.vue +72 -0
  669. codex-2.0.0a1/frontend/src/components/browser/card/subtitle.vue +142 -0
  670. codex-2.0.0a1/frontend/src/components/browser/card/upload-cover-button.vue +101 -0
  671. codex-2.0.0a1/frontend/src/components/browser/drawer/browser-settings-collection.vue +67 -0
  672. codex-2.0.0a1/frontend/src/components/browser/drawer/browser-settings-covers.vue +65 -0
  673. codex-2.0.0a1/frontend/src/components/browser/drawer/browser-settings-misc.vue +57 -0
  674. codex-2.0.0a1/frontend/src/components/browser/drawer/browser-settings-panel.vue +25 -0
  675. codex-2.0.0a1/frontend/src/components/browser/drawer/browser-settings-saved.vue +198 -0
  676. codex-2.0.0a1/frontend/src/components/browser/empty.vue +83 -0
  677. codex-2.0.0a1/frontend/src/components/browser/main.vue +390 -0
  678. codex-2.0.0a1/frontend/src/components/browser/table/browser-table-cell.vue +398 -0
  679. codex-2.0.0a1/frontend/src/components/browser/table/browser-table-column-picker.vue +567 -0
  680. codex-2.0.0a1/frontend/src/components/browser/table/browser-table.vue +524 -0
  681. codex-2.0.0a1/frontend/src/components/browser/toolbars/breadcrumbs/breadcrumbs.vue +145 -0
  682. codex-2.0.0a1/frontend/src/components/browser/toolbars/browser-toolbar-title.vue +109 -0
  683. codex-2.0.0a1/frontend/src/components/browser/toolbars/nav/browser-nav-button.vue +103 -0
  684. codex-2.0.0a1/frontend/src/components/browser/toolbars/nav/browser-toolbar-nav.vue +47 -0
  685. codex-2.0.0a1/frontend/src/components/browser/toolbars/top/browser-toolbar-top.vue +86 -0
  686. codex-2.0.0a1/frontend/src/components/browser/toolbars/top/filter-choice-list.vue +219 -0
  687. codex-2.0.0a1/frontend/src/components/browser/toolbars/top/filter-sub-menu.vue +441 -0
  688. codex-2.0.0a1/frontend/src/components/browser/toolbars/top/top-collection-select.vue +72 -0
  689. codex-2.0.0a1/frontend/src/components/confirm-dialog.vue +127 -0
  690. codex-2.0.0a1/frontend/src/components/download-button.vue +120 -0
  691. codex-2.0.0a1/frontend/src/components/favorite-toggle.vue +88 -0
  692. codex-2.0.0a1/frontend/src/components/force-update-button.vue +109 -0
  693. codex-2.0.0a1/frontend/src/components/force-update-confirm-dialog.vue +71 -0
  694. codex-2.0.0a1/frontend/src/components/mark-read-button.vue +85 -0
  695. codex-2.0.0a1/frontend/src/components/metadata/edit-mode/clear-field-icon.vue +34 -0
  696. codex-2.0.0a1/frontend/src/components/metadata/edit-mode/edit-panel.vue +1804 -0
  697. codex-2.0.0a1/frontend/src/components/metadata/metadata-activator.vue +60 -0
  698. codex-2.0.0a1/frontend/src/components/metadata/metadata-body.vue +142 -0
  699. codex-2.0.0a1/frontend/src/components/metadata/metadata-chip.vue +190 -0
  700. codex-2.0.0a1/frontend/src/components/metadata/metadata-controls.vue +224 -0
  701. codex-2.0.0a1/frontend/src/components/metadata/metadata-cover.vue +96 -0
  702. codex-2.0.0a1/frontend/src/components/metadata/metadata-dialog.vue +225 -0
  703. codex-2.0.0a1/frontend/src/components/metadata/metadata-header.vue +325 -0
  704. codex-2.0.0a1/frontend/src/components/metadata/metadata-ratings.vue +85 -0
  705. codex-2.0.0a1/frontend/src/components/metadata/metadata-text.vue +273 -0
  706. codex-2.0.0a1/frontend/src/components/online-tag/launcher-dialog.vue +343 -0
  707. codex-2.0.0a1/frontend/src/components/online-tag/prompt-popup.vue +177 -0
  708. codex-2.0.0a1/frontend/src/components/reader/drawer/download-panel.vue +79 -0
  709. codex-2.0.0a1/frontend/src/components/reader/drawer/keyboard-shortcuts-table.vue +140 -0
  710. codex-2.0.0a1/frontend/src/components/reader/drawer/reader-settings-reader.vue +50 -0
  711. codex-2.0.0a1/frontend/src/components/reader/drawer/reader-settings-scope.vue +302 -0
  712. codex-2.0.0a1/frontend/src/components/reader/pager/page/page.vue +228 -0
  713. codex-2.0.0a1/frontend/src/components/reader/pager/pager-horizontal.vue +159 -0
  714. codex-2.0.0a1/frontend/src/components/reader/pager/pager.vue +76 -0
  715. codex-2.0.0a1/frontend/src/components/reader/toolbars/nav/reader-book-change-nav-button.vue +65 -0
  716. codex-2.0.0a1/frontend/src/components/reader/toolbars/nav/reader-nav-button.vue +93 -0
  717. codex-2.0.0a1/frontend/src/components/reader/toolbars/top/reader-arc-select.vue +168 -0
  718. codex-2.0.0a1/frontend/src/components/reader/toolbars/top/reader-toolbar-top.vue +235 -0
  719. codex-2.0.0a1/frontend/src/components/settings/button.vue +77 -0
  720. codex-2.0.0a1/frontend/src/components/settings/opds-dialog.vue +82 -0
  721. codex-2.0.0a1/frontend/src/plugins/router.js +152 -0
  722. codex-2.0.0a1/frontend/src/plugins/vuetify.js +98 -0
  723. codex-2.0.0a1/frontend/src/reader.vue +96 -0
  724. codex-2.0.0a1/frontend/src/route.js +82 -0
  725. codex-2.0.0a1/frontend/src/stores/admin.js +525 -0
  726. codex-2.0.0a1/frontend/src/stores/auth.js +220 -0
  727. codex-2.0.0a1/frontend/src/stores/browser-select-many.js +264 -0
  728. codex-2.0.0a1/frontend/src/stores/browser.js +1045 -0
  729. codex-2.0.0a1/frontend/src/stores/common.js +112 -0
  730. codex-2.0.0a1/frontend/src/stores/favorites.js +100 -0
  731. codex-2.0.0a1/frontend/src/stores/metadata.js +154 -0
  732. codex-2.0.0a1/frontend/src/stores/online-tag.js +91 -0
  733. codex-2.0.0a1/frontend/src/stores/reader.js +1011 -0
  734. codex-2.0.0a1/frontend/src/stores/socket.js +318 -0
  735. codex-2.0.0a1/frontend/tests/unit/__snapshots__/reader-nav-button.test.js.snap +9 -0
  736. codex-2.0.0a1/frontend/tests/unit/auth-store.test.js +123 -0
  737. codex-2.0.0a1/frontend/tests/unit/browser-select-many-store.test.js +192 -0
  738. codex-2.0.0a1/frontend/tests/unit/browser-store-helpers.test.js +142 -0
  739. codex-2.0.0a1/frontend/tests/unit/edit-panel-disabled-tooltips.test.js +108 -0
  740. codex-2.0.0a1/frontend/tests/unit/edit-panel-identifiers.test.js +99 -0
  741. codex-2.0.0a1/frontend/tests/unit/favorites-store.test.js +186 -0
  742. codex-2.0.0a1/frontend/tests/unit/metadata-activator.test.js +118 -0
  743. codex-2.0.0a1/frontend/tests/unit/profile-dialog.test.js +153 -0
  744. codex-2.0.0a1/frontend/tests/unit/reader-nav-button.test.js +72 -0
  745. codex-2.0.0a1/frontend/tests/unit/reader-store-routes.test.js +28 -0
  746. codex-2.0.0a1/frontend/tests/unit/reset-password-confirm.test.js +124 -0
  747. codex-2.0.0a1/frontend/tests/unit/reset-password-request-dialog.test.js +73 -0
  748. codex-2.0.0a1/frontend/tests/unit/route-helpers.test.js +74 -0
  749. codex-2.0.0a1/frontend/tests/unit/tag-write-errors-panel.test.js +77 -0
  750. codex-2.0.0a1/frontend/tests/unit/tagging-tab.test.js +206 -0
  751. codex-2.0.0a1/package.json +107 -0
  752. codex-2.0.0a1/pyproject.toml +423 -0
  753. codex-2.0.0a1/tests/conftest.py +55 -0
  754. codex-2.0.0a1/tests/importer/test_basic.py +884 -0
  755. codex-2.0.0a1/tests/importer/test_update_all.py +776 -0
  756. codex-2.0.0a1/tests/opds_schema.py +327 -0
  757. codex-2.0.0a1/tests/perf/run_baseline.py +384 -0
  758. codex-2.0.0a1/tests/perf/run_opds_baseline.py +369 -0
  759. codex-2.0.0a1/tests/perf/run_reader_baseline.py +431 -0
  760. codex-2.0.0a1/tests/schema/opds/README.md +47 -0
  761. codex-2.0.0a1/tests/schema/opds/fetch_schemas.py +120 -0
  762. codex-2.0.0a1/tests/schema/opds/v1/atom.rnc +283 -0
  763. codex-2.0.0a1/tests/schema/opds/v1/opds-pse-1.2.rnc +38 -0
  764. codex-2.0.0a1/tests/schema/opds/v1/opds.rnc +136 -0
  765. codex-2.0.0a1/tests/schema/opds/v1/opensearch-1.1.rnc +93 -0
  766. codex-2.0.0a1/tests/schema/opds/v2/opds/acquisition-object.schema.json +20 -0
  767. codex-2.0.0a1/tests/schema/opds/v2/opds/authentication.schema.json +65 -0
  768. codex-2.0.0a1/tests/schema/opds/v2/opds/feed-metadata.schema.json +52 -0
  769. codex-2.0.0a1/tests/schema/opds/v2/opds/feed.schema.json +155 -0
  770. codex-2.0.0a1/tests/schema/opds/v2/opds/progression.schema.json +49 -0
  771. codex-2.0.0a1/tests/schema/opds/v2/opds/properties.schema.json +123 -0
  772. codex-2.0.0a1/tests/schema/opds/v2/opds/publication.schema.json +84 -0
  773. codex-2.0.0a1/tests/schema/opds/v2/readium/a11y.schema.json +162 -0
  774. codex-2.0.0a1/tests/schema/opds/v2/readium/altIdentifier.schema.json +30 -0
  775. codex-2.0.0a1/tests/schema/opds/v2/readium/article.schema.json +83 -0
  776. codex-2.0.0a1/tests/schema/opds/v2/readium/chapter.schema.json +61 -0
  777. codex-2.0.0a1/tests/schema/opds/v2/readium/collection.schema.json +58 -0
  778. codex-2.0.0a1/tests/schema/opds/v2/readium/contributor.schema.json +64 -0
  779. codex-2.0.0a1/tests/schema/opds/v2/readium/episode.schema.json +58 -0
  780. codex-2.0.0a1/tests/schema/opds/v2/readium/extensions/encryption/properties.schema.json +40 -0
  781. codex-2.0.0a1/tests/schema/opds/v2/readium/extensions/epub/metadata.schema.json +21 -0
  782. codex-2.0.0a1/tests/schema/opds/v2/readium/extensions/epub/properties.schema.json +24 -0
  783. codex-2.0.0a1/tests/schema/opds/v2/readium/extensions/epub/subcollections.schema.json +44 -0
  784. codex-2.0.0a1/tests/schema/opds/v2/readium/issue.schema.json +64 -0
  785. codex-2.0.0a1/tests/schema/opds/v2/readium/language-map.schema.json +21 -0
  786. codex-2.0.0a1/tests/schema/opds/v2/readium/link.schema.json +133 -0
  787. codex-2.0.0a1/tests/schema/opds/v2/readium/metadata.schema.json +227 -0
  788. codex-2.0.0a1/tests/schema/opds/v2/readium/periodical.schema.json +64 -0
  789. codex-2.0.0a1/tests/schema/opds/v2/readium/publication.schema.json +83 -0
  790. codex-2.0.0a1/tests/schema/opds/v2/readium/season.schema.json +61 -0
  791. codex-2.0.0a1/tests/schema/opds/v2/readium/series.schema.json +76 -0
  792. codex-2.0.0a1/tests/schema/opds/v2/readium/storyArc.schema.json +67 -0
  793. codex-2.0.0a1/tests/schema/opds/v2/readium/subcollection.schema.json +55 -0
  794. codex-2.0.0a1/tests/schema/opds/v2/readium/subject.schema.json +55 -0
  795. codex-2.0.0a1/tests/schema/opds/v2/readium/volume.schema.json +67 -0
  796. codex-2.0.0a1/tests/test_admin_custom_cover.py +299 -0
  797. codex-2.0.0a1/tests/test_admin_query_counts.py +104 -0
  798. codex-2.0.0a1/tests/test_admin_singleton_settings.py +92 -0
  799. codex-2.0.0a1/tests/test_admin_writes.py +95 -0
  800. codex-2.0.0a1/tests/test_app_urls.py +40 -0
  801. codex-2.0.0a1/tests/test_breadcrumbs.py +128 -0
  802. codex-2.0.0a1/tests/test_browser_columns_registry.py +215 -0
  803. codex-2.0.0a1/tests/test_browser_ordering.py +930 -0
  804. codex-2.0.0a1/tests/test_browser_settings_table.py +316 -0
  805. codex-2.0.0a1/tests/test_browser_table_columns.py +84 -0
  806. codex-2.0.0a1/tests/test_browser_table_response.py +976 -0
  807. codex-2.0.0a1/tests/test_credential_validator.py +137 -0
  808. codex-2.0.0a1/tests/test_critical_rating.py +134 -0
  809. codex-2.0.0a1/tests/test_db_backup.py +167 -0
  810. codex-2.0.0a1/tests/test_favorites_api.py +564 -0
  811. codex-2.0.0a1/tests/test_fs_filters_ignore.py +199 -0
  812. codex-2.0.0a1/tests/test_group.py +82 -0
  813. codex-2.0.0a1/tests/test_janitor_cleanup_tagging_state.py +153 -0
  814. codex-2.0.0a1/tests/test_lazy_import.py +76 -0
  815. codex-2.0.0a1/tests/test_logging_filter.py +131 -0
  816. codex-2.0.0a1/tests/test_metadata_collection_list.py +202 -0
  817. codex-2.0.0a1/tests/test_models.py +148 -0
  818. codex-2.0.0a1/tests/test_onlinetag_prompt_endpoints.py +109 -0
  819. codex-2.0.0a1/tests/test_onlinetag_session_manager.py +275 -0
  820. codex-2.0.0a1/tests/test_opds_feed.py +302 -0
  821. codex-2.0.0a1/tests/test_opds_schema.py +365 -0
  822. codex-2.0.0a1/tests/test_password_reset.py +490 -0
  823. codex-2.0.0a1/tests/test_reader.py +148 -0
  824. codex-2.0.0a1/tests/test_registration_settings_patch.py +61 -0
  825. codex-2.0.0a1/tests/test_route_serializer.py +40 -0
  826. codex-2.0.0a1/tests/test_settings_collection_flip.py +249 -0
  827. codex-2.0.0a1/tests/test_shape_identifiers.py +71 -0
  828. codex-2.0.0a1/tests/test_snapshot_diff.py +222 -0
  829. codex-2.0.0a1/tests/test_tag_write_errors.py +126 -0
  830. codex-2.0.0a1/tests/test_tag_write_filters.py +130 -0
  831. codex-2.0.0a1/tests/test_tagging_validate_endpoint.py +122 -0
  832. codex-2.0.0a1/tests/test_user_data_backups.py +101 -0
  833. codex-2.0.0a1/tests/test_user_data_dump.py +81 -0
  834. codex-2.0.0a1/tests/test_user_data_restore.py +231 -0
  835. codex-2.0.0a1/tests/test_user_data_snapshot.py +91 -0
  836. codex-2.0.0a1/tests/test_user_data_store.py +125 -0
  837. codex-2.0.0a1/tests/test_xz.py +96 -0
  838. codex-2.0.0a1/uv.lock +4375 -0
  839. codex-2.0.0a1/vulture_ignorelist.py +8 -0
  840. codex-1.12.7/NEWS.md +0 -2147
  841. codex-1.12.7/PKG-INFO +0 -883
  842. codex-1.12.7/README.md +0 -829
  843. codex-1.12.7/bin/benchmark-opds.sh +0 -17
  844. codex-1.12.7/bin/ci-download-dist-if-identical.sh +0 -38
  845. codex-1.12.7/bin/cleanup-pypi-alpha.sh +0 -31
  846. codex-1.12.7/bin/delete-files.sh +0 -13
  847. codex-1.12.7/bin/dev-server.sh +0 -17
  848. codex-1.12.7/bin/dev-ttabs.sh +0 -8
  849. codex-1.12.7/bin/docker-tag-latest.sh +0 -40
  850. codex-1.12.7/bin/fix-docker.sh +0 -11
  851. codex-1.12.7/bin/fix-sh.sh +0 -7
  852. codex-1.12.7/bin/ghcr-prune-alphas.sh +0 -224
  853. codex-1.12.7/bin/lint-ci.sh +0 -11
  854. codex-1.12.7/bin/lint-complexity.sh +0 -10
  855. codex-1.12.7/bin/lint-darwin.sh +0 -10
  856. codex-1.12.7/bin/lint-docker.sh +0 -12
  857. codex-1.12.7/bin/lint-sh.sh +0 -8
  858. codex-1.12.7/bin/prettier-nginx.sh +0 -7
  859. codex-1.12.7/bin/remark-for-claude.sh +0 -7
  860. codex-1.12.7/bin/sort-ignore.sh +0 -10
  861. codex-1.12.7/bin/type-python.sh +0 -9
  862. codex-1.12.7/bin/vendor-diff-package.sh +0 -34
  863. codex-1.12.7/bin/version-node.sh +0 -15
  864. codex-1.12.7/bin/version-python.sh +0 -9
  865. codex-1.12.7/bun.lock +0 -1224
  866. codex-1.12.7/codex/applications/websocket.py +0 -22
  867. codex-1.12.7/codex/choices/admin.py +0 -38
  868. codex-1.12.7/codex/choices/browser.py +0 -692
  869. codex-1.12.7/codex/choices/choices_to_json.py +0 -174
  870. codex-1.12.7/codex/choices/jobs.py +0 -419
  871. codex-1.12.7/codex/choices/notifications.py +0 -16
  872. codex-1.12.7/codex/choices/statii.py +0 -44
  873. codex-1.12.7/codex/librarian/bookmark/latest_version.py +0 -63
  874. codex-1.12.7/codex/librarian/covers/purge.py +0 -114
  875. codex-1.12.7/codex/librarian/fs/filters.py +0 -119
  876. codex-1.12.7/codex/librarian/fs/poller/poller.py +0 -333
  877. codex-1.12.7/codex/librarian/fs/poller/snapshot.py +0 -229
  878. codex-1.12.7/codex/librarian/fs/watcher/dirs.py +0 -106
  879. codex-1.12.7/codex/librarian/fs/watcher/events.py +0 -114
  880. codex-1.12.7/codex/librarian/fs/watcher/move.py +0 -131
  881. codex-1.12.7/codex/librarian/fs/watcher/watcher.py +0 -221
  882. codex-1.12.7/codex/librarian/librariand.py +0 -201
  883. codex-1.12.7/codex/librarian/memory.py +0 -60
  884. codex-1.12.7/codex/librarian/notifier/tasks.py +0 -31
  885. codex-1.12.7/codex/librarian/scribe/importer/const.py +0 -426
  886. codex-1.12.7/codex/librarian/scribe/importer/create/comics.py +0 -208
  887. codex-1.12.7/codex/librarian/scribe/importer/create/const.py +0 -131
  888. codex-1.12.7/codex/librarian/scribe/importer/create/covers.py +0 -121
  889. codex-1.12.7/codex/librarian/scribe/importer/create/folders.py +0 -98
  890. codex-1.12.7/codex/librarian/scribe/importer/create/foreign_keys.py +0 -309
  891. codex-1.12.7/codex/librarian/scribe/importer/create/link_fks.py +0 -88
  892. codex-1.12.7/codex/librarian/scribe/importer/delete/__init__.py +0 -28
  893. codex-1.12.7/codex/librarian/scribe/importer/delete/comics.py +0 -83
  894. codex-1.12.7/codex/librarian/scribe/importer/delete/folders.py +0 -34
  895. codex-1.12.7/codex/librarian/scribe/importer/init.py +0 -355
  896. codex-1.12.7/codex/librarian/scribe/importer/link/const.py +0 -31
  897. codex-1.12.7/codex/librarian/scribe/importer/link/covers.py +0 -70
  898. codex-1.12.7/codex/librarian/scribe/importer/moved/covers.py +0 -88
  899. codex-1.12.7/codex/librarian/scribe/importer/query/filters.py +0 -61
  900. codex-1.12.7/codex/librarian/scribe/importer/query/links_fk.py +0 -123
  901. codex-1.12.7/codex/librarian/scribe/importer/query/links_m2m.py +0 -135
  902. codex-1.12.7/codex/librarian/scribe/importer/query/update_comics.py +0 -69
  903. codex-1.12.7/codex/librarian/scribe/importer/read/aggregate_path.py +0 -109
  904. codex-1.12.7/codex/librarian/scribe/importer/read/const.py +0 -136
  905. codex-1.12.7/codex/librarian/scribe/importer/read/extract.py +0 -300
  906. codex-1.12.7/codex/librarian/scribe/importer/read/folders.py +0 -41
  907. codex-1.12.7/codex/librarian/scribe/importer/read/foreign_keys.py +0 -160
  908. codex-1.12.7/codex/librarian/scribe/importer/read/many_to_many.py +0 -283
  909. codex-1.12.7/codex/librarian/scribe/janitor/adopt_folders.py +0 -109
  910. codex-1.12.7/codex/librarian/scribe/janitor/cleanup.py +0 -419
  911. codex-1.12.7/codex/librarian/scribe/janitor/failed_imports.py +0 -30
  912. codex-1.12.7/codex/librarian/scribe/janitor/janitor.py +0 -149
  913. codex-1.12.7/codex/librarian/scribe/janitor/status.py +0 -172
  914. codex-1.12.7/codex/librarian/scribe/janitor/tasks.py +0 -79
  915. codex-1.12.7/codex/librarian/scribe/janitor/update.py +0 -91
  916. codex-1.12.7/codex/librarian/scribe/janitor/vacuum.py +0 -62
  917. codex-1.12.7/codex/librarian/scribe/lazy_importer.py +0 -49
  918. codex-1.12.7/codex/librarian/scribe/priority.py +0 -75
  919. codex-1.12.7/codex/librarian/scribe/scribed.py +0 -138
  920. codex-1.12.7/codex/librarian/scribe/status.py +0 -21
  921. codex-1.12.7/codex/librarian/scribe/tasks.py +0 -44
  922. codex-1.12.7/codex/librarian/scribe/timestamp_update.py +0 -131
  923. codex-1.12.7/codex/librarian/telemeter/scheduled_time.py +0 -69
  924. codex-1.12.7/codex/librarian/telemeter/stats.py +0 -206
  925. codex-1.12.7/codex/librarian/telemeter/telemeter.py +0 -86
  926. codex-1.12.7/codex/migrations/0034_comicbox2.py +0 -792
  927. codex-1.12.7/codex/migrations/0038_settings_tables.py +0 -991
  928. codex-1.12.7/codex/migrations/0039_metron_age_rating_default_view_and_performance.py +0 -1092
  929. codex-1.12.7/codex/migrations/0042_browser_table_view_and_favorites.py +0 -274
  930. codex-1.12.7/codex/models/__init__.py +0 -14
  931. codex-1.12.7/codex/models/admin.py +0 -145
  932. codex-1.12.7/codex/models/comic.py +0 -400
  933. codex-1.12.7/codex/models/favorite.py +0 -70
  934. codex-1.12.7/codex/models/fields.py +0 -83
  935. codex-1.12.7/codex/models/groups.py +0 -215
  936. codex-1.12.7/codex/models/library.py +0 -76
  937. codex-1.12.7/codex/models/named.py +0 -180
  938. codex-1.12.7/codex/models/paths.py +0 -132
  939. codex-1.12.7/codex/models/settings.py +0 -579
  940. codex-1.12.7/codex/serializers/admin/flags.py +0 -52
  941. codex-1.12.7/codex/serializers/admin/groups.py +0 -64
  942. codex-1.12.7/codex/serializers/admin/libraries.py +0 -104
  943. codex-1.12.7/codex/serializers/admin/stats.py +0 -129
  944. codex-1.12.7/codex/serializers/admin/users.py +0 -83
  945. codex-1.12.7/codex/serializers/auth.py +0 -28
  946. codex-1.12.7/codex/serializers/browser/metadata.py +0 -80
  947. codex-1.12.7/codex/serializers/browser/mixins.py +0 -74
  948. codex-1.12.7/codex/serializers/browser/mtime.py +0 -23
  949. codex-1.12.7/codex/serializers/browser/page.py +0 -280
  950. codex-1.12.7/codex/serializers/browser/settings.py +0 -227
  951. codex-1.12.7/codex/serializers/fields/__init__.py +0 -37
  952. codex-1.12.7/codex/serializers/fields/group.py +0 -16
  953. codex-1.12.7/codex/serializers/fields/reader.py +0 -26
  954. codex-1.12.7/codex/serializers/models/comic.py +0 -84
  955. codex-1.12.7/codex/serializers/models/groups.py +0 -54
  956. codex-1.12.7/codex/serializers/models/named.py +0 -264
  957. codex-1.12.7/codex/serializers/opds/v1.py +0 -73
  958. codex-1.12.7/codex/serializers/opds/v2/progression.py +0 -57
  959. codex-1.12.7/codex/serializers/opds/v2/publication.py +0 -164
  960. codex-1.12.7/codex/serializers/reader.py +0 -148
  961. codex-1.12.7/codex/serializers/route.py +0 -51
  962. codex-1.12.7/codex/settings/__init__.py +0 -980
  963. codex-1.12.7/codex/settings/codex.toml.default +0 -59
  964. codex-1.12.7/codex/settings/config.py +0 -148
  965. codex-1.12.7/codex/settings/logging.py +0 -126
  966. codex-1.12.7/codex/settings/secret_key.py +0 -14
  967. codex-1.12.7/codex/signals/django_signals.py +0 -71
  968. codex-1.12.7/codex/startup/__init__.py +0 -305
  969. codex-1.12.7/codex/startup/custom_cover_libraries.py +0 -44
  970. codex-1.12.7/codex/startup/db.py +0 -244
  971. codex-1.12.7/codex/startup/loguru.py +0 -82
  972. codex-1.12.7/codex/startup/registration.py +0 -13
  973. codex-1.12.7/codex/static/assets/VCheckbox-E57ubrNv.js +0 -1
  974. codex-1.12.7/codex/static/assets/VCheckbox-E57ubrNv.js.br +0 -0
  975. codex-1.12.7/codex/static/assets/VCheckbox-E57ubrNv.js.gz +0 -0
  976. codex-1.12.7/codex/static/assets/VCombobox-CSFSGfLd.js +0 -2
  977. codex-1.12.7/codex/static/assets/VCombobox-CSFSGfLd.js.br +0 -0
  978. codex-1.12.7/codex/static/assets/VCombobox-CSFSGfLd.js.gz +0 -0
  979. codex-1.12.7/codex/static/assets/VDivider-C6KGdwiu.css +0 -1
  980. codex-1.12.7/codex/static/assets/VDivider-C6KGdwiu.css.br +0 -0
  981. codex-1.12.7/codex/static/assets/VDivider-C6KGdwiu.css.gz +0 -0
  982. codex-1.12.7/codex/static/assets/VDivider-TyR5Phw-.js +0 -1
  983. codex-1.12.7/codex/static/assets/VDivider-TyR5Phw-.js.br +0 -0
  984. codex-1.12.7/codex/static/assets/VDivider-TyR5Phw-.js.gz +0 -0
  985. codex-1.12.7/codex/static/assets/VExpansionPanels-CULNITHX.js +0 -1
  986. codex-1.12.7/codex/static/assets/VExpansionPanels-CULNITHX.js.br +0 -0
  987. codex-1.12.7/codex/static/assets/VExpansionPanels-CULNITHX.js.gz +0 -0
  988. codex-1.12.7/codex/static/assets/VExpansionPanels-CUfe7Zz5.css +0 -1
  989. codex-1.12.7/codex/static/assets/VExpansionPanels-CUfe7Zz5.css.br +0 -0
  990. codex-1.12.7/codex/static/assets/VExpansionPanels-CUfe7Zz5.css.gz +0 -0
  991. codex-1.12.7/codex/static/assets/VForm-D_MRywit.js +0 -1
  992. codex-1.12.7/codex/static/assets/VForm-D_MRywit.js.br +0 -0
  993. codex-1.12.7/codex/static/assets/VForm-D_MRywit.js.gz +0 -0
  994. codex-1.12.7/codex/static/assets/VListItem-BPLo0ybo.css +0 -1
  995. codex-1.12.7/codex/static/assets/VListItem-BPLo0ybo.css.br +0 -0
  996. codex-1.12.7/codex/static/assets/VListItem-BPLo0ybo.css.gz +0 -0
  997. codex-1.12.7/codex/static/assets/VListItem-CodEI_Ap.js +0 -1
  998. codex-1.12.7/codex/static/assets/VListItem-CodEI_Ap.js.br +0 -0
  999. codex-1.12.7/codex/static/assets/VListItem-CodEI_Ap.js.gz +0 -0
  1000. codex-1.12.7/codex/static/assets/VProgressCircular-DGEUiQBS.js +0 -10
  1001. codex-1.12.7/codex/static/assets/VProgressCircular-DGEUiQBS.js.br +0 -0
  1002. codex-1.12.7/codex/static/assets/VProgressCircular-DGEUiQBS.js.gz +0 -0
  1003. codex-1.12.7/codex/static/assets/VRadioGroup-CnYpLYXB.js +0 -1
  1004. codex-1.12.7/codex/static/assets/VRadioGroup-CnYpLYXB.js.br +0 -0
  1005. codex-1.12.7/codex/static/assets/VRadioGroup-CnYpLYXB.js.gz +0 -0
  1006. codex-1.12.7/codex/static/assets/VSelect-C8lGNFfd.css +0 -1
  1007. codex-1.12.7/codex/static/assets/VSelect-C8lGNFfd.css.br +0 -0
  1008. codex-1.12.7/codex/static/assets/VSelect-C8lGNFfd.css.gz +0 -0
  1009. codex-1.12.7/codex/static/assets/VSelect-nogMhy_Q.js +0 -1
  1010. codex-1.12.7/codex/static/assets/VSelect-nogMhy_Q.js.br +0 -0
  1011. codex-1.12.7/codex/static/assets/VSelect-nogMhy_Q.js.gz +0 -0
  1012. codex-1.12.7/codex/static/assets/VSelectionControl-CDfSNsUR.css +0 -1
  1013. codex-1.12.7/codex/static/assets/VSelectionControl-CDfSNsUR.css.br +0 -0
  1014. codex-1.12.7/codex/static/assets/VSelectionControl-CDfSNsUR.css.gz +0 -0
  1015. codex-1.12.7/codex/static/assets/VSelectionControl-rOPGFMXg.js +0 -1
  1016. codex-1.12.7/codex/static/assets/VSelectionControl-rOPGFMXg.js.br +0 -0
  1017. codex-1.12.7/codex/static/assets/VSelectionControl-rOPGFMXg.js.gz +0 -0
  1018. codex-1.12.7/codex/static/assets/VTable-BB60CanX.js +0 -1
  1019. codex-1.12.7/codex/static/assets/VTable-BB60CanX.js.br +0 -0
  1020. codex-1.12.7/codex/static/assets/VTable-BB60CanX.js.gz +0 -0
  1021. codex-1.12.7/codex/static/assets/VTable-Dq_7MYoa.css +0 -1
  1022. codex-1.12.7/codex/static/assets/VTable-Dq_7MYoa.css.br +0 -0
  1023. codex-1.12.7/codex/static/assets/VTable-Dq_7MYoa.css.gz +0 -0
  1024. codex-1.12.7/codex/static/assets/VWindowItem-_SuWNwU8.js +0 -1
  1025. codex-1.12.7/codex/static/assets/VWindowItem-_SuWNwU8.js.br +0 -0
  1026. codex-1.12.7/codex/static/assets/VWindowItem-_SuWNwU8.js.gz +0 -0
  1027. codex-1.12.7/codex/static/assets/admin-B7QuTDbE.js +0 -1
  1028. codex-1.12.7/codex/static/assets/admin-B7QuTDbE.js.br +0 -0
  1029. codex-1.12.7/codex/static/assets/admin-B7QuTDbE.js.gz +0 -0
  1030. codex-1.12.7/codex/static/assets/admin-CQ6CwRJ3.css +0 -1
  1031. codex-1.12.7/codex/static/assets/admin-CQ6CwRJ3.css.br +0 -0
  1032. codex-1.12.7/codex/static/assets/admin-CQ6CwRJ3.css.gz +0 -0
  1033. codex-1.12.7/codex/static/assets/admin-DKFHyvG1.js +0 -1
  1034. codex-1.12.7/codex/static/assets/admin-DKFHyvG1.js.br +0 -0
  1035. codex-1.12.7/codex/static/assets/admin-DKFHyvG1.js.gz +0 -0
  1036. codex-1.12.7/codex/static/assets/admin-menu-C7uO_P7i.js +0 -1
  1037. codex-1.12.7/codex/static/assets/admin-menu-C7uO_P7i.js.br +0 -0
  1038. codex-1.12.7/codex/static/assets/admin-menu-C7uO_P7i.js.gz +0 -0
  1039. codex-1.12.7/codex/static/assets/admin-menu-C_ThfpDU.css +0 -1
  1040. codex-1.12.7/codex/static/assets/admin-menu-C_ThfpDU.css.br +0 -0
  1041. codex-1.12.7/codex/static/assets/admin-menu-C_ThfpDU.css.gz +0 -0
  1042. codex-1.12.7/codex/static/assets/admin-settings-button-progress-DwL2iGAd.js +0 -1
  1043. codex-1.12.7/codex/static/assets/admin-settings-button-progress-DwL2iGAd.js.br +0 -0
  1044. codex-1.12.7/codex/static/assets/admin-settings-button-progress-DwL2iGAd.js.gz +0 -0
  1045. codex-1.12.7/codex/static/assets/browser-CWf30Frt.js +0 -1
  1046. codex-1.12.7/codex/static/assets/browser-CWf30Frt.js.br +0 -0
  1047. codex-1.12.7/codex/static/assets/browser-CWf30Frt.js.gz +0 -0
  1048. codex-1.12.7/codex/static/assets/browser-D4rwrT2s.css +0 -1
  1049. codex-1.12.7/codex/static/assets/browser-D4rwrT2s.css.br +0 -0
  1050. codex-1.12.7/codex/static/assets/browser-D4rwrT2s.css.gz +0 -0
  1051. codex-1.12.7/codex/static/assets/change-password-dialog-DPb7hr5i.css +0 -1
  1052. codex-1.12.7/codex/static/assets/change-password-dialog-DPb7hr5i.css.br +0 -2
  1053. codex-1.12.7/codex/static/assets/change-password-dialog-DPb7hr5i.css.gz +0 -0
  1054. codex-1.12.7/codex/static/assets/change-password-dialog-DShcSD1q.js +0 -1
  1055. codex-1.12.7/codex/static/assets/change-password-dialog-DShcSD1q.js.br +0 -0
  1056. codex-1.12.7/codex/static/assets/change-password-dialog-DShcSD1q.js.gz +0 -0
  1057. codex-1.12.7/codex/static/assets/clipboard-DwN5w1_T.js +0 -1
  1058. codex-1.12.7/codex/static/assets/clipboard-DwN5w1_T.js.br +0 -0
  1059. codex-1.12.7/codex/static/assets/clipboard-DwN5w1_T.js.gz +0 -0
  1060. codex-1.12.7/codex/static/assets/confirm-dialog-BCmI1dOF.css +0 -1
  1061. codex-1.12.7/codex/static/assets/confirm-dialog-BCmI1dOF.css.br +0 -0
  1062. codex-1.12.7/codex/static/assets/confirm-dialog-BCmI1dOF.css.gz +0 -0
  1063. codex-1.12.7/codex/static/assets/confirm-dialog-nxHgU-NT.js +0 -1
  1064. codex-1.12.7/codex/static/assets/confirm-dialog-nxHgU-NT.js.br +0 -0
  1065. codex-1.12.7/codex/static/assets/confirm-dialog-nxHgU-NT.js.gz +0 -0
  1066. codex-1.12.7/codex/static/assets/confirm-footer-BeBnhQHH.js +0 -1
  1067. codex-1.12.7/codex/static/assets/confirm-footer-BeBnhQHH.js.br +0 -0
  1068. codex-1.12.7/codex/static/assets/confirm-footer-BeBnhQHH.js.gz +0 -0
  1069. codex-1.12.7/codex/static/assets/confirm-footer-ClPdZQz9.css +0 -1
  1070. codex-1.12.7/codex/static/assets/confirm-footer-ClPdZQz9.css.br +0 -0
  1071. codex-1.12.7/codex/static/assets/confirm-footer-ClPdZQz9.css.gz +0 -0
  1072. codex-1.12.7/codex/static/assets/datetime-column-Bd8T3xZ3.js +0 -1
  1073. codex-1.12.7/codex/static/assets/datetime-column-Bd8T3xZ3.js.br +0 -0
  1074. codex-1.12.7/codex/static/assets/datetime-column-Bd8T3xZ3.js.gz +0 -0
  1075. codex-1.12.7/codex/static/assets/dist-Bt_QBcxX.js +0 -1
  1076. codex-1.12.7/codex/static/assets/dist-Bt_QBcxX.js.br +0 -0
  1077. codex-1.12.7/codex/static/assets/dist-Bt_QBcxX.js.gz +0 -0
  1078. codex-1.12.7/codex/static/assets/flag-tab-BulKNnHr.js +0 -1
  1079. codex-1.12.7/codex/static/assets/flag-tab-BulKNnHr.js.br +0 -0
  1080. codex-1.12.7/codex/static/assets/flag-tab-BulKNnHr.js.gz +0 -0
  1081. codex-1.12.7/codex/static/assets/flag-tab-Dr7PNG57.css +0 -1
  1082. codex-1.12.7/codex/static/assets/flag-tab-Dr7PNG57.css.br +0 -6
  1083. codex-1.12.7/codex/static/assets/flag-tab-Dr7PNG57.css.gz +0 -0
  1084. codex-1.12.7/codex/static/assets/group-tab-BOsxaIUq.js +0 -1
  1085. codex-1.12.7/codex/static/assets/group-tab-BOsxaIUq.js.br +0 -0
  1086. codex-1.12.7/codex/static/assets/group-tab-BOsxaIUq.js.gz +0 -0
  1087. codex-1.12.7/codex/static/assets/group-tab-DO4TFX8B.css +0 -1
  1088. codex-1.12.7/codex/static/assets/group-tab-DO4TFX8B.css.br +0 -0
  1089. codex-1.12.7/codex/static/assets/group-tab-DO4TFX8B.css.gz +0 -0
  1090. codex-1.12.7/codex/static/assets/http-error-CV6VbDMG.js +0 -1
  1091. codex-1.12.7/codex/static/assets/http-error-CV6VbDMG.js.br +0 -0
  1092. codex-1.12.7/codex/static/assets/http-error-CV6VbDMG.js.gz +0 -0
  1093. codex-1.12.7/codex/static/assets/job-tab-BQdgAgat.js +0 -1
  1094. codex-1.12.7/codex/static/assets/job-tab-BQdgAgat.js.br +0 -0
  1095. codex-1.12.7/codex/static/assets/job-tab-BQdgAgat.js.gz +0 -0
  1096. codex-1.12.7/codex/static/assets/job-tab-KX6MP9wA.css +0 -1
  1097. codex-1.12.7/codex/static/assets/job-tab-KX6MP9wA.css.br +0 -0
  1098. codex-1.12.7/codex/static/assets/job-tab-KX6MP9wA.css.gz +0 -0
  1099. codex-1.12.7/codex/static/assets/library-tab-B5Abqu6U.js +0 -1
  1100. codex-1.12.7/codex/static/assets/library-tab-B5Abqu6U.js.br +0 -0
  1101. codex-1.12.7/codex/static/assets/library-tab-B5Abqu6U.js.gz +0 -0
  1102. codex-1.12.7/codex/static/assets/library-tab-CBlCYLTX.css +0 -1
  1103. codex-1.12.7/codex/static/assets/library-tab-CBlCYLTX.css.br +0 -0
  1104. codex-1.12.7/codex/static/assets/library-tab-CBlCYLTX.css.gz +0 -0
  1105. codex-1.12.7/codex/static/assets/main-CiRWWALy.css +0 -1
  1106. codex-1.12.7/codex/static/assets/main-CiRWWALy.css.br +0 -0
  1107. codex-1.12.7/codex/static/assets/main-CiRWWALy.css.gz +0 -0
  1108. codex-1.12.7/codex/static/assets/main-glQLhtQy.js +0 -6
  1109. codex-1.12.7/codex/static/assets/main-glQLhtQy.js.br +0 -0
  1110. codex-1.12.7/codex/static/assets/main-glQLhtQy.js.gz +0 -0
  1111. codex-1.12.7/codex/static/assets/pagination-toolbar-DdlS6ZHu.js +0 -1
  1112. codex-1.12.7/codex/static/assets/pagination-toolbar-DdlS6ZHu.js.br +0 -0
  1113. codex-1.12.7/codex/static/assets/pagination-toolbar-DdlS6ZHu.js.gz +0 -0
  1114. codex-1.12.7/codex/static/assets/pagination-toolbar-Fs5Lkf6I.css +0 -1
  1115. codex-1.12.7/codex/static/assets/pagination-toolbar-Fs5Lkf6I.css.br +0 -0
  1116. codex-1.12.7/codex/static/assets/pagination-toolbar-Fs5Lkf6I.css.gz +0 -0
  1117. codex-1.12.7/codex/static/assets/pdf-doc-1giPaJhr.js +0 -378
  1118. codex-1.12.7/codex/static/assets/pdf-doc-1giPaJhr.js.br +0 -0
  1119. codex-1.12.7/codex/static/assets/pdf-doc-1giPaJhr.js.gz +0 -0
  1120. codex-1.12.7/codex/static/assets/reader-6n_bAmHe.css +0 -1
  1121. codex-1.12.7/codex/static/assets/reader-6n_bAmHe.css.br +0 -0
  1122. codex-1.12.7/codex/static/assets/reader-6n_bAmHe.css.gz +0 -0
  1123. codex-1.12.7/codex/static/assets/reader-BQyNNnx4.js +0 -2
  1124. codex-1.12.7/codex/static/assets/reader-BQyNNnx4.js.br +0 -0
  1125. codex-1.12.7/codex/static/assets/reader-BQyNNnx4.js.gz +0 -0
  1126. codex-1.12.7/codex/static/assets/relation-chips-CJTtr8eX.js +0 -1
  1127. codex-1.12.7/codex/static/assets/relation-chips-CJTtr8eX.js.br +0 -0
  1128. codex-1.12.7/codex/static/assets/relation-chips-CJTtr8eX.js.gz +0 -0
  1129. codex-1.12.7/codex/static/assets/relation-chips-DJp1a2uO.css +0 -1
  1130. codex-1.12.7/codex/static/assets/relation-chips-DJp1a2uO.css.br +0 -0
  1131. codex-1.12.7/codex/static/assets/relation-chips-DJp1a2uO.css.gz +0 -0
  1132. codex-1.12.7/codex/static/assets/settings-drawer-DOLgO-B1.css +0 -1
  1133. codex-1.12.7/codex/static/assets/settings-drawer-DOLgO-B1.css.br +0 -0
  1134. codex-1.12.7/codex/static/assets/settings-drawer-DOLgO-B1.css.gz +0 -0
  1135. codex-1.12.7/codex/static/assets/settings-drawer-DQBjfNOS.js +0 -2
  1136. codex-1.12.7/codex/static/assets/settings-drawer-DQBjfNOS.js.br +0 -0
  1137. codex-1.12.7/codex/static/assets/settings-drawer-DQBjfNOS.js.gz +0 -0
  1138. codex-1.12.7/codex/static/assets/stats-tab-BXtuCqLF.css +0 -1
  1139. codex-1.12.7/codex/static/assets/stats-tab-BXtuCqLF.css.br +0 -0
  1140. codex-1.12.7/codex/static/assets/stats-tab-BXtuCqLF.css.gz +0 -0
  1141. codex-1.12.7/codex/static/assets/stats-tab-DCIx-LgL.js +0 -1
  1142. codex-1.12.7/codex/static/assets/stats-tab-DCIx-LgL.js.br +0 -0
  1143. codex-1.12.7/codex/static/assets/stats-tab-DCIx-LgL.js.gz +0 -0
  1144. codex-1.12.7/codex/static/assets/tooltip-onZ2HOXO.js +0 -1
  1145. codex-1.12.7/codex/static/assets/tooltip-onZ2HOXO.js.br +0 -0
  1146. codex-1.12.7/codex/static/assets/tooltip-onZ2HOXO.js.gz +0 -0
  1147. codex-1.12.7/codex/static/assets/unauthorized-CWtxMS7M.js +0 -1
  1148. codex-1.12.7/codex/static/assets/unauthorized-CWtxMS7M.js.br +0 -0
  1149. codex-1.12.7/codex/static/assets/unauthorized-CWtxMS7M.js.gz +0 -0
  1150. codex-1.12.7/codex/static/assets/unauthorized-gk3ft6LF.css +0 -1
  1151. codex-1.12.7/codex/static/assets/unauthorized-gk3ft6LF.css.br +0 -0
  1152. codex-1.12.7/codex/static/assets/unauthorized-gk3ft6LF.css.gz +0 -0
  1153. codex-1.12.7/codex/static/assets/use-now-timer-Drp4HFmC.js +0 -1
  1154. codex-1.12.7/codex/static/assets/use-now-timer-Drp4HFmC.js.br +0 -0
  1155. codex-1.12.7/codex/static/assets/use-now-timer-Drp4HFmC.js.gz +0 -0
  1156. codex-1.12.7/codex/static/assets/user-tab-BXy6ZrdV.css +0 -1
  1157. codex-1.12.7/codex/static/assets/user-tab-BXy6ZrdV.css.br +0 -0
  1158. codex-1.12.7/codex/static/assets/user-tab-BXy6ZrdV.css.gz +0 -0
  1159. codex-1.12.7/codex/static/assets/user-tab-CtR9Eh-F.js +0 -1
  1160. codex-1.12.7/codex/static/assets/user-tab-CtR9Eh-F.js.br +0 -0
  1161. codex-1.12.7/codex/static/assets/user-tab-CtR9Eh-F.js.gz +0 -0
  1162. codex-1.12.7/codex/static/assets/vendor-vue-CuwZC7JE.js +0 -1
  1163. codex-1.12.7/codex/static/assets/vendor-vue-CuwZC7JE.js.br +0 -0
  1164. codex-1.12.7/codex/static/assets/vendor-vue-CuwZC7JE.js.gz +0 -0
  1165. codex-1.12.7/codex/static/manifest.json +0 -754
  1166. codex-1.12.7/codex/static/manifest.json.br +0 -0
  1167. codex-1.12.7/codex/static/manifest.json.gz +0 -0
  1168. codex-1.12.7/codex/templates/headers-script-globals.html +0 -10
  1169. codex-1.12.7/codex/templates/opds_v1/index.xml +0 -115
  1170. codex-1.12.7/codex/templates/opds_v1/opensearch_v1.xml +0 -10
  1171. codex-1.12.7/codex/urls/api/admin.py +0 -98
  1172. codex-1.12.7/codex/urls/api/auth.py +0 -15
  1173. codex-1.12.7/codex/urls/api/browser.py +0 -93
  1174. codex-1.12.7/codex/urls/api/favorites.py +0 -20
  1175. codex-1.12.7/codex/urls/api/reader.py +0 -70
  1176. codex-1.12.7/codex/urls/api/root.py +0 -8
  1177. codex-1.12.7/codex/urls/api/v3.py +0 -52
  1178. codex-1.12.7/codex/urls/app.py +0 -31
  1179. codex-1.12.7/codex/urls/converters.py +0 -45
  1180. codex-1.12.7/codex/urls/opds/root.py +0 -34
  1181. codex-1.12.7/codex/urls/opds/v1.py +0 -32
  1182. codex-1.12.7/codex/urls/opds/v2.py +0 -45
  1183. codex-1.12.7/codex/urls/root.py +0 -49
  1184. codex-1.12.7/codex/views/admin/api_key.py +0 -23
  1185. codex-1.12.7/codex/views/admin/auth.py +0 -47
  1186. codex-1.12.7/codex/views/admin/flag.py +0 -49
  1187. codex-1.12.7/codex/views/admin/library.py +0 -254
  1188. codex-1.12.7/codex/views/admin/permissions.py +0 -22
  1189. codex-1.12.7/codex/views/admin/stats.py +0 -105
  1190. codex-1.12.7/codex/views/admin/tasks.py +0 -201
  1191. codex-1.12.7/codex/views/admin/user.py +0 -137
  1192. codex-1.12.7/codex/views/auth.py +0 -457
  1193. codex-1.12.7/codex/views/bookmark.py +0 -80
  1194. codex-1.12.7/codex/views/browser/annotate/bookmark.py +0 -116
  1195. codex-1.12.7/codex/views/browser/annotate/card.py +0 -102
  1196. codex-1.12.7/codex/views/browser/annotate/cover.py +0 -107
  1197. codex-1.12.7/codex/views/browser/annotate/order.py +0 -525
  1198. codex-1.12.7/codex/views/browser/bookmark.py +0 -70
  1199. codex-1.12.7/codex/views/browser/breadcrumbs.py +0 -179
  1200. codex-1.12.7/codex/views/browser/browser.py +0 -401
  1201. codex-1.12.7/codex/views/browser/columns.py +0 -305
  1202. codex-1.12.7/codex/views/browser/cover.py +0 -147
  1203. codex-1.12.7/codex/views/browser/download.py +0 -67
  1204. codex-1.12.7/codex/views/browser/filters/field.py +0 -75
  1205. codex-1.12.7/codex/views/browser/filters/filter.py +0 -242
  1206. codex-1.12.7/codex/views/browser/filters/group.py +0 -54
  1207. codex-1.12.7/codex/views/browser/filters/search/field/expression.py +0 -190
  1208. codex-1.12.7/codex/views/browser/filters/search/parse.py +0 -296
  1209. codex-1.12.7/codex/views/browser/force_update.py +0 -52
  1210. codex-1.12.7/codex/views/browser/group_mtime.py +0 -143
  1211. codex-1.12.7/codex/views/browser/intersections.py +0 -957
  1212. codex-1.12.7/codex/views/browser/metadata/__init__.py +0 -118
  1213. codex-1.12.7/codex/views/browser/metadata/annotate.py +0 -147
  1214. codex-1.12.7/codex/views/browser/metadata/const.py +0 -111
  1215. codex-1.12.7/codex/views/browser/metadata/copy_intersections.py +0 -90
  1216. codex-1.12.7/codex/views/browser/metadata/group_list.py +0 -44
  1217. codex-1.12.7/codex/views/browser/metadata/query_intersections.py +0 -152
  1218. codex-1.12.7/codex/views/browser/mtime.py +0 -50
  1219. codex-1.12.7/codex/views/browser/order_by.py +0 -214
  1220. codex-1.12.7/codex/views/browser/page_in_bounds.py +0 -64
  1221. codex-1.12.7/codex/views/browser/paginate.py +0 -103
  1222. codex-1.12.7/codex/views/browser/params.py +0 -67
  1223. codex-1.12.7/codex/views/browser/saved_settings.py +0 -309
  1224. codex-1.12.7/codex/views/browser/settings.py +0 -170
  1225. codex-1.12.7/codex/views/browser/title.py +0 -49
  1226. codex-1.12.7/codex/views/browser/validate.py +0 -194
  1227. codex-1.12.7/codex/views/const.py +0 -157
  1228. codex-1.12.7/codex/views/exceptions.py +0 -100
  1229. codex-1.12.7/codex/views/favorites.py +0 -80
  1230. codex-1.12.7/codex/views/frontend.py +0 -39
  1231. codex-1.12.7/codex/views/lazy_import.py +0 -24
  1232. codex-1.12.7/codex/views/mixins.py +0 -123
  1233. codex-1.12.7/codex/views/opds/authentication/v1.py +0 -89
  1234. codex-1.12.7/codex/views/opds/const.py +0 -122
  1235. codex-1.12.7/codex/views/opds/error.py +0 -71
  1236. codex-1.12.7/codex/views/opds/feed.py +0 -21
  1237. codex-1.12.7/codex/views/opds/metadata.py +0 -149
  1238. codex-1.12.7/codex/views/opds/opensearch/v1.py +0 -20
  1239. codex-1.12.7/codex/views/opds/start.py +0 -20
  1240. codex-1.12.7/codex/views/opds/urls.py +0 -31
  1241. codex-1.12.7/codex/views/opds/v1/const.py +0 -204
  1242. codex-1.12.7/codex/views/opds/v1/entry/entry.py +0 -161
  1243. codex-1.12.7/codex/views/opds/v1/entry/links.py +0 -184
  1244. codex-1.12.7/codex/views/opds/v1/facets.py +0 -173
  1245. codex-1.12.7/codex/views/opds/v1/feed.py +0 -228
  1246. codex-1.12.7/codex/views/opds/v1/links.py +0 -155
  1247. codex-1.12.7/codex/views/opds/v2/const.py +0 -197
  1248. codex-1.12.7/codex/views/opds/v2/feed/__init__.py +0 -214
  1249. codex-1.12.7/codex/views/opds/v2/feed/feed_links.py +0 -134
  1250. codex-1.12.7/codex/views/opds/v2/feed/groups.py +0 -191
  1251. codex-1.12.7/codex/views/opds/v2/feed/links.py +0 -146
  1252. codex-1.12.7/codex/views/opds/v2/feed/publications.py +0 -560
  1253. codex-1.12.7/codex/views/opds/v2/href.py +0 -65
  1254. codex-1.12.7/codex/views/opds/v2/manifest.py +0 -406
  1255. codex-1.12.7/codex/views/opds/v2/progression.py +0 -266
  1256. codex-1.12.7/codex/views/public.py +0 -42
  1257. codex-1.12.7/codex/views/reader/arcs.py +0 -149
  1258. codex-1.12.7/codex/views/reader/books.py +0 -235
  1259. codex-1.12.7/codex/views/reader/params.py +0 -70
  1260. codex-1.12.7/codex/views/reader/reader.py +0 -49
  1261. codex-1.12.7/codex/views/reader/settings.py +0 -343
  1262. codex-1.12.7/codex/views/settings.py +0 -512
  1263. codex-1.12.7/codex/views/timezone.py +0 -41
  1264. codex-1.12.7/codex/views/util.py +0 -68
  1265. codex-1.12.7/codex/views/version.py +0 -40
  1266. codex-1.12.7/codex/websockets/consumers.py +0 -61
  1267. codex-1.12.7/docs/DOCKER.md +0 -108
  1268. codex-1.12.7/docs/NEWS.md +0 -2147
  1269. codex-1.12.7/docs/README.md +0 -829
  1270. codex-1.12.7/eslint.config.js +0 -81
  1271. codex-1.12.7/frontend/.eslintcache +0 -1
  1272. codex-1.12.7/frontend/bin/fix-sh.sh +0 -7
  1273. codex-1.12.7/frontend/bin/lint-darwin.sh +0 -10
  1274. codex-1.12.7/frontend/bin/lint-sh.sh +0 -8
  1275. codex-1.12.7/frontend/bin/remark-for-claude.sh +0 -7
  1276. codex-1.12.7/frontend/bin/sort-ignore.sh +0 -10
  1277. codex-1.12.7/frontend/bin/version-node.sh +0 -15
  1278. codex-1.12.7/frontend/bun.lock +0 -1223
  1279. codex-1.12.7/frontend/package.json +0 -55
  1280. codex-1.12.7/frontend/src/admin.vue +0 -37
  1281. codex-1.12.7/frontend/src/api/v3/abortable.js +0 -89
  1282. codex-1.12.7/frontend/src/api/v3/admin.js +0 -74
  1283. codex-1.12.7/frontend/src/api/v3/auth.js +0 -32
  1284. codex-1.12.7/frontend/src/api/v3/base.js +0 -96
  1285. codex-1.12.7/frontend/src/api/v3/browser.js +0 -159
  1286. codex-1.12.7/frontend/src/api/v3/common.js +0 -118
  1287. codex-1.12.7/frontend/src/api/v3/favorites.js +0 -9
  1288. codex-1.12.7/frontend/src/api/v3/notify.js +0 -9
  1289. codex-1.12.7/frontend/src/api/v3/reader.js +0 -74
  1290. codex-1.12.7/frontend/src/app.vue +0 -115
  1291. codex-1.12.7/frontend/src/browser.vue +0 -77
  1292. codex-1.12.7/frontend/src/choices/admin-flag-choices.json +0 -13
  1293. codex-1.12.7/frontend/src/choices/admin-jobs.json +0 -399
  1294. codex-1.12.7/frontend/src/choices/admin-status-titles.json +0 -57
  1295. codex-1.12.7/frontend/src/choices/browser-choices.json +0 -266
  1296. codex-1.12.7/frontend/src/choices/browser-defaults.json +0 -54
  1297. codex-1.12.7/frontend/src/choices/browser-map.json +0 -75
  1298. codex-1.12.7/frontend/src/choices/browser-table-columns.json +0 -303
  1299. codex-1.12.7/frontend/src/choices/browser-table-default-columns.json +0 -53
  1300. codex-1.12.7/frontend/src/choices/websocket-messages.json +0 -12
  1301. codex-1.12.7/frontend/src/components/admin/admin-header.vue +0 -114
  1302. codex-1.12.7/frontend/src/components/admin/create-update-dialog/create-update-dialog.vue +0 -190
  1303. codex-1.12.7/frontend/src/components/admin/create-update-dialog/create-update-inputs-mixin.js +0 -60
  1304. codex-1.12.7/frontend/src/components/admin/create-update-dialog/group-create-update-inputs.vue +0 -99
  1305. codex-1.12.7/frontend/src/components/admin/create-update-dialog/library-create-update-inputs.vue +0 -122
  1306. codex-1.12.7/frontend/src/components/admin/create-update-dialog/user-create-update-inputs.vue +0 -126
  1307. codex-1.12.7/frontend/src/components/admin/drawer/admin-menu.vue +0 -68
  1308. codex-1.12.7/frontend/src/components/admin/status-helpers.js +0 -57
  1309. codex-1.12.7/frontend/src/components/admin/tabs/admin-section.scss +0 -70
  1310. codex-1.12.7/frontend/src/components/admin/tabs/custom-covers-panel.vue +0 -96
  1311. codex-1.12.7/frontend/src/components/admin/tabs/failed-imports-panel.vue +0 -151
  1312. codex-1.12.7/frontend/src/components/admin/tabs/flag-descriptions.json +0 -13
  1313. codex-1.12.7/frontend/src/components/admin/tabs/flag-groups.json +0 -18
  1314. codex-1.12.7/frontend/src/components/admin/tabs/flag-tab.vue +0 -275
  1315. codex-1.12.7/frontend/src/components/admin/tabs/group-tab.vue +0 -195
  1316. codex-1.12.7/frontend/src/components/admin/tabs/job-tab.vue +0 -612
  1317. codex-1.12.7/frontend/src/components/admin/tabs/library-tab.vue +0 -74
  1318. codex-1.12.7/frontend/src/components/admin/tabs/library-table.vue +0 -277
  1319. codex-1.12.7/frontend/src/components/admin/tabs/stats-tab.vue +0 -219
  1320. codex-1.12.7/frontend/src/components/admin/tabs/stats-table.vue +0 -91
  1321. codex-1.12.7/frontend/src/components/admin/tabs/user-tab.vue +0 -223
  1322. codex-1.12.7/frontend/src/components/auth/auth-menu.vue +0 -55
  1323. codex-1.12.7/frontend/src/components/auth/auth-token.vue +0 -132
  1324. codex-1.12.7/frontend/src/components/auth/change-password-dialog.vue +0 -208
  1325. codex-1.12.7/frontend/src/components/auth/login-dialog.vue +0 -177
  1326. codex-1.12.7/frontend/src/components/book-cover.vue +0 -207
  1327. codex-1.12.7/frontend/src/components/browser/card/browser-card-menu.vue +0 -69
  1328. codex-1.12.7/frontend/src/components/browser/card/card.vue +0 -316
  1329. codex-1.12.7/frontend/src/components/browser/card/controls.vue +0 -96
  1330. codex-1.12.7/frontend/src/components/browser/card/order-by-caption.vue +0 -99
  1331. codex-1.12.7/frontend/src/components/browser/card/subtitle.vue +0 -140
  1332. codex-1.12.7/frontend/src/components/browser/drawer/browser-settings-covers.vue +0 -65
  1333. codex-1.12.7/frontend/src/components/browser/drawer/browser-settings-group.vue +0 -61
  1334. codex-1.12.7/frontend/src/components/browser/drawer/browser-settings-misc.vue +0 -57
  1335. codex-1.12.7/frontend/src/components/browser/drawer/browser-settings-panel.vue +0 -25
  1336. codex-1.12.7/frontend/src/components/browser/drawer/browser-settings-saved.vue +0 -198
  1337. codex-1.12.7/frontend/src/components/browser/empty.vue +0 -86
  1338. codex-1.12.7/frontend/src/components/browser/main.vue +0 -390
  1339. codex-1.12.7/frontend/src/components/browser/table/browser-table-cell.vue +0 -395
  1340. codex-1.12.7/frontend/src/components/browser/table/browser-table-column-picker.vue +0 -574
  1341. codex-1.12.7/frontend/src/components/browser/table/browser-table.vue +0 -511
  1342. codex-1.12.7/frontend/src/components/browser/toolbars/breadcrumbs/breadcrumbs.vue +0 -139
  1343. codex-1.12.7/frontend/src/components/browser/toolbars/browser-toolbar-title.vue +0 -101
  1344. codex-1.12.7/frontend/src/components/browser/toolbars/nav/browser-nav-button.vue +0 -100
  1345. codex-1.12.7/frontend/src/components/browser/toolbars/nav/browser-toolbar-nav.vue +0 -47
  1346. codex-1.12.7/frontend/src/components/browser/toolbars/top/browser-toolbar-top.vue +0 -86
  1347. codex-1.12.7/frontend/src/components/browser/toolbars/top/filter-choice-list.vue +0 -219
  1348. codex-1.12.7/frontend/src/components/browser/toolbars/top/filter-sub-menu.vue +0 -418
  1349. codex-1.12.7/frontend/src/components/browser/toolbars/top/top-group-select.vue +0 -69
  1350. codex-1.12.7/frontend/src/components/confirm-dialog.vue +0 -122
  1351. codex-1.12.7/frontend/src/components/download-button.vue +0 -120
  1352. codex-1.12.7/frontend/src/components/favorite-toggle.vue +0 -88
  1353. codex-1.12.7/frontend/src/components/force-update-button.vue +0 -106
  1354. codex-1.12.7/frontend/src/components/force-update-confirm-dialog.vue +0 -71
  1355. codex-1.12.7/frontend/src/components/mark-read-button.vue +0 -85
  1356. codex-1.12.7/frontend/src/components/metadata/metadata-activator.vue +0 -60
  1357. codex-1.12.7/frontend/src/components/metadata/metadata-body.vue +0 -142
  1358. codex-1.12.7/frontend/src/components/metadata/metadata-chip.vue +0 -188
  1359. codex-1.12.7/frontend/src/components/metadata/metadata-controls.vue +0 -188
  1360. codex-1.12.7/frontend/src/components/metadata/metadata-cover.vue +0 -96
  1361. codex-1.12.7/frontend/src/components/metadata/metadata-dialog.vue +0 -201
  1362. codex-1.12.7/frontend/src/components/metadata/metadata-header.vue +0 -308
  1363. codex-1.12.7/frontend/src/components/metadata/metadata-ratings.vue +0 -75
  1364. codex-1.12.7/frontend/src/components/metadata/metadata-text.vue +0 -267
  1365. codex-1.12.7/frontend/src/components/reader/drawer/download-panel.vue +0 -79
  1366. codex-1.12.7/frontend/src/components/reader/drawer/keyboard-shortcuts-table.vue +0 -140
  1367. codex-1.12.7/frontend/src/components/reader/drawer/reader-settings-reader.vue +0 -50
  1368. codex-1.12.7/frontend/src/components/reader/drawer/reader-settings-scope.vue +0 -302
  1369. codex-1.12.7/frontend/src/components/reader/pager/page/page.vue +0 -228
  1370. codex-1.12.7/frontend/src/components/reader/pager/pager-horizontal.vue +0 -159
  1371. codex-1.12.7/frontend/src/components/reader/pager/pager.vue +0 -76
  1372. codex-1.12.7/frontend/src/components/reader/toolbars/nav/reader-book-change-nav-button.vue +0 -69
  1373. codex-1.12.7/frontend/src/components/reader/toolbars/nav/reader-nav-button.vue +0 -91
  1374. codex-1.12.7/frontend/src/components/reader/toolbars/top/reader-arc-select.vue +0 -166
  1375. codex-1.12.7/frontend/src/components/reader/toolbars/top/reader-toolbar-top.vue +0 -235
  1376. codex-1.12.7/frontend/src/components/settings/button.vue +0 -59
  1377. codex-1.12.7/frontend/src/components/settings/opds-dialog.vue +0 -82
  1378. codex-1.12.7/frontend/src/plugins/router.js +0 -119
  1379. codex-1.12.7/frontend/src/plugins/vuetify.js +0 -98
  1380. codex-1.12.7/frontend/src/reader.vue +0 -93
  1381. codex-1.12.7/frontend/src/route.js +0 -27
  1382. codex-1.12.7/frontend/src/stores/admin.js +0 -275
  1383. codex-1.12.7/frontend/src/stores/auth.js +0 -137
  1384. codex-1.12.7/frontend/src/stores/browser-select-many.js +0 -249
  1385. codex-1.12.7/frontend/src/stores/browser.js +0 -930
  1386. codex-1.12.7/frontend/src/stores/common.js +0 -112
  1387. codex-1.12.7/frontend/src/stores/favorites.js +0 -92
  1388. codex-1.12.7/frontend/src/stores/metadata.js +0 -250
  1389. codex-1.12.7/frontend/src/stores/reader.js +0 -964
  1390. codex-1.12.7/frontend/src/stores/socket.js +0 -252
  1391. codex-1.12.7/frontend/tests/unit/__snapshots__/reader-nav-button.test.js.snap +0 -9
  1392. codex-1.12.7/frontend/tests/unit/browser-select-many-store.test.js +0 -192
  1393. codex-1.12.7/frontend/tests/unit/browser-store-helpers.test.js +0 -119
  1394. codex-1.12.7/frontend/tests/unit/favorites-store.test.js +0 -159
  1395. codex-1.12.7/frontend/tests/unit/reader-nav-button.test.js +0 -68
  1396. codex-1.12.7/package.json +0 -107
  1397. codex-1.12.7/pyproject.toml +0 -414
  1398. codex-1.12.7/tests/importer/test_basic.py +0 -884
  1399. codex-1.12.7/tests/importer/test_update_all.py +0 -774
  1400. codex-1.12.7/tests/perf/run_baseline.py +0 -389
  1401. codex-1.12.7/tests/perf/run_opds_baseline.py +0 -369
  1402. codex-1.12.7/tests/perf/run_reader_baseline.py +0 -430
  1403. codex-1.12.7/tests/test_admin_query_counts.py +0 -104
  1404. codex-1.12.7/tests/test_browser_columns_registry.py +0 -211
  1405. codex-1.12.7/tests/test_browser_ordering.py +0 -815
  1406. codex-1.12.7/tests/test_browser_settings_table.py +0 -301
  1407. codex-1.12.7/tests/test_browser_table_response.py +0 -995
  1408. codex-1.12.7/tests/test_favorites_api.py +0 -481
  1409. codex-1.12.7/tests/test_fs_filters_ignore.py +0 -209
  1410. codex-1.12.7/tests/test_logging_filter.py +0 -68
  1411. codex-1.12.7/tests/test_metadata_group_list.py +0 -182
  1412. codex-1.12.7/tests/test_models.py +0 -130
  1413. codex-1.12.7/tests/test_snapshot_diff.py +0 -223
  1414. codex-1.12.7/uv.lock +0 -3649
  1415. codex-1.12.7/vulture_ignorelist.py +0 -4
  1416. {codex-1.12.7 → codex-2.0.0a1}/.dockerignore +0 -0
  1417. {codex-1.12.7 → codex-2.0.0a1}/.github/workflows/ci.yml +0 -0
  1418. {codex-1.12.7 → codex-2.0.0a1}/.gitignore +0 -0
  1419. {codex-1.12.7 → codex-2.0.0a1}/.prettierignore +0 -0
  1420. {codex-1.12.7 → codex-2.0.0a1}/.readthedocs.yaml +0 -0
  1421. {codex-1.12.7 → codex-2.0.0a1}/.remarkignore +0 -0
  1422. {codex-1.12.7 → codex-2.0.0a1}/.shellcheckrc +0 -0
  1423. {codex-1.12.7 → codex-2.0.0a1}/Makefile +0 -0
  1424. {codex-1.12.7 → codex-2.0.0a1}/bin/build-choices.sh +0 -0
  1425. {codex-1.12.7 → codex-2.0.0a1}/bin/build-dist.sh +0 -0
  1426. {codex-1.12.7 → codex-2.0.0a1}/bin/clean-pycache.sh +0 -0
  1427. {codex-1.12.7 → codex-2.0.0a1}/bin/collectstatic.sh +0 -0
  1428. {codex-1.12.7 → codex-2.0.0a1}/bin/dev-docker.sh +0 -0
  1429. {codex-1.12.7 → codex-2.0.0a1}/bin/dev-module.sh +0 -0
  1430. {codex-1.12.7 → codex-2.0.0a1}/bin/dev-prod-server.sh +0 -0
  1431. {codex-1.12.7 → codex-2.0.0a1}/bin/dev-reverse-proxy.sh +0 -0
  1432. {codex-1.12.7 → codex-2.0.0a1}/bin/docker-compose-exit.sh +0 -0
  1433. {codex-1.12.7 → codex-2.0.0a1}/bin/fix-python.sh +0 -0
  1434. {codex-1.12.7 → codex-2.0.0a1}/bin/fix.sh +0 -0
  1435. {codex-1.12.7 → codex-2.0.0a1}/bin/icons_transform.py +0 -0
  1436. {codex-1.12.7 → codex-2.0.0a1}/bin/kill-codex.sh +0 -0
  1437. {codex-1.12.7 → codex-2.0.0a1}/bin/kill-eslint_d.sh +0 -0
  1438. {codex-1.12.7 → codex-2.0.0a1}/bin/lint-python.sh +0 -0
  1439. {codex-1.12.7 → codex-2.0.0a1}/bin/lint.sh +0 -0
  1440. {codex-1.12.7 → codex-2.0.0a1}/bin/localize-db.sh +0 -0
  1441. {codex-1.12.7 → codex-2.0.0a1}/bin/localize_library.sql +0 -0
  1442. {codex-1.12.7 → codex-2.0.0a1}/bin/manage.py +0 -0
  1443. {codex-1.12.7 → codex-2.0.0a1}/bin/pm +0 -0
  1444. {codex-1.12.7 → codex-2.0.0a1}/bin/roman.py +0 -0
  1445. {codex-1.12.7 → codex-2.0.0a1}/bin/sync_comic_logo.py +0 -0
  1446. {codex-1.12.7 → codex-2.0.0a1}/bin/test-python.sh +0 -0
  1447. {codex-1.12.7 → codex-2.0.0a1}/bin/uml.sh +0 -0
  1448. {codex-1.12.7 → codex-2.0.0a1}/bin/update-deps-node.sh +0 -0
  1449. {codex-1.12.7 → codex-2.0.0a1}/bin/update-deps-python.sh +0 -0
  1450. {codex-1.12.7 → codex-2.0.0a1}/bin/vendor-patch-imports.sh +0 -0
  1451. {codex-1.12.7 → codex-2.0.0a1}/codex/__init__.py +0 -0
  1452. {codex-1.12.7 → codex-2.0.0a1}/codex/applications/__init__.py +0 -0
  1453. {codex-1.12.7 → codex-2.0.0a1}/codex/applications/lifespan.py +0 -0
  1454. {codex-1.12.7 → codex-2.0.0a1}/codex/asgi.py +0 -0
  1455. {codex-1.12.7 → codex-2.0.0a1}/codex/authentication.py +0 -0
  1456. {codex-1.12.7 → codex-2.0.0a1}/codex/cache.py +0 -0
  1457. {codex-1.12.7 → codex-2.0.0a1}/codex/choices/__init__.py +0 -0
  1458. {codex-1.12.7 → codex-2.0.0a1}/codex/choices/reader.py +0 -0
  1459. {codex-1.12.7 → codex-2.0.0a1}/codex/choices/search.py +0 -0
  1460. {codex-1.12.7 → codex-2.0.0a1}/codex/db_routers.py +0 -0
  1461. {codex-1.12.7 → codex-2.0.0a1}/codex/failed_login_log.py +0 -0
  1462. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/README.md +0 -0
  1463. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/__init__.py +0 -0
  1464. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/bookmark/__init__.py +0 -0
  1465. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/bookmark/bookmarkd.py +0 -0
  1466. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/bookmark/tasks.py +0 -0
  1467. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/bookmark/update.py +0 -0
  1468. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/bookmark/user_active.py +0 -0
  1469. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/covers/__init__.py +0 -0
  1470. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/covers/coverd.py +0 -0
  1471. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/covers/create.py +0 -0
  1472. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/covers/path.py +0 -0
  1473. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/covers/status.py +0 -0
  1474. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/covers/tasks.py +0 -0
  1475. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/cron/__init__.py +0 -0
  1476. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/cron/crond.py +0 -0
  1477. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/README.md +0 -0
  1478. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/__init__.py +0 -0
  1479. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/events.py +0 -0
  1480. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/import_task.py +0 -0
  1481. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/poller/__init__.py +0 -0
  1482. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/poller/snapshot_diff.py +0 -0
  1483. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/poller/status.py +0 -0
  1484. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/poller/tasks.py +0 -0
  1485. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/status.py +0 -0
  1486. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/tasks.py +0 -0
  1487. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/watcher/__init__.py +0 -0
  1488. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/watcher/data.py +0 -0
  1489. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/watcher/status.py +0 -0
  1490. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/fs/watcher/tasks.py +0 -0
  1491. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/mp_queue.py +0 -0
  1492. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/notifier/__init__.py +0 -0
  1493. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/notifier/notifierd.py +0 -0
  1494. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/restarter/__init__.py +0 -0
  1495. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/restarter/restarter.py +0 -0
  1496. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/restarter/status.py +0 -0
  1497. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/restarter/tasks.py +0 -0
  1498. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/__init__.py +0 -0
  1499. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/force_updater.py +0 -0
  1500. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/__init__.py +0 -0
  1501. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/create/__init__.py +0 -0
  1502. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/delete/covers.py +0 -0
  1503. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/failed/__init__.py +0 -0
  1504. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/failed/create.py +0 -0
  1505. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/failed/failed.py +0 -0
  1506. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/failed/query.py +0 -0
  1507. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/finish.py +0 -0
  1508. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/importer.py +0 -0
  1509. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/link/__init__.py +0 -0
  1510. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/link/delete.py +0 -0
  1511. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/link/many_to_many.py +0 -0
  1512. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/link/prepare.py +0 -0
  1513. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/link/sum.py +0 -0
  1514. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/moved/__init__.py +0 -0
  1515. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/moved/comics.py +0 -0
  1516. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/moved/folders.py +0 -0
  1517. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/pragmas.py +0 -0
  1518. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/query/__init__.py +0 -0
  1519. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/query/covers.py +0 -0
  1520. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/query/foreign_keys.py +0 -0
  1521. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/query/links.py +0 -0
  1522. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/query/update_fks.py +0 -0
  1523. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/read/__init__.py +0 -0
  1524. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/search/__init__.py +0 -0
  1525. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/search/prepare.py +0 -0
  1526. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/search/sync_m2m.py +0 -0
  1527. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/search/update.py +0 -0
  1528. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/__init__.py +0 -0
  1529. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/create.py +0 -0
  1530. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/delete.py +0 -0
  1531. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/failed.py +0 -0
  1532. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/link.py +0 -0
  1533. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/moved.py +0 -0
  1534. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/query.py +0 -0
  1535. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/read.py +0 -0
  1536. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/statii/search.py +0 -0
  1537. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/status.py +0 -0
  1538. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/importer/tasks.py +0 -0
  1539. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/janitor/__init__.py +0 -0
  1540. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/janitor/integrity/__init__.py +0 -0
  1541. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/janitor/integrity/foreign_keys.py +0 -0
  1542. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/janitor/scheduled_time.py +0 -0
  1543. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/__init__.py +0 -0
  1544. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/const.py +0 -0
  1545. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/handler.py +0 -0
  1546. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/optimize.py +0 -0
  1547. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/prepare.py +0 -0
  1548. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/remove.py +0 -0
  1549. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/status.py +0 -0
  1550. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/sync.py +0 -0
  1551. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/scribe/search/tasks.py +0 -0
  1552. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/status.py +0 -0
  1553. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/status_controller.py +0 -0
  1554. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/tasks.py +0 -0
  1555. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/telemeter/__init__.py +0 -0
  1556. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/telemeter/tasks.py +0 -0
  1557. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/threads.py +0 -0
  1558. {codex-1.12.7 → codex-2.0.0a1}/codex/librarian/worker.py +0 -0
  1559. {codex-1.12.7 → codex-2.0.0a1}/codex/middleware.py +0 -0
  1560. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0001_init.py +0 -0
  1561. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0002_auto_20200826_0622.py +0 -0
  1562. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0003_auto_20200831_2033.py +0 -0
  1563. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0004_failedimport.py +0 -0
  1564. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0005_auto_20200918_0146.py +0 -0
  1565. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0006_update_default_names_and_remove_duplicate_comics.py +0 -0
  1566. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0007_auto_20211210_1710.py +0 -0
  1567. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0008_alter_comic_created_at_alter_comic_format_and_more.py +0 -0
  1568. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0009_alter_comic_parent_folder.py +0 -0
  1569. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0010_haystack.py +0 -0
  1570. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0011_library_groups_and_metadata_changes.py +0 -0
  1571. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0012_rename_description_comic_comments.py +0 -0
  1572. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0013_int_issue_count_longer_charfields.py +0 -0
  1573. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0014_pdf_issue_suffix_remove_cover_image_sort_name.py +0 -0
  1574. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0015_link_comics_to_top_level_folders.py +0 -0
  1575. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0016_remove_comic_cover_path_librarianstatus.py +0 -0
  1576. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0017_alter_timestamp_options_alter_adminflag_name_and_more.py +0 -0
  1577. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0018_rename_userbookmark_bookmark.py +0 -0
  1578. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0019_delete_queuejob.py +0 -0
  1579. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0020_remove_search_tables.py +0 -0
  1580. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0021_bookmark_fit_to_choices_read_in_reverse.py +0 -0
  1581. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0022_bookmark_vertical_useractive_null_statuses.py +0 -0
  1582. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0023_rename_credit_creator_and_more.py +0 -0
  1583. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0024_comic_gtin_comic_story_arc_number.py +0 -0
  1584. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0025_add_story_arc_number.py +0 -0
  1585. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0026_comicbox_1.py +0 -0
  1586. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0027_import_order_and_covers.py +0 -0
  1587. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0028_telemeter.py +0 -0
  1588. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0029_comicfts.py +0 -0
  1589. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0030_nocase_collation_day_month_indexes_status_types.py +0 -0
  1590. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0031_adminflag_banner.py +0 -0
  1591. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0032_alter_librarianstatus_preactive.py +0 -0
  1592. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0033_alter_librarianstatus_status_type.py +0 -0
  1593. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0035_fts_optmize.py +0 -0
  1594. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0036_alter_comic_path_alter_customcover_path_and_more.py +0 -0
  1595. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0037_redefine_reading_direction_filetype_choices.py +0 -0
  1596. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0040_reset_global_cache_book.py +0 -0
  1597. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/0041_cleanup_phantom_comic_as_folder_rows.py +0 -0
  1598. {codex-1.12.7 → codex-2.0.0a1}/codex/migrations/__init__.py +0 -0
  1599. {codex-1.12.7 → codex-2.0.0a1}/codex/models/age_rating.py +0 -0
  1600. {codex-1.12.7 → codex-2.0.0a1}/codex/models/auth.py +0 -0
  1601. {codex-1.12.7 → codex-2.0.0a1}/codex/models/base.py +0 -0
  1602. {codex-1.12.7 → codex-2.0.0a1}/codex/models/bookmark.py +0 -0
  1603. {codex-1.12.7 → codex-2.0.0a1}/codex/models/choices.py +0 -0
  1604. {codex-1.12.7 → codex-2.0.0a1}/codex/models/functions.py +0 -0
  1605. {codex-1.12.7 → codex-2.0.0a1}/codex/models/identifier.py +0 -0
  1606. {codex-1.12.7 → codex-2.0.0a1}/codex/models/query.py +0 -0
  1607. {codex-1.12.7 → codex-2.0.0a1}/codex/models/util.py +0 -0
  1608. {codex-1.12.7 → codex-2.0.0a1}/codex/run.py +0 -0
  1609. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/README.md +0 -0
  1610. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/__init__.py +0 -0
  1611. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/admin/__init__.py +0 -0
  1612. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/admin/tasks.py +0 -0
  1613. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/browser/__init__.py +0 -0
  1614. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/browser/choices.py +0 -0
  1615. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/browser/filters.py +0 -0
  1616. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/browser/saved.py +0 -0
  1617. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/fields/auth.py +0 -0
  1618. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/fields/base.py +0 -0
  1619. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/fields/browser.py +0 -0
  1620. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/fields/sanitized.py +0 -0
  1621. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/fields/settings.py +0 -0
  1622. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/fields/stats.py +0 -0
  1623. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/fields/vuetify.py +0 -0
  1624. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/homepage.py +0 -0
  1625. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/mixins.py +0 -0
  1626. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/models/__init__.py +0 -0
  1627. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/models/admin.py +0 -0
  1628. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/models/base.py +0 -0
  1629. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/models/bookmark.py +0 -0
  1630. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/models/pycountry.py +0 -0
  1631. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/__init__.py +0 -0
  1632. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/authentication.py +0 -0
  1633. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/urls.py +0 -0
  1634. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/v2/__init__.py +0 -0
  1635. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/v2/facet.py +0 -0
  1636. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/v2/feed.py +0 -0
  1637. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/v2/links.py +0 -0
  1638. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/v2/metadata.py +0 -0
  1639. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/opds/v2/unused.py +0 -0
  1640. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/redirect.py +0 -0
  1641. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/settings.py +0 -0
  1642. {codex-1.12.7 → codex-2.0.0a1}/codex/serializers/versions.py +0 -0
  1643. {codex-1.12.7 → codex-2.0.0a1}/codex/settings/README.md +0 -0
  1644. {codex-1.12.7 → codex-2.0.0a1}/codex/settings/hypercorn_migrate.py +0 -0
  1645. {codex-1.12.7 → codex-2.0.0a1}/codex/settings/servestatic.py +0 -0
  1646. {codex-1.12.7 → codex-2.0.0a1}/codex/settings/timezone.py +0 -0
  1647. {codex-1.12.7 → codex-2.0.0a1}/codex/signals/__init__.py +0 -0
  1648. {codex-1.12.7 → codex-2.0.0a1}/codex/signals/os_signals.py +0 -0
  1649. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VCheckbox-ChRKi1kj.css +0 -0
  1650. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VCheckbox-ChRKi1kj.css.br +0 -0
  1651. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VCheckbox-ChRKi1kj.css.gz +0 -0
  1652. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VCombobox-C3ha-zP2.css +0 -0
  1653. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VCombobox-C3ha-zP2.css.br +0 -0
  1654. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VCombobox-C3ha-zP2.css.gz +0 -0
  1655. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VProgressCircular-Du8ZZdoy.css +0 -0
  1656. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VProgressCircular-Du8ZZdoy.css.br +0 -0
  1657. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VProgressCircular-Du8ZZdoy.css.gz +0 -0
  1658. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VRadioGroup-C9f4tbih.css +0 -0
  1659. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VRadioGroup-C9f4tbih.css.br +0 -0
  1660. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VRadioGroup-C9f4tbih.css.gz +0 -0
  1661. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VWindowItem-D7nMrfHD.css +0 -0
  1662. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VWindowItem-D7nMrfHD.css.br +0 -0
  1663. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/VWindowItem-D7nMrfHD.css.gz +0 -0
  1664. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/admin-settings-button-progress-DJAsUqRu.css +0 -0
  1665. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/clipboard-CHKZWj7s.css +0 -0
  1666. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/clipboard-CHKZWj7s.css.br +0 -0
  1667. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/clipboard-CHKZWj7s.css.gz +0 -0
  1668. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/datetime-column-BH-nhgFS.css +0 -0
  1669. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/http-error-1LOpL9mn.css +0 -0
  1670. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/http-error-1LOpL9mn.css.br +0 -0
  1671. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/http-error-1LOpL9mn.css.gz +0 -0
  1672. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/materialdesignicons-webfont-B7mPwVP_.ttf +0 -0
  1673. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/materialdesignicons-webfont-B7mPwVP_.ttf.br +0 -0
  1674. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/materialdesignicons-webfont-B7mPwVP_.ttf.gz +0 -0
  1675. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/materialdesignicons-webfont-CSr8KVlo.eot +0 -0
  1676. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/materialdesignicons-webfont-CSr8KVlo.eot.br +0 -0
  1677. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/materialdesignicons-webfont-CSr8KVlo.eot.gz +0 -0
  1678. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/materialdesignicons-webfont-Dp5v-WZN.woff2 +0 -0
  1679. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/materialdesignicons-webfont-PXm3-2wK.woff +0 -0
  1680. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/pdf-doc-RMRstq1W.css +0 -0
  1681. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/pdf-doc-RMRstq1W.css.br +0 -0
  1682. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/pdf-doc-RMRstq1W.css.gz +0 -0
  1683. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/rolldown-runtime-DK3Fl9T5.js +0 -0
  1684. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/rolldown-runtime-DK3Fl9T5.js.br +0 -0
  1685. /codex-1.12.7/codex/static/assets/VForm-DxBt30-N.css → /codex-2.0.0a1/codex/static/assets/submit-footer-DxBt30-N.css +0 -0
  1686. /codex-1.12.7/codex/static/assets/VForm-DxBt30-N.css.br → /codex-2.0.0a1/codex/static/assets/submit-footer-DxBt30-N.css.br +0 -0
  1687. /codex-1.12.7/codex/static/assets/VForm-DxBt30-N.css.gz → /codex-2.0.0a1/codex/static/assets/submit-footer-DxBt30-N.css.gz +0 -0
  1688. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/tooltip-BI1qRHEp.css +0 -0
  1689. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/tooltip-BI1qRHEp.css.br +0 -0
  1690. {codex-1.12.7 → codex-2.0.0a1}/codex/static/assets/tooltip-BI1qRHEp.css.gz +0 -0
  1691. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/comic-165.webp +0 -0
  1692. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/comic.svg +0 -0
  1693. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/comic.svg.br +0 -0
  1694. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/comic.svg.gz +0 -0
  1695. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/folder.svg +0 -0
  1696. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/folder.svg.br +0 -0
  1697. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/folder.svg.gz +0 -0
  1698. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/imprint.svg +0 -0
  1699. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/imprint.svg.br +0 -0
  1700. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/imprint.svg.gz +0 -0
  1701. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/logo-32.webp +0 -0
  1702. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/logo-maskable-180.webp +0 -0
  1703. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/logo-maskable.svg +0 -0
  1704. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/logo-maskable.svg.br +0 -0
  1705. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/logo-maskable.svg.gz +0 -0
  1706. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/logo.svg +0 -0
  1707. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/logo.svg.br +0 -0
  1708. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/logo.svg.gz +0 -0
  1709. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/publisher.svg +0 -0
  1710. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/publisher.svg.br +0 -0
  1711. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/publisher.svg.gz +0 -0
  1712. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/series.svg +0 -0
  1713. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/series.svg.br +0 -0
  1714. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/series.svg.gz +0 -0
  1715. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/story-arc.svg +0 -0
  1716. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/story-arc.svg.br +0 -0
  1717. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/story-arc.svg.gz +0 -0
  1718. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/volume.svg +0 -0
  1719. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/volume.svg.br +0 -0
  1720. {codex-1.12.7 → codex-2.0.0a1}/codex/static/img/volume.svg.gz +0 -0
  1721. {codex-1.12.7 → codex-2.0.0a1}/codex/static/pwa/offline.html +0 -0
  1722. {codex-1.12.7 → codex-2.0.0a1}/codex/static/pwa/offline.html.br +0 -0
  1723. {codex-1.12.7 → codex-2.0.0a1}/codex/static/pwa/offline.html.gz +0 -0
  1724. {codex-1.12.7 → codex-2.0.0a1}/codex/static/robots.txt +0 -0
  1725. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/.picopt_treestamps.yaml +0 -0
  1726. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/comic-165.webp +0 -0
  1727. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/comic.svg +0 -0
  1728. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/folder.svg +0 -0
  1729. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/imprint.svg +0 -0
  1730. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/logo-32.webp +0 -0
  1731. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/logo-maskable-180.webp +0 -0
  1732. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/logo-maskable.svg +0 -0
  1733. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/logo.svg +0 -0
  1734. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/publisher.svg +0 -0
  1735. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/series.svg +0 -0
  1736. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/story-arc.svg +0 -0
  1737. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/img/volume.svg +0 -0
  1738. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/pwa/offline.html +0 -0
  1739. {codex-1.12.7 → codex-2.0.0a1}/codex/static_src/robots.txt +0 -0
  1740. {codex-1.12.7 → codex-2.0.0a1}/codex/templates/README.md +0 -0
  1741. {codex-1.12.7 → codex-2.0.0a1}/codex/templates/headers-icons.html +0 -0
  1742. {codex-1.12.7 → codex-2.0.0a1}/codex/templates/index.html +0 -0
  1743. {codex-1.12.7 → codex-2.0.0a1}/codex/templates/pwa/headers.html +0 -0
  1744. {codex-1.12.7 → codex-2.0.0a1}/codex/templates/pwa/manifest.webmanifest +0 -0
  1745. {codex-1.12.7 → codex-2.0.0a1}/codex/templates/pwa/serviceworker-register.js +0 -0
  1746. {codex-1.12.7 → codex-2.0.0a1}/codex/templates/pwa/serviceworker.js +0 -0
  1747. {codex-1.12.7 → codex-2.0.0a1}/codex/urls/__init__.py +0 -0
  1748. {codex-1.12.7 → codex-2.0.0a1}/codex/urls/api/__init__.py +0 -0
  1749. {codex-1.12.7 → codex-2.0.0a1}/codex/urls/const.py +0 -0
  1750. {codex-1.12.7 → codex-2.0.0a1}/codex/urls/opds/__init__.py +0 -0
  1751. {codex-1.12.7 → codex-2.0.0a1}/codex/urls/opds/authentication.py +0 -0
  1752. {codex-1.12.7 → codex-2.0.0a1}/codex/urls/opds/binary.py +0 -0
  1753. {codex-1.12.7 → codex-2.0.0a1}/codex/urls/pwa.py +0 -0
  1754. {codex-1.12.7 → codex-2.0.0a1}/codex/urls/spectacular.py +0 -0
  1755. {codex-1.12.7 → codex-2.0.0a1}/codex/util.py +0 -0
  1756. {codex-1.12.7 → codex-2.0.0a1}/codex/version.py +0 -0
  1757. {codex-1.12.7 → codex-2.0.0a1}/codex/views/README.md +0 -0
  1758. {codex-1.12.7 → codex-2.0.0a1}/codex/views/__init__.py +0 -0
  1759. {codex-1.12.7 → codex-2.0.0a1}/codex/views/admin/__init__.py +0 -0
  1760. {codex-1.12.7 → codex-2.0.0a1}/codex/views/admin/age_rating_metron.py +0 -0
  1761. {codex-1.12.7 → codex-2.0.0a1}/codex/views/admin/group.py +0 -0
  1762. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/__init__.py +0 -0
  1763. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/annotate/__init__.py +0 -0
  1764. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/choices.py +0 -0
  1765. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/const.py +0 -0
  1766. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/filters/__init__.py +0 -0
  1767. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/filters/bookmark.py +0 -0
  1768. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/filters/search/__init__.py +0 -0
  1769. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/filters/search/field/__init__.py +0 -0
  1770. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/filters/search/field/column.py +0 -0
  1771. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/filters/search/field/filter.py +0 -0
  1772. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/filters/search/field/parse.py +0 -0
  1773. {codex-1.12.7 → codex-2.0.0a1}/codex/views/browser/filters/search/fts.py +0 -0
  1774. {codex-1.12.7 → codex-2.0.0a1}/codex/views/download.py +0 -0
  1775. {codex-1.12.7 → codex-2.0.0a1}/codex/views/error.py +0 -0
  1776. {codex-1.12.7 → codex-2.0.0a1}/codex/views/healthcheck.py +0 -0
  1777. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/__init__.py +0 -0
  1778. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/auth.py +0 -0
  1779. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/authentication/__init__.py +0 -0
  1780. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/binary.py +0 -0
  1781. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/opensearch/__init__.py +0 -0
  1782. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/settings.py +0 -0
  1783. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/user_agent.py +0 -0
  1784. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/v1/__init__.py +0 -0
  1785. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/v1/entry/__init__.py +0 -0
  1786. {codex-1.12.7 → codex-2.0.0a1}/codex/views/opds/v2/__init__.py +0 -0
  1787. {codex-1.12.7 → codex-2.0.0a1}/codex/views/pwa.py +0 -0
  1788. {codex-1.12.7 → codex-2.0.0a1}/codex/views/reader/__init__.py +0 -0
  1789. {codex-1.12.7 → codex-2.0.0a1}/codex/views/reader/_archive_cache.py +0 -0
  1790. {codex-1.12.7 → codex-2.0.0a1}/codex/views/reader/page.py +0 -0
  1791. {codex-1.12.7 → codex-2.0.0a1}/codex/views/template.py +0 -0
  1792. {codex-1.12.7 → codex-2.0.0a1}/codex/websockets/README.md +0 -0
  1793. {codex-1.12.7 → codex-2.0.0a1}/codex/websockets/__init__.py +0 -0
  1794. {codex-1.12.7 → codex-2.0.0a1}/codex/websockets/listener.py +0 -0
  1795. {codex-1.12.7 → codex-2.0.0a1}/codex/websockets/mp_queue.py +0 -0
  1796. {codex-1.12.7 → codex-2.0.0a1}/compose.yaml +0 -0
  1797. {codex-1.12.7 → codex-2.0.0a1}/docs/WINDOWS.md +0 -0
  1798. {codex-1.12.7 → codex-2.0.0a1}/docs/codex/img/logo.svg +0 -0
  1799. {codex-1.12.7 → codex-2.0.0a1}/docs/requirements.txt +0 -0
  1800. {codex-1.12.7 → codex-2.0.0a1}/docs/strange.jpg +0 -0
  1801. {codex-1.12.7 → codex-2.0.0a1}/docs/style.css +0 -0
  1802. {codex-1.12.7 → codex-2.0.0a1}/docs/style.material.css +0 -0
  1803. {codex-1.12.7 → codex-2.0.0a1}/docs/style.mkdocs.css +0 -0
  1804. {codex-1.12.7 → codex-2.0.0a1}/docs/style.readthedocs.css +0 -0
  1805. {codex-1.12.7 → codex-2.0.0a1}/frontend/.gitignore +0 -0
  1806. {codex-1.12.7 → codex-2.0.0a1}/frontend/.npmrc +0 -0
  1807. {codex-1.12.7 → codex-2.0.0a1}/frontend/.prettierignore +0 -0
  1808. {codex-1.12.7 → codex-2.0.0a1}/frontend/.remarkignore +0 -0
  1809. {codex-1.12.7 → codex-2.0.0a1}/frontend/.shellcheckrc +0 -0
  1810. {codex-1.12.7 → codex-2.0.0a1}/frontend/Makefile +0 -0
  1811. {codex-1.12.7 → codex-2.0.0a1}/frontend/README.md +0 -0
  1812. {codex-1.12.7 → codex-2.0.0a1}/frontend/bin/dev-server.sh +0 -0
  1813. {codex-1.12.7 → codex-2.0.0a1}/frontend/bin/fix.sh +0 -0
  1814. {codex-1.12.7 → codex-2.0.0a1}/frontend/bin/kill-eslint_d.sh +0 -0
  1815. {codex-1.12.7 → codex-2.0.0a1}/frontend/bin/lint.sh +0 -0
  1816. {codex-1.12.7 → codex-2.0.0a1}/frontend/bin/roman.py +0 -0
  1817. {codex-1.12.7 → codex-2.0.0a1}/frontend/bin/update-deps-node.sh +0 -0
  1818. {codex-1.12.7 → codex-2.0.0a1}/frontend/cfg/codex-frontend.mk +0 -0
  1819. {codex-1.12.7 → codex-2.0.0a1}/frontend/cfg/common.mk +0 -0
  1820. {codex-1.12.7 → codex-2.0.0a1}/frontend/cfg/help.mk +0 -0
  1821. {codex-1.12.7 → codex-2.0.0a1}/frontend/cfg/node.mk +0 -0
  1822. {codex-1.12.7 → codex-2.0.0a1}/frontend/jsconfig.json +0 -0
  1823. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/choices/browser-table-column-costs.json +0 -0
  1824. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/choices/reader-choices.json +0 -0
  1825. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/choices/reader-defaults.json +0 -0
  1826. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/choices/reader-map.json +0 -0
  1827. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/choices/search-map.json +0 -0
  1828. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/comic-name.js +0 -0
  1829. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/browser-link.vue +0 -0
  1830. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/create-update-dialog/create-update-button.vue +0 -0
  1831. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/create-update-dialog/duration-input.vue +0 -0
  1832. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/create-update-dialog/relation-picker.vue +0 -0
  1833. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/create-update-dialog/server-folder-picker.vue +0 -0
  1834. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/drawer/admin-settings-button-progress.vue +0 -0
  1835. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/drawer/admin-settings-drawer.vue +0 -0
  1836. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/drawer/admin-settings-panel.vue +0 -0
  1837. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/drawer/status-list-item.vue +0 -0
  1838. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/drawer/status-list.vue +0 -0
  1839. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/group-chip.vue +0 -0
  1840. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/tabs/admin-table.vue +0 -0
  1841. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/tabs/datetime-column.vue +0 -0
  1842. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/tabs/delete-row-dialog.vue +0 -0
  1843. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/tabs/relation-chips.vue +0 -0
  1844. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/tabs/tabs.vue +0 -0
  1845. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/admin/use-now-timer.js +0 -0
  1846. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/anchors.scss +0 -0
  1847. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/auth/auth-form-mixin.js +0 -0
  1848. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/banner.vue +0 -0
  1849. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/book-cover.scss +0 -0
  1850. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/browser-header.vue +0 -0
  1851. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/drawer/browser-settings-drawer.vue +0 -0
  1852. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/filter-warning-snackbar.vue +0 -0
  1853. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/breadcrumbs/browser-toolbar-breadcrumbs.vue +0 -0
  1854. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/search/browser-toolbar-search.vue +0 -0
  1855. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/search/search-combobox.vue +0 -0
  1856. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/search/search-help-text.vue +0 -0
  1857. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/search/search-help.vue +0 -0
  1858. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/select-many/browser-toolbar-select-many.vue +0 -0
  1859. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/top/columns-button.vue +0 -0
  1860. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/top/filter-by-select.vue +0 -0
  1861. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/top/order-by-select.vue +0 -0
  1862. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/top/order-reverse-button.vue +0 -0
  1863. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/top/search-button.vue +0 -0
  1864. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/top/toolbar-button.vue +0 -0
  1865. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/browser/toolbars/top/view-mode-toggle.vue +0 -0
  1866. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/cancel-button.vue +0 -0
  1867. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/clipboard.vue +0 -0
  1868. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/close-button.vue +0 -0
  1869. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/codex-list-item.vue +0 -0
  1870. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/confirm-footer.vue +0 -0
  1871. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/empty.vue +0 -0
  1872. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/metadata/expand-button.vue +0 -0
  1873. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/metadata/metadata-tags.vue +0 -0
  1874. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/metadata/table.scss +0 -0
  1875. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/metadata/tags-table.vue +0 -0
  1876. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/pagination-nav-button.vue +0 -0
  1877. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/pagination-slider.vue +0 -0
  1878. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/pagination-toolbar.vue +0 -0
  1879. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/placeholder-loading.vue +0 -0
  1880. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/book-change-activator.vue +0 -0
  1881. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/book-change-drawer.vue +0 -0
  1882. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/books-window.vue +0 -0
  1883. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/change-column.scss +0 -0
  1884. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/drawer/_expansion-panel-overrides.scss +0 -0
  1885. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/drawer/keyboard-shortcuts-panel.vue +0 -0
  1886. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/drawer/reader-settings-controls.vue +0 -0
  1887. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/drawer/reader-settings-drawer.vue +0 -0
  1888. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/drawer/reader-settings-panel.vue +0 -0
  1889. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/drawer/settings-indicator-dot.vue +0 -0
  1890. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/empty.vue +0 -0
  1891. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/pager/horizontal-pages.vue +0 -0
  1892. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/pager/page/page-error.vue +0 -0
  1893. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/pager/page/page-img.vue +0 -0
  1894. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/pager/page/page-loading.vue +0 -0
  1895. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/pager/page-change-link.vue +0 -0
  1896. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/pager/pager-vertical.vue +0 -0
  1897. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/pager/pdf-doc.vue +0 -0
  1898. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/pager/scale-for-scroll.vue +0 -0
  1899. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/reader/toolbars/nav/reader-toolbar-nav.vue +0 -0
  1900. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/scale-button.vue +0 -0
  1901. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/session-error-snackbar.vue +0 -0
  1902. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/settings/docs-footer.vue +0 -0
  1903. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/settings/opds-url.vue +0 -0
  1904. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/settings/settings-drawer.vue +0 -0
  1905. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/settings/version-footer.vue +0 -0
  1906. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/submit-footer.vue +0 -0
  1907. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/toolbar-select.vue +0 -0
  1908. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/components/unauthorized.vue +0 -0
  1909. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/datetime.js +0 -0
  1910. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/http-error.vue +0 -0
  1911. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/main.js +0 -0
  1912. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/platform.js +0 -0
  1913. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/plugins/drag-scroll.js +0 -0
  1914. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/stores/store.js +0 -0
  1915. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/util.js +0 -0
  1916. {codex-1.12.7 → codex-2.0.0a1}/frontend/src/vuetify-items.js +0 -0
  1917. {codex-1.12.7 → codex-2.0.0a1}/frontend/tests/unit/browser-table-cell.test.js +0 -0
  1918. {codex-1.12.7 → codex-2.0.0a1}/frontend/tests/unit/browser-table-column-picker.test.js +0 -0
  1919. {codex-1.12.7 → codex-2.0.0a1}/frontend/vite.config.js +0 -0
  1920. {codex-1.12.7 → codex-2.0.0a1}/img/comic.svg +0 -0
  1921. {codex-1.12.7 → codex-2.0.0a1}/img/folder.svg +0 -0
  1922. {codex-1.12.7 → codex-2.0.0a1}/img/imprint.svg +0 -0
  1923. {codex-1.12.7 → codex-2.0.0a1}/img/logo-maskable.svg +0 -0
  1924. {codex-1.12.7 → codex-2.0.0a1}/img/logo.svg +0 -0
  1925. {codex-1.12.7 → codex-2.0.0a1}/img/publisher.svg +0 -0
  1926. {codex-1.12.7 → codex-2.0.0a1}/img/series.svg +0 -0
  1927. {codex-1.12.7 → codex-2.0.0a1}/img/story-arc.svg +0 -0
  1928. {codex-1.12.7 → codex-2.0.0a1}/img/volume.svg +0 -0
  1929. {codex-1.12.7 → codex-2.0.0a1}/mkdocs.yml +0 -0
  1930. {codex-1.12.7 → codex-2.0.0a1}/tests/README.md +0 -0
  1931. {codex-1.12.7 → codex-2.0.0a1}/tests/__init__.py +0 -0
  1932. {codex-1.12.7 → codex-2.0.0a1}/tests/files/comicbox-2-example.cbz +0 -0
  1933. {codex-1.12.7 → codex-2.0.0a1}/tests/files/comicbox-2-update.cbz +0 -0
  1934. {codex-1.12.7 → codex-2.0.0a1}/tests/files/comicbox.example.yaml +0 -0
  1935. {codex-1.12.7 → codex-2.0.0a1}/tests/files/comicbox.update.yaml +0 -0
  1936. {codex-1.12.7 → codex-2.0.0a1}/tests/importer/__init__.py +0 -0
  1937. {codex-1.12.7 → codex-2.0.0a1}/tests/importer/test_update_none.py +0 -0
  1938. {codex-1.12.7 → codex-2.0.0a1}/tests/nginx-local-codex.conf +0 -0
  1939. {codex-1.12.7 → codex-2.0.0a1}/tests/perf/__init__.py +0 -0
  1940. {codex-1.12.7 → codex-2.0.0a1}/tests/test_age_rating_acl.py +0 -0
  1941. {codex-1.12.7 → codex-2.0.0a1}/tests/test_asgi.py +0 -0
  1942. {codex-1.12.7 → codex-2.0.0a1}/tests/test_failed_login_log.py +0 -0
  1943. {codex-1.12.7 → codex-2.0.0a1}/tests/test_poller_stat_refresh.py +0 -0
  1944. {codex-1.12.7 → codex-2.0.0a1}/tests/test_search_fts.py +0 -0
codex-2.0.0a1/NEWS.md ADDED
@@ -0,0 +1,2188 @@
1
+ # 📜 Codex News
2
+
3
+ <img src="codex/img/logo.svg" style="
4
+ height: 128px;
5
+ width: 128px;
6
+ border-radius: 128px;
7
+ " />
8
+
9
+ ## v2.0.0 - Tag Editing & Online Tagging
10
+
11
+ - Notice
12
+ - This is a major upgrade. A one-time database migration runs on first
13
+ startup; back up your `config` directory before upgrading.
14
+ - Editing tags writes to your comic files; the comics directory must be
15
+ mounted writable with write permission for tag editing to work.
16
+ - Breaking Changes
17
+ - Admin settings (SMTP, rate limits, browser page size, cover upload size)
18
+ moved from `codex.toml` into the Admin UI and are now editable without a
19
+ restart. Existing values are imported automatically on upgrade; those
20
+ `codex.toml` sections are deprecated.
21
+ - Custom covers are now managed in the web UI. Legacy filesystem covers
22
+ (in-library `.codex-cover.*` files and the covers-only library) migrate
23
+ automatically on first startup.
24
+ - The browser and reader page URLs changed; bookmarks to specific pages may
25
+ need re-navigating from the home screen. OPDS apps reconnect on their own.
26
+ - The HTTP API moved from `/api/v3/` to `/api/v4/`.
27
+ - Fixes
28
+ - OPDS 1.2, 2.0, and OpenSearch feeds are now spec-compliant.
29
+ - Folder covers respect favorites.
30
+ - Critical ratings normalized to a consistent 0–5 scale.
31
+ - The age-rating "As Tagged" panel hides when it has no entries.
32
+ - Features
33
+ - Edit the tags on one or many comics directly in the browser — credits,
34
+ story arcs, identifiers, and more — written back to your comic files.
35
+ - Online tagging: look up and apply metadata from online sources, with
36
+ interactive match prompts, rate-limit display, and per-source credentials
37
+ in the new Admin Tagging tab.
38
+ - Upload, replace, and remove custom covers for any group from the web UI,
39
+ plus a Custom Covers admin tab.
40
+ - Back up and restore all user data — accounts, bookmarks, favorites,
41
+ settings, libraries — via a `user_data.sqlite` sidecar, the Admin Restore
42
+ tab, or `codex restore_user_data`. Snapshotted nightly.
43
+ - Optional self-service password reset, and email verification for new
44
+ sign-ups (both require SMTP).
45
+ - New user Profile dialog for self-service username, email, and API token
46
+ (moved here from the sidebar).
47
+ - Database and user-data backups are now compressed, dated, and auto-pruned.
48
+ - Redesigned admin panel has moves settings under relevant tabs.
49
+
50
+ ## v1.12.7
51
+
52
+ - Fixes
53
+ - Fix folder custom covers.
54
+ - Fix AUTH_REMOTE_USER for api endpoints.
55
+
56
+ ## v1.12.6
57
+
58
+ - Fixes
59
+ - Admin panel and other lazy-loaded routes broken.
60
+
61
+ ## v1.12.5
62
+
63
+ - Fixes
64
+ - Fix "Last Read" column in table view crashing.
65
+ - Ignore dotfiles.
66
+ - Features
67
+ - Select by range in multi-select with shift+click.
68
+
69
+ ## v1.12.4
70
+
71
+ - Fixes
72
+ - Crash on Cleanup Favorites Janitor Job.
73
+ - Features
74
+ - Force Update Tags by individual group.
75
+
76
+ ## v1.12.3
77
+
78
+ - Fixes
79
+ - Fix scroll bar controls appearing on the Edge browser in tags screen
80
+ values.
81
+ - Features
82
+ - Add touch swiping back to the reader with an implementation that's less
83
+ twitchy than before.
84
+
85
+ ## v1.12.2
86
+
87
+ - Fixes
88
+ - Ordering in browser card mode was broken for groups
89
+
90
+ ## v1.12.1
91
+
92
+ - Features
93
+ - Fail2Ban support with a dedicated log. See README.
94
+ - Fixes
95
+ - Comic filename parsing improvements.
96
+ - Downgrade noisy profile forbidden WARNINGS to DEBUG. They are a normal
97
+ part of connecting.
98
+
99
+ ## v1.12.0
100
+
101
+ - Features
102
+ - Browser Table mode shows configurable, sortable, metadata columns.
103
+ - Favorite objects and filter on them.
104
+ - Serve image-dominant PDF pages as just their images.
105
+
106
+ ## v1.11.5
107
+
108
+ - Fixes
109
+ - Fix occasional recreation of comics on docker or network filesystems.
110
+ - Fix double polling of some libraries.
111
+ - Fix Codex sometimes hanging on shutdown after Ctrl+C.
112
+ - Fix PDFs rendering OCR overlay text.
113
+ - Fix PDFs sometimes not rendering at correct resolution
114
+
115
+ ## v1.11.4
116
+
117
+ - Fixes
118
+ - Fix extra horizontal scrollbar in browser on Firefox.
119
+
120
+ ## v1.11.3
121
+
122
+ - Fixes
123
+ - Fix several missing information chips in the tags view.
124
+
125
+ ## v1.11.2
126
+
127
+ - Fixes
128
+ - Browser had two scroll bars.
129
+ - Reader stopped scrolling to the top of the page on page turn.
130
+ - Reader setting Cache Entire Book now defaults to False.
131
+
132
+ ## v1.11.1
133
+
134
+ - Fixes
135
+ - Crash on anonymous user setting timezone
136
+
137
+ ## v1.11.0 - Age Restrictions & Snappiness
138
+
139
+ - Notice
140
+ - This version of codex needs to re-sync the search index on first startup
141
+ which make take time on large collections. However, the new search sync is
142
+ faster than before.
143
+ - Fixes
144
+ - Clear stale `metron.cloud/{genre,location,story,tag,role}/...` URLs from
145
+ existing identifiers — Metron has no public web pages for those types, so
146
+ the links always 404.
147
+ - Fix full text search for credits, identifiers and story arcs.
148
+ - Fix OPDS v2 progression syncing response.
149
+ - Fix OPDS v2 belongsTo.position attribute.
150
+ - Database repairs itself before migrations.
151
+ - Features
152
+ - Age Rating Restrictions now available in the Admin Users tab.
153
+ - Admin Flag for defaulting to Folder View.
154
+ - The codex cache directory for covers and views may now have it's location
155
+ configured.
156
+ - OPDS v2 alternate links for publications to external url identifiers.
157
+ - OPDS v2 publishers as proper contributors with links.
158
+ - OPDS v2 volumes in belongsTo
159
+ - Performance
160
+ - Performance improvements across all views and batch jobs.
161
+ - Comicbox learned how to use multiprocessing & caching for importing.
162
+ - Cover thumbnail generation uses multiprocessing and seeds covers on
163
+ import.
164
+
165
+ ## v1.10.15
166
+
167
+ - Fixes
168
+ - Fix OPDS navigation going to wrong browser groups. Fix contributed by
169
+ @beville.
170
+
171
+ ## v1.10.14
172
+
173
+ - Fixes
174
+ - OPDS auth challenges now include the WWW-Authenticate header and the
175
+ application/opds-authentication+json Content-Type so clients like Panels
176
+ reliably prompt for credentials.
177
+ - Various small frontend fixes
178
+
179
+ ## v1.10.13
180
+
181
+ - Fixes
182
+ - Fix PDFs not displaying with default reader settings.
183
+ - Fix browser paginator slider.
184
+ - Possible fix for expired and corrupt sessions causing FK errors.
185
+
186
+ ## v1.10.12
187
+
188
+ - Fixes
189
+ - Fix an occasional bug linking folders when importing.
190
+ - Fix updating comics crash by batching comic updates.
191
+ - Fix possible import crashes in delete & linking.
192
+ - Fix overzealous lazy importer importing tags from books that already had
193
+ tags.
194
+ - Fix reader settings clearing anomalies. Add a global reader settings clear
195
+ button.
196
+ - Fix unnecessary redirect in OPDS when viewing comic in extended metadata.
197
+
198
+ - Features
199
+ - Codex identifies itself in the HTTP Server: header.
200
+ - Codex identifies itself in the OPDS v1 <generator> tag.
201
+ - Adjusted importer batching variable defaults for greater throughput
202
+
203
+ ## v1.10.11
204
+
205
+ - Fixes
206
+ - Custom covers were not importing.
207
+ - Custom group covers were not counted in admin library view.
208
+
209
+ ## v1.10.10
210
+
211
+ - Fixes
212
+ - Fix creating non-extant reader global settings.
213
+
214
+ ## v1.10.9
215
+
216
+ - Fixes
217
+ - Fix browser settings not clearing with clear button.
218
+ - Fix search settings not clearing on OPDS start page.
219
+
220
+ ## v1.10.8
221
+
222
+ - Fixes
223
+ - Reset settings on OPDS start page more consistently.
224
+ - More logging for webserver errors.
225
+ - There's a jump in version numbers because the production build process was
226
+ broken.
227
+
228
+ ## v1.10.4-7 - Broken releases
229
+
230
+ ## v1.10.3
231
+
232
+ - Fixes
233
+ - Poll all libraries button was not polling all libraries.
234
+ - Fix OPDS v2 manifest series link.
235
+ - Force OPDS v2 start link to reset filters and order
236
+ - Library server folder picker shows folder menu more consistently.
237
+ - Features
238
+ - Select many mode in browser for browser actions.
239
+
240
+ ## v1.10.2
241
+
242
+ - Fixes
243
+ - Fix many OPDS v2 links leading to the wrong views.
244
+ - Fix admin update user validation.
245
+
246
+ ## v1.10.1 - Mistaken release
247
+
248
+ ## v1.10.0 Rust modules & Settings Features
249
+
250
+ - 🚨 Big Changes 🚨
251
+ - The docker repo has changed to ghcr.io/ajslater/codex
252
+ - Django 6 requires python >=3.12.
253
+ - Unified configuration:
254
+ - Your hypercorn.toml config will be migrated automatically to
255
+ codex.toml. Options previously only configurable with environment
256
+ variables may now be also be specified in codex.toml.
257
+ - Some of the environment variable names have changed, but old values
258
+ are still respected for compatibility.
259
+ - Replaced the thumbnail filename algorithm. Thumbnails will regenerate.
260
+ - Fixes
261
+ - Fix old dynamic covers displaying when database had changed due to
262
+ imports.
263
+ - Fix erroneous "Bookmark" filter appearing in filter menu when a read state
264
+ is selected.
265
+ - Fix reader close button receiving nonsensical route.
266
+ - Fix job status messages sometimes not being updated correctly.
267
+ - Fix check latest version of Codex bug.
268
+ - Tags page sometimes had erroneous links went nowhere.
269
+ - Fixed some foreign key integrity fixing bugs.
270
+ - Features
271
+ - Browser can save and load named views.
272
+ - Reader Settings are now available for Series, Parent Folder and Story Arc
273
+ - The Admin Jobs tab is an enhanced tasks tab with start and stop buttons
274
+ and job progress.
275
+ - Browser Pane refreshes with a click/touch pull control.
276
+ - Performance Improvements
277
+ - Codex now uses the Granian http server instead of Hypercorn.
278
+ - The file watcher and poller now use one thread each no matter how many
279
+ libraries you have.
280
+ - Shaved about 80MB off the compressed docker image and 15MB off the python
281
+ wheel.
282
+
283
+ ## v1.9.24
284
+
285
+ - Fixes
286
+ - Fix OPDS v2 numberOfItems pagination sum.
287
+
288
+ ## v1.9.23
289
+
290
+ - Fixes
291
+ - Fix admin tasks tab crash
292
+ - Fix Library folder picker showing bad data
293
+
294
+ ## v1.9.22
295
+
296
+ - Fixes
297
+ - Fix many batch jobs not running. Including polling and importing.
298
+
299
+ ## v1.9.21
300
+
301
+ - Fixes
302
+ - Fix OPDS v2 manifest crash
303
+
304
+ ## v1.9.20
305
+
306
+ - Features
307
+ - Browser filters now show selected filters more clearly in the menus.
308
+ - Fix filtering on credits when clicking on metadata chips.
309
+ - OPDS v2 credits and subjects now link to views filtered on the tag.
310
+
311
+ ## v1.9.19
312
+
313
+ - Fixes
314
+ - Fix PDF date parsing bug on import.
315
+ - Fix comic names with null volume_to field.
316
+ - Provide volume name in comic title for OPDS v2 as there's no volume view
317
+ available.
318
+ - Fix OPDS v2 folder as collection naming.
319
+ - Dev Notes
320
+ - Vuetify 4.0 frontend
321
+
322
+ ## v1.9.18
323
+
324
+ - Fixes
325
+ - Fix search indexing the universes tag.
326
+
327
+ ## v1.9.17 Broken build
328
+
329
+ ## v1.9.16
330
+
331
+ - Fixes:
332
+ - Fix broken Reader close button.
333
+ - Fix OPDS v2 progression crash
334
+
335
+ ## v1.9.15
336
+
337
+ - Fixes:
338
+ - Fix OPDS v2 progression crash.
339
+ - Adjust OPDS v2 progression position field to be 1 based, while Codex page
340
+ is 0 based.
341
+
342
+ ## v1.9.14
343
+
344
+ - Fixes:
345
+ - Fix bad href validation in OPDS v2 leading to null links and therefore
346
+ invalid OPDS.
347
+
348
+ ## v1.9.13
349
+
350
+ - Change:
351
+ - Codex only accepts auth tokens prefixed with the Bearer header.
352
+ - Fixes:
353
+ - Fix crash on API schema generation.
354
+ - Fix scribe daemon not shutting down properly.
355
+ - Fix Swagger API docs crash.
356
+ - Fix full text search barfing on single quoted terms.
357
+ - Return 401 and authorization v1 json to OPDS instead of 403 on auth
358
+ failure more often.
359
+ - Features:
360
+ - OPDS order by filename.
361
+
362
+ ## v1.9.12
363
+
364
+ - Fixes:
365
+ - Fix accepting OPDS v2 progression correct Content-Type.
366
+ - Fix parsing OPDS v2 progression position.
367
+ - Fix bookmark update crash.
368
+
369
+ ## v1.9.11
370
+
371
+ - Fixes:
372
+ - Fix OPDS v1 pagination.
373
+
374
+ ## v1.9.10
375
+
376
+ - Fixes
377
+ - Fix Remote-User authorization for proxy setting http headers.
378
+ - Fix order links not appearing in OPDS v1
379
+ - Feature:
380
+ - Allow "Bearer" header for token authentication in addition to "Token"
381
+
382
+ ## v1.9.9
383
+
384
+ - Fixes
385
+ - Access control bug would let users see comics in include groups they were
386
+ not a part of.
387
+ - Remove redundant top links from OPDS v2 facets group block.
388
+ - Fixed a status crash.
389
+ - Features
390
+ - Remote-User HTTP header SSO support activated by an environment variable.
391
+ See docs.
392
+ - HTTP Header Auth Tokens are now accepted as authorization. Useful for OPDS
393
+ and possibly some SSO setups.
394
+
395
+ ## v1.9.8
396
+
397
+ - Bad release. Does not start.
398
+
399
+ ## v1.9.7
400
+
401
+ - Fixes
402
+ - Fix OPDS v2 manifest/reading crash.
403
+ - Fix OPDS v2 search.
404
+
405
+ ## v1.9.6
406
+
407
+ - Fixes
408
+ - Fix OPDS feed crash.
409
+
410
+ ## v1.9.5
411
+
412
+ - Fixes
413
+ - Fix settings not resetting to default on OPDS start pages.
414
+ - Isolate OPDS settings from web settings so they don't reset each other.
415
+
416
+ ## v1.9.4
417
+
418
+ - Fixes
419
+ - Fix unnecessary redirects in OPDS v1 & v2 search.
420
+
421
+ ## v1.9.3
422
+
423
+ - Fixes
424
+ - Unnecessary redirect going to OPDS v1 start page.
425
+ - Fixed start page link in OPDS v2.0
426
+
427
+ ## v1.9.2
428
+
429
+ - Fixes
430
+ - OPDS 2.0 homepage preview sections were showing the wrong queries.
431
+ - OPDS 2.0 progression bookmarking was broken. Stump doesn't seem to be
432
+ transmitting progression data yet, though.
433
+ - Features
434
+ - OPDS 1.0 gains a homepage similar to OPDS v2
435
+ - OPDS start page URLS are now different. See the OPDS popup dialog.
436
+
437
+ ## v1.9.1
438
+
439
+ - Fixes
440
+ - OPDS v2 fix crash on faceted views.
441
+
442
+ ## v1.9.0 - OPDS 2.0 Redesign
443
+
444
+ - Fixes
445
+ - Fix crash in OPDS v2 feed.
446
+ - Features
447
+ - Redesigned OPDS v2 to work with Stump & Readest Clients
448
+ - Docker healthcheck endpoint. See docs.
449
+
450
+ ## v1.8.22
451
+
452
+ - Fixes
453
+ - Fix reading books crash that crept into the last release.
454
+
455
+ ## v1.8.21
456
+
457
+ - Fixes
458
+ - Fix Close Book button linking to parent of desired route.
459
+
460
+ ## v1.8.20
461
+
462
+ - Fixes
463
+ - Fix dragging when zoomed in in reader when using mouse left button.
464
+ - Fix weird spacing and borders on browser and reader toolbars.
465
+ - Attempt to make Close Book route in reader more accurate.
466
+
467
+ ## v1.8.19
468
+
469
+ - Fixes
470
+ - Do not sanitize Library and Comic path names. Fixes an import crash on
471
+ paths with dangerous looking strings in them.
472
+ - Fix a crash when moving comics.
473
+
474
+ ## v1.8.18
475
+
476
+ - Fixes
477
+ - Filter and Search parameters were being applied after clearing.
478
+ - Features
479
+ - Read metadata from PDF embedded files.
480
+
481
+ ## v1.8.17
482
+
483
+ - Features
484
+ - Python 3.14 support.
485
+
486
+ - Fixes
487
+ - Fix for codex sometimes shutting when asked to restart.
488
+
489
+ ## v1.8.16
490
+
491
+ - Don't support Python 3.14 until dependencies do.
492
+ - Docker image is now based on trixie debian
493
+
494
+ ## v1.8.15
495
+
496
+ - Performance
497
+ - Replace axios with xior AJAX library.
498
+
499
+ ## v1.8.14
500
+
501
+ - Fixes
502
+ - Fix settings not saving in reader and sometimes in browser.
503
+ - Fix shutdown and restart signals on Windows.
504
+
505
+ ## v1.8.13
506
+
507
+ - Fixes
508
+ - Fix import crash when metadata import is disabled.
509
+
510
+ ## v1.8.12
511
+
512
+ - Fixes
513
+ - Fix publishers and series tags disappearing. Use Library Force Update to
514
+ restore them.
515
+ - Fix credit role order in tags screen.
516
+
517
+ ## v1.8.11
518
+
519
+ - Fixes
520
+ - Restarting Codex with Codex would still crash. More comprehensive fix.
521
+
522
+ ## v1.8.10
523
+
524
+ - Fixes
525
+ - Restarting Codex with Codex would crash, so Auto-Update restarts were
526
+ broke.
527
+ - Sorry non-docker homies! Thanks @professionaltart.
528
+ - Fix universes not being search indexed (very rare).
529
+ - More reliable re-render for browser page slider and navigation buttons.
530
+
531
+ ## v1.8.9
532
+
533
+ - Fixes
534
+ - Attempt to fix not saving new stat values if update doesn't update comic
535
+ metadata.
536
+ - Attempt to fix import bug where update metadata is disposed of before it
537
+ can be applied.
538
+ - Attempt to fix browser page slider not updating to match the current
539
+ folder.
540
+
541
+ ## v1.8.8
542
+
543
+ - Fixes
544
+ - Fix import crash on some Metron tagged comics with a primary identifier
545
+ source.
546
+
547
+ ## v1.8.7
548
+
549
+ - Fixes
550
+ - Make Full Text Search table smaller. Some irrelevant fields and data were
551
+ causing exponential bloat, crippling large libraries.
552
+ - Fix search by field for string fields, identifiers and issue.
553
+ - Fix overflow on browser card titles.
554
+
555
+ ## v1.8.6
556
+
557
+ - Fixes
558
+ - Scale search index sync batch size with memory. Large search sync query
559
+ was preventing search sync of large databases on small machines.
560
+
561
+ ## v1.8.5
562
+
563
+ - Fixes
564
+ - Better fix for persistent settings. Old fix could lead to settings that
565
+ never clear.
566
+
567
+ ## v1.8.4
568
+
569
+ - Fixes
570
+ - Fix not importing page_count when import metadata is off, leads to
571
+ unreadable books.
572
+ - Fix persistent settings.
573
+
574
+ ## v1.8.3
575
+
576
+ - Fixes
577
+ - Fix searching by string like fields in the search bar like 'path'.
578
+ - Fix minor search update exception when there's nothing search related to
579
+ update on import.
580
+
581
+ ## v1.8.2
582
+
583
+ - Fixes
584
+ - Force docker logs (all stdout logs) to colorize output.
585
+
586
+ ## v1.8.1
587
+
588
+ - Fixes
589
+ - Fix minor search update exception.
590
+
591
+ ## v1.8.0
592
+
593
+ - Features
594
+ - Support
595
+ [MetronInfo.xml v1.0 Schema](https://metron-project.github.io/docs/category/metroninfo)
596
+ for comic metadata.
597
+ - Support CB7 (7zip) comic archives.
598
+ - Search Indexing now also done in the import phase which is faster than
599
+ syncing from the db:
600
+ - 20k comics both imported and indexed in 9 minutes on my old macbook at
601
+ a rate of 30 comics per second. Half a million comics might take less
602
+ than 5 hours on the same machine.
603
+ - However this update replaces the search index and Codex will sync the
604
+ search index when it starts.
605
+ - Fewer database updates when comics change metadata or don't change
606
+ metadata at all means fewer and faster update imports.
607
+ - New Tags:
608
+ - Add Universes. Main Characters, and Main Team marked with a ★.
609
+ - Metron tags can provide links to web databases for each tag.
610
+ - New Import Metadata on Demand Admin Flag.
611
+ - Add manual Import Abort task for admins.
612
+ - Browser tab titles show route and page title, no longer show custom
613
+ banner.
614
+ - Logging format changed.
615
+
616
+ - Fixes
617
+ - Reading Order in reader was not always defaulting to your last Browser Top
618
+ Group.
619
+ - Fixed filtering on Critical Rating and FileType
620
+ - Fixed searching on Critical Rating field.
621
+ - Bug displaying Age Rating, Original Format, Scan Info, Tagger in metadata.
622
+ - Fixed database locking crashes.
623
+ - Attempt to fix major version change CSRF errors by forcing logout if CSRF
624
+ errors occur.
625
+
626
+ - Dev
627
+ - Uses Comicbox 2.0 see
628
+ [Comicbox NEWS for all details](https://github.com/ajslater/comicbox/blob/main/NEWS.md)
629
+
630
+ ## v1.7.15
631
+
632
+ - Fixes
633
+ - Fix unable to change top group to folders or story arcs if on root browse
634
+ page.
635
+
636
+ ## v1.7.14
637
+
638
+ - Fixes
639
+ - Fix Reader jumping back into the same book when changing to a new book.
640
+
641
+ ## v1.7.13
642
+
643
+ - Fixes
644
+ - Fix Reader Reading Order dropdown unable to change reading order.
645
+ - Fix loading root browser pages greater than 1 as a new route.
646
+ - Missing books error screen had no toolbars, could not close it.
647
+ - Fix docker configuration for Synology by creating a comicbox config
648
+ directory.
649
+ - Wait to load browser and reader pages until login tried with a cookie.
650
+
651
+ - Features
652
+ - Experimental `CODEX_BROWSER_MAX_OBJ_PER_PAGE` env variable. Default
653
+ is 100.
654
+
655
+ ## v1.7.12
656
+
657
+ - Fixes
658
+ - Crash downloading comics when user is in a group.
659
+ - User last active activity was often not recorded.
660
+
661
+ - Features
662
+ - Animate Pages option toggle in reader settings
663
+
664
+ ## v1.7.11
665
+
666
+ - Fixes
667
+ - Fix importing of story arc tags
668
+
669
+ ## v1.7.10
670
+
671
+ - Fixes
672
+ - Fix occasional import link tags crash.
673
+
674
+ ## v1.7.9
675
+
676
+ - Fixes
677
+ - Tags page layout fixes.
678
+
679
+ ## v1.7.8
680
+
681
+ - Features
682
+ - Tags page layout changes with more notes from @beville.
683
+
684
+ - Fixes
685
+ - Tags for simple comic fields were incorrectly taken from the first comic
686
+ in a group.
687
+ - Filter menu wasn't populating for top folder.
688
+ - Librarian status tasks would appear out of order.
689
+
690
+ ## v1.7.7
691
+
692
+ - Fixes
693
+ - Fix Librarians Statuses not loading in UI.
694
+ - Tags screen crash with untagged series or volumes.
695
+ - Fix tags screen Mark Read confirmation names.
696
+ - Order Tags Contributors by relevance not alphabetically.
697
+
698
+ ## v1.7.6
699
+
700
+ - Features
701
+ - Always Show Filenames setting for browser cards.
702
+ - Tags page layout changes with notes from @beville.
703
+
704
+ - Fixes
705
+ - Fix import crash on files with escapable html characters or utf-8 chars in
706
+ the filename.
707
+ - Fix page range crash in reader.
708
+ - Fix overzealous escaping of html in metadata strings.
709
+ - Fix group tags not aggregated properly in metadata screen for folders and
710
+ story arcs.
711
+
712
+ ## v1.7.5
713
+
714
+ - Fixes
715
+ - More granular websocket notifications means the web UI does fewer more
716
+ targeted data updates.
717
+ - Prevent deactivating and deprivileging the logged in user.
718
+ - Fix resetting active flag when resetting admin user with environment
719
+ variable.
720
+ - Fix crash in auto-update when unable to determine current Codex version.
721
+
722
+ ## v1.7.4
723
+
724
+ - Fixes
725
+ - Fix setting bookmarks and book settings bug.
726
+ - Sanitize HTML out of imported comic metadata fields and admin inputs.
727
+
728
+ ## v1.7.3
729
+
730
+ - Features
731
+ - Browser Order By Child Count.
732
+ - Customized site title option in Admin Flags.
733
+ - Codex logs are now compressed when rotated.
734
+ - Support OPDS v2.0 Progression (streaming) draft proposal from Aldiko.
735
+
736
+ - Fixes
737
+ - Browser Group Mark Read/Unread obeys browser filters.
738
+ - Fixed bad redirect when to deep linking into browser Folders or Story
739
+ Arcs.
740
+ - Fixed order by name for issues disregarding volume names in browser and
741
+ reader
742
+ - Fix display of name and filename on browser cards.
743
+ - Fix batching import of Contributors to prevent crash on large imports.
744
+ - Fixed an OPDS Metadata crash.
745
+
746
+ ## v1.7.2
747
+
748
+ - Features
749
+ - Download entire groups of comics from the browser and metadata screens.
750
+
751
+ - Fixes
752
+ - Fix reader page API sometimes crashing.
753
+
754
+ ## v1.7.1
755
+
756
+ - Features
757
+ - Always display filename for comics on browser cards in Folder View
758
+ - Detect .jxl extension (JPEG XL) as a comic page.
759
+
760
+ - Fixes
761
+ - Fix ignoring MacOS resource forks in archives.
762
+ - Don't redirect to issue view on first search in Folder View
763
+
764
+ ## v1.7.0
765
+
766
+ - Features
767
+ - Search
768
+ - Use SQLite Full Text Search v5 for search engine.
769
+ - Search syntax has changed. See the help popup at the end of the search
770
+ bar.
771
+ - Use faster db column lookups for some search bar queries. Thanks
772
+ @bmfrosty.
773
+ - You may remove the directory `config/whoosh_index`.
774
+ - Integrity Checks
775
+ - Faster more comprehensive db integrity checks run every night instead of
776
+ at startup.
777
+ - Integrity checks can run on startup with environment variables documented
778
+ in README.
779
+
780
+ - Fixes
781
+ - Actually fix browser opening reader at correct bookmark.
782
+ - Also fixes progress calculation on browser cards.
783
+ - Fixed crashes when the upstream codex version is not accessible.
784
+ - Fixed possible race conditions with nightly maintenance.
785
+
786
+ ## v1.6.19
787
+
788
+ - Fixes
789
+ - Fix browser opening reader at correct bookmark.
790
+ - Fix for browser triple tap bug for android tablet browsers in desktop
791
+ mode.
792
+ - Fix populating arcs in reading order menu in reader.
793
+ - Fix submitting old arc to reader API.
794
+ - Fix Version API blocking. Add check version admin task.
795
+ - Fix Library "Poll Every" validation.
796
+ - Fix Metadata dialog not scrolling sometimes.
797
+ - Fix file extension for downloaded PDF pages.
798
+
799
+ ## v1.6.18
800
+
801
+ - Yanked. Broken Reader.
802
+
803
+ ## v1.6.17
804
+
805
+ - Features
806
+ - Admin Action buttons now responsive to view size.
807
+
808
+ - Fixes
809
+ - Auto update wasn't comparing versions well.
810
+ - Possible fix for initializing admin flags crash.
811
+
812
+ ## v1.6.16
813
+
814
+ - Fixes
815
+ - Import may have been marking mounted drive's comics modified
816
+ inappropriately.
817
+ - Import crash when moving comics.
818
+ - Relink deep orphan folders in the db instead of recreating them.
819
+ - Do not adopt orphan folders deleted from the filesystem.
820
+ - Admin Tab change password for user broke.
821
+ - More robust ui cache busting on library update.
822
+ - Fix minor error on metadata text boxes with null values.
823
+
824
+ ## v1.6.15
825
+
826
+ - Fixes
827
+ - Fix more Metadata links to browser groups not computing and resolving
828
+ properly.
829
+
830
+ ## v1.6.14
831
+
832
+ - Fixes
833
+ - Fix Metadata links to browser groups not resetting topGroup properly.
834
+
835
+ ## v1.6.13
836
+
837
+ - Fixes
838
+ - Admin Panel Link was showing in the admin panel, not in the browser or
839
+ reader.
840
+
841
+ ## v1.6.12
842
+
843
+ - Features
844
+ - Native Windows installation instructions in the README thanks to
845
+ @professionaltart.
846
+ - Anonymously send stats to improve Codex. See admin/flags for description
847
+ and opt-out.
848
+
849
+ - Fixes
850
+ - Detect iOS devices in Desktop Mode for proper iOS tap behavior.
851
+
852
+ ## v1.6.9, v1.6.10, v1.6.11
853
+
854
+ - Yanked. Bad network behavior. Broken javascript.
855
+
856
+ ## v1.6.8
857
+
858
+ - Fixes
859
+ - Fix OPDS streaming in lazy metadata mode for Chunky-like readers which
860
+ require a page count.
861
+
862
+ ## v1.6.7
863
+
864
+ - Fixes
865
+ - OPDS authorization for some readers
866
+ - Remove superfluous debug exception trace on timezone endpoint.
867
+
868
+ ## v1.6.6
869
+
870
+ - Fixes
871
+ - User creation in admin panel broke.
872
+ - There was confusing UI on admin panel unauthorized screen.
873
+
874
+ ## v1.6.5
875
+
876
+ - Fixes:
877
+ - Fix logout button not working.
878
+
879
+ ## v1.6.4
880
+
881
+ - Fixes:
882
+ - Reader crash loading reader order arcs.
883
+ - OPDS datetimes now uniformly served in iso format.
884
+ - Fix browser filter menus clearing and loading irregularities.
885
+ - Fix parsing negative issue numbers in filenames.
886
+ - Log common non-ComicBookInfo archive comments with less alarm.
887
+ - Removed
888
+ - LOGLEVEL=VERBOSE deprecated for a long time. Use LOGLEVEL=DEBUG
889
+
890
+ ## v1.6.3
891
+
892
+ - Features
893
+ - Reader inherits the last browser view, with filters, as it's default
894
+ reading arc.
895
+ - When browser page is less than 1, redirect to parent. When 1 and empty,
896
+ show empty page.
897
+ - Fix
898
+ - The cover api was not accepting http basic (opds) authentication.
899
+
900
+ ## v1.6.2
901
+
902
+ - Fixes
903
+ - Fix pagination with more than 100 comics in the browser.
904
+
905
+ ## v1.6.1
906
+
907
+ - Features
908
+ - Add a retry button on book load error and page load error pages.
909
+
910
+ - Fixes
911
+ - Fix unable to login if anonymous users prohibited.
912
+ - Fix filter crash.
913
+ - Metadata was showing incorrect groups for individual comics
914
+
915
+ ## v1.6.0
916
+
917
+ - Features
918
+ - Custom Covers for Folders, Publishers, Imprints, Series and Story Arcs.
919
+ - Browser setting to choose Dynamic or First group covers. Thanks @Thakk.
920
+ - Breadcrumbs in the browser
921
+ - Reader can read by Volumes as well as by Series, Folder and StoryArc.
922
+ - More compact UI controls.
923
+ - Metadata tags can click to browse filtered on that tag.
924
+ - Experimental API throttling support. Search the README for "throttle".
925
+ - Add websocket updates for anonymous sessions
926
+ - Speed and caching optimizations.
927
+ - Fixes
928
+ - OPDS http basic authorization fixed.
929
+ - Groups with the same name in different cases collapse into one group in
930
+ the browser.
931
+ - Order By respects browser show groups settings.
932
+ - Fixed re-import of urls and identifiers.
933
+ - Fixed cleanup of some foreign keys when no longer used.
934
+ - Clean up all orphan folders on startup instead of first pass
935
+ - Fix creating bookmarks.
936
+ - Update browser sessions for user when users finish a book.
937
+
938
+ ## v1.5.19
939
+
940
+ - Fixes
941
+ - Metadata crash on folders.
942
+
943
+ ## v1.5.18
944
+
945
+ - Fixes
946
+ - Ignore comic pages from dotfiles and macOS resource forks.
947
+
948
+ ## v1.5.17
949
+
950
+ - Fixes
951
+ - Fix background color of browser card controls since vuetify update.
952
+
953
+ ## v1.5.16
954
+
955
+ - Fixes
956
+ - Fix creating and updating exclude groups.
957
+ - More Web & url tags parsed from metadata.
958
+
959
+ ## v1.5.15
960
+
961
+ - Fixes
962
+ - OPDS streaming broken for some clients (Chunky) without metadata.
963
+ - OPDS redirects for empty pages or 404's were crashing.
964
+ - OPDS uses filename fallback for title if missing metadata.
965
+
966
+ ## v1.5.14
967
+
968
+ - Features
969
+ - Relative folder path is now searchable if Folder View enabled.
970
+ - More granular caching hopefully for better performance.
971
+ - Fixes
972
+ - OPDS redirects were crashing.
973
+ - Null search was crashing metadata for single comics
974
+ - Fix a breakage with fast file static file serving.
975
+ - Change browser order by to something sensible when search cleared.
976
+
977
+ ## v1.5.13
978
+
979
+ - Fixes
980
+ - Fix root folder for library sometimes not created on import.
981
+ - Fix redirect loop in browser when all members of a group deleted.
982
+ - Fix browser pagination buttons not advancing.
983
+ - Fix OPDS v2 crash
984
+ - Fix browser throbber not appearing when making query.
985
+
986
+ ## v1.5.12
987
+
988
+ - Fixes
989
+ - Fix Folder browser offset pagination bug for folder with books and no
990
+ folders.
991
+
992
+ ## v1.5.11
993
+
994
+ - Fixes
995
+ - Fix erroneous Folder View page out of bounds redirect.
996
+
997
+ ## v1.5.10
998
+
999
+ - Fixes
1000
+ - Folder view was not showing all the books on mixed folder & book pages.
1001
+ - Shutdown and Restart admin tasks were not working.
1002
+
1003
+ ## v1.5.9
1004
+
1005
+ - Fixes
1006
+ - Crash when reading comics in folder view introduced in v1.5.8
1007
+
1008
+ ## v1.5.8
1009
+
1010
+ - Fixes
1011
+ - No search results was returning every comic instead of no comics.
1012
+ - issue: field searching returned no results.
1013
+ - issue_number, community_rating, & critical rating no longer require two
1014
+ digits of precision.
1015
+ - Excess books included in reader arc/folder/series.
1016
+ - Features
1017
+ - Even Lazier import when Import Metadata Admin flag turned off.
1018
+ - issue: field search now combines numeric and suffix parts.
1019
+
1020
+ ## v1.5.7
1021
+
1022
+ - Fixes
1023
+ - Pagination crash with more than 100 folders.
1024
+ - Experimental fix for Synology Docker CHOWN_PYTHON_SITE_PACKAGES=1
1025
+
1026
+ ## v1.5.6
1027
+
1028
+ - Fixes
1029
+ - Fix sqlite limit crash when importing > \~1000 web urls.
1030
+
1031
+ ## v1.5.5
1032
+
1033
+ - Fixes
1034
+ - Attempt to fix import crash processing too much metadata at once. Allow
1035
+ undocumented env variable to manipulate this: CODEX_FILTER_BATCH_SIZE
1036
+ (default: 900)
1037
+ - Fix search engine update crash for large collections.
1038
+
1039
+ ## v1.5.4
1040
+
1041
+ - Fixes
1042
+ - Django 5 broke root_path prefixing from the asgi server. Work around it.
1043
+
1044
+ ## v1.5.3
1045
+
1046
+ - Fixes
1047
+ - Mouse horizontal scroll broken on Firefox.
1048
+
1049
+ ## v1.5.2
1050
+
1051
+ - Fixes
1052
+ - OPDS titles were showing as "Unknown" for comics with tagged volumes.
1053
+ - OPDS v2 was crashing.
1054
+ - Cover displayed for group browser with Name ordering was inconsistent.
1055
+ - Enable mouse drag horizontal scrolling in reader zoom mode.
1056
+
1057
+ ## v1.5.1
1058
+
1059
+ - Fixes
1060
+ - OPDS v1 was not rendering any data.
1061
+
1062
+ ## v1.5.0
1063
+
1064
+ - **Warning**
1065
+ - The main database path has changed from `db.sqlite3` to `codex.sqlite3`
1066
+ - This version forces a rebuild of the search index (not the main database)
1067
+ - Fixes
1068
+ - Some integrity checks weren't running on startup.
1069
+ - The metadata page would sometimes crash for Admins.
1070
+ - Moving a comic to a subfolder would crash.
1071
+ - Moving a deep subfolders would crash.
1072
+ - Moving a comic to the root folder would send the comic to the phantom
1073
+ zone.
1074
+ - Updating comics would sometimes not delete removed tags.
1075
+ - Series & Volumes no longer updated too often on import.
1076
+ - Admin Actions was polling all libraries when one selected.
1077
+ - OPDS was showing repeated titles.
1078
+ - Vertical scroller tracking and updating improved.
1079
+ - Page filenames are now sorted case insensitively which should improve
1080
+ order.
1081
+ - Features
1082
+ - Admin Exclude groups compliment the existing Include groups.
1083
+ - New metadata tags: Monochrome, Tagger, GTIN, Review, Identifiers, &
1084
+ Reading Direction. Available when comics are re-imported (Force Update
1085
+ recommended).
1086
+ - Identifiers metadata tag replaces the "Web" tag.
1087
+ - Reads ComicInfo.xml and other formats from the PDF keywords field. You can
1088
+ write ComicInfo.xml to PDFs with comictagger.
1089
+ - Reading Direction reader setting replaces Reader's vertical & horizontal
1090
+ views.
1091
+ - Supports the MetronInfo metadata format (rare).
1092
+ - Filesystem events filtered to only the ones Codex handles.
1093
+ - Double-click to zoom on pages in reader.
1094
+ - Read PDF with browser in a new tab link.
1095
+ - Experimental checkbox for caching entire comic or PDF in the browser.
1096
+ - Admin Flag for disabling most metadata import.
1097
+ - Dev
1098
+ - Using comicbox v1 for metadata import.
1099
+
1100
+ ## v1.4.3
1101
+
1102
+ - Fixes
1103
+ - Crash on undecodable characters in metadata.
1104
+ - Search terms weren't applying to filter choices population.
1105
+ - Fix name ordering. Show series & volume in browser cards if it affects
1106
+ name ordering.
1107
+ - Shrink reader page change boxes to let toolbar activate on corner clicks.
1108
+ - Dev
1109
+ - Big lint update.
1110
+
1111
+ ## v1.4.2
1112
+
1113
+ - Fixes
1114
+ - Groups were not aggregating children properly when searched.
1115
+ - Search could break Folder View.
1116
+ - Changing the browser 'Order By' would sometimes not apply.
1117
+ - Attempt to fix stale books appearing on reader load.
1118
+
1119
+ ## v1.4.1
1120
+
1121
+ - Fixes
1122
+ - A bug that prevented folder view from displaying under some circumstances.
1123
+
1124
+ ## v1.4.0
1125
+
1126
+ - Features
1127
+ - Story Arc Top Group in Web & OPDS Browsers
1128
+ - Support multiple Story Arcs per comic.
1129
+ - Supports Mylar CSV StoryArc / StoryArcNumber extension to ComicInfo.xml
1130
+ - Show only filter options that affect the current browse level.
1131
+ - Reader has a Series/Folder/Story Arc order selector.
1132
+ - Reader shows filename instead of metadata title if you've been browsing in
1133
+ File View
1134
+ - Downloads now use the original filename from disk.
1135
+ - Fix
1136
+ - Folder was view displayed but crashed in OPDS even if disabled by admin.
1137
+
1138
+ ## v1.3.14
1139
+
1140
+ - Features
1141
+ - Better metadata extraction for PDFs.
1142
+ - Support for ComicInfo StoryArcNumber, Review and GTIN tags.
1143
+ - Order by Story Arc Number
1144
+ - Do not detect .cbr files if unrar is not on the path.
1145
+ - Display filename for comics in browser file view.
1146
+ - Fixes
1147
+ - Import of ComicInfo Tags metadata.
1148
+ - Never removed old missing metadata when updated.
1149
+ - Error on moving folders.
1150
+ - Fix saving last route between sessions.
1151
+ - Better error messages if unrar is not on the path.
1152
+ - Removed
1153
+ - Remove support for unrar.cffi
1154
+
1155
+ ## v1.3.13
1156
+
1157
+ - Fixes
1158
+ - Group cover sometimes showing wrong cover for order.
1159
+ - Rare import crash.
1160
+
1161
+ ## v1.3.12
1162
+
1163
+ - Features
1164
+ - OPDS 2 Last Read link.
1165
+ - Fixes
1166
+ - Books without bookmarks could break parts of the reader.
1167
+ - Remove clipboard UI hints when clipboard isn't available.
1168
+
1169
+ ## v1.3.11
1170
+
1171
+ - Features
1172
+ - Last Read Order By option for web and OPDS.
1173
+ - Some Order By options now have a default descending order.
1174
+ - OPDS 1 special top links limited to 100 entries.
1175
+ - Fix
1176
+ - OPDS 1 links did not include filters or order information.
1177
+ - OPDS 1 page streaming broke.
1178
+
1179
+ ## v1.3.10
1180
+
1181
+ - Fixes
1182
+ - Crash when reading from folder view.
1183
+
1184
+ ## v1.3.9
1185
+
1186
+ - Features
1187
+ - Experimental OPDS 2.0 Support.
1188
+ - Create all comic covers admin task.
1189
+ - Faster Metadata pages for web and OPDS.
1190
+ - Fixes
1191
+ - Two pages mode broken.
1192
+ - Credits not imported bug.
1193
+ - Failed imports not removed when file removed bug.
1194
+
1195
+ ## v1.3.8
1196
+
1197
+ - Fixes
1198
+ - Fix Basic Authentication not enabled for OPDS Cover, Page, and Download
1199
+ views.
1200
+ - Tune low memory algorithm slightly lower for memory constrained systems.
1201
+ - Dev
1202
+ - Use makefile and moved most scripts into bin.
1203
+
1204
+ ## v1.3.7
1205
+
1206
+ - Feature
1207
+ - Metadata page links to groups to browse to.
1208
+ - Fixes
1209
+ - Crash when moving comics.
1210
+ - Container memory limits weren't detected for Linux kernels before 4.5
1211
+ - Reader
1212
+ - Horizontal Reader was slow for comics with high page counts.
1213
+ - Vertical scroller was not tracking pages in fitTo Width or Orig modes.
1214
+ - Validation error detecting child and parent library paths incorrectly.
1215
+ - Dev
1216
+ - Django 4.2
1217
+
1218
+ ## v1.3.6
1219
+
1220
+ - Fixes
1221
+ - Much lower memory tuning. Environment variables control tuning.
1222
+ - Possible fix for vertical scroller page tracking for tall images.
1223
+
1224
+ ## v1.3.5
1225
+
1226
+ - Fixes
1227
+ - OPDS sorting and filtering broke.
1228
+ - Fixed Download URLs for clients that ignore headers like Chunky.
1229
+ - Update Search Index now checks for more missing entries.
1230
+
1231
+ ## v1.3.4
1232
+
1233
+ - Fixes
1234
+ - Number out of range errors for issue when search indexing.
1235
+ - Total child pages of folders and groups sometimes overcounted, displaying
1236
+ half unread folders.
1237
+ - Reader: Vertical Scroll
1238
+ - Remove black bottom margin from images.
1239
+ - Was loading every page in a comic at once.
1240
+ - Page tracking did not work with images larger than viewport width.
1241
+
1242
+ ## v1.3.3
1243
+
1244
+ - Fixes
1245
+ - Number out of range errors when search indexing.
1246
+ - Possible Search Index Remove Stale and Abort jobs not scheduled properly.
1247
+ - OPDS missing entry ids rejected by Panels reader.
1248
+ - Downloads had an extra period in the suffix.
1249
+
1250
+ ## v1.3.2
1251
+
1252
+ - Fixes
1253
+ - Reader Fit To settings broken
1254
+ - Possible files marked modified too often.
1255
+
1256
+ ## v1.3.1
1257
+
1258
+ - Fixes
1259
+ - An import crash in create foreign keys.
1260
+ - Admin table dates were always in UTC so sometime off by a day.
1261
+
1262
+ ## v1.3.0
1263
+
1264
+ ### I remember... my whole life. Everything
1265
+
1266
+ - Features
1267
+ - Codex stable in 1GB RAM environments. Faster with more.
1268
+ - Codex uses unrar-cffi if available. Not required.
1269
+ - Browser
1270
+ - Navigate to top button.
1271
+ - Filter by File Type.
1272
+ - OPDS
1273
+ - Top links display only at catalog root.
1274
+ - Extended metadata moved to alternate links.
1275
+ - Admin
1276
+ - Search Indexer Remove Stale Records task much faster.
1277
+ - Comic import speedups.
1278
+ - Fancier sortable admin tables.
1279
+ - Removed `max_db_ops` config variable.
1280
+ - Fixes
1281
+ - Reader vertical scroll lost its place in Fit To Width or Orig mode.
1282
+ - OPDS downloaded files all had the same name.
1283
+ - Search Index
1284
+ - More robust against bad data.
1285
+ - Some search fields were case sensitive.
1286
+ - Admin
1287
+ - Graceful shutdown when Docker container stops.
1288
+ - Codex was backing up on every startup.
1289
+ - Status for batched imports (large imports or low memory) now reflects
1290
+ total instead of single batch.
1291
+
1292
+ ## v1.2.9
1293
+
1294
+ - Features
1295
+ - Vertical scroll option for reader.
1296
+ - Faster search index removes.
1297
+ - Admin Users tab shows last user activity date.
1298
+ - OPDSE PSE 1.2 extension for Panels `pse:lastReadDate`
1299
+ - Fixes
1300
+ - Fixed next and previous book keyboard shortcuts.
1301
+ - Improved OPDS acquisition page performance by removing more "categories"
1302
+ metadata.
1303
+
1304
+ ## v1.2.8
1305
+
1306
+ - Features
1307
+ - Search Index
1308
+ - Improved search indexing times.
1309
+ - Admin Flag to adjust nightly full optimization.
1310
+ - OPDS
1311
+ - "Newest Issues" Link replaced by "Recently Added" after user feedback.
1312
+ - Fixes
1313
+ - Volume tags were often not scanned. Recommend using Force Reimport on all
1314
+ libraries.
1315
+ - OPDS
1316
+ - Fix navigation links not inheriting view settings of current page.
1317
+ - Removed populating categories in OPDS to experiment with performance
1318
+ issues.
1319
+ - Fix OPDS pse lastRead tag.
1320
+ - Block library polling during database updates, fixes reindexing.
1321
+
1322
+ ## v1.2.7
1323
+
1324
+ - Fixes
1325
+ - Trap final search index commit errors and try again without merging
1326
+ segments.
1327
+ - Fix moving folders assigned no parent folder, displaying them in root.
1328
+
1329
+ ## v1.2.6
1330
+
1331
+ - Fixes
1332
+ - Impose memory limits on search index writers.
1333
+ - Impose items before write limits search index writer.
1334
+ - Sort comics by path for the reader navigation when in Folder View.
1335
+ - Remove inappropriate vertical scroll bars from page images.
1336
+
1337
+ ## v1.2.5
1338
+
1339
+ - Features
1340
+ - In Folder View the reader navigates by folder instead of series.
1341
+ - Fixes
1342
+ - OPDS crash on missing 24 hour time setting input required.
1343
+
1344
+ ## v1.2.4
1345
+
1346
+ - Features
1347
+ - User configurable 24 hour time format.
1348
+ - Reader
1349
+ - Displays covers as one page even in two page mode.
1350
+ - Read in Reverse mode.
1351
+ - Keymaps for adjusting page by one page in two page mode.
1352
+ - Previous and Next book navigation buttons and keymaps.
1353
+ - Fixes
1354
+ - OPDS:
1355
+ - Fix acquisition feed timeouts on large libraries by removing most m2m
1356
+ fields that populated OPDS categories
1357
+ - Fix pagination
1358
+ - Show series name in comic title.
1359
+ - Experiment: don't show top links or entry facets on pages > 1
1360
+ - Reader:
1361
+ - Two pages mode would skip pages.
1362
+ - Next/prev book goes to correct page for Right To Left tagged books.
1363
+ - Fix occasional error setting reader settings.
1364
+ - Fixed noop poll event happening on comic cover creation.
1365
+
1366
+ ## v1.2.3
1367
+
1368
+ - Fixes
1369
+ - Prevent search indexing starting over if it encounters errors.
1370
+ - Fix download buttons.
1371
+ - Fix admin settings drawer obscuring small screens.
1372
+ - Fix scroll bars showing inapproporately on admin tables.
1373
+ - Fix OPDS authors having 'i' appended.
1374
+
1375
+ ## v1.2.2
1376
+
1377
+ - Fixes
1378
+ - Fix all items removed from search index after update.
1379
+ - Speedups to cleaning up search engine ghosts.
1380
+
1381
+ ## v1.2.1
1382
+
1383
+ - Fixes
1384
+ - Crash on building a fresh database.
1385
+ - Fixed an importer crash when it tried to wait for changing files.
1386
+ - Disabling Library Poll prevented manual polling.
1387
+ - More explicit Poll Every hints in edit dialog.
1388
+ - Repository link didn't open a new window.
1389
+
1390
+ ## v1.2.0
1391
+
1392
+ ### What kind of Heaven uses bounty hunters?
1393
+
1394
+ - Features
1395
+ - Faster and more robust PDF support. Codex no longer depends on the poppler
1396
+ library.
1397
+ - LOGLEVEL=VERBOSE deprecated in favor of DEBUG
1398
+ - Stats page API accessible via API key as well as admin login.
1399
+ - Fixes
1400
+ - Some Librarian Status messages would appear never to finish.
1401
+ - Development
1402
+ - The multiprocessing method is now S P A W N 💀 on all platforms.
1403
+ - Websockets are now handled by customized Django channels
1404
+ - aioprocessing Queue communicates between librarian and channels.
1405
+
1406
+ ## v1.1.6
1407
+
1408
+ - Fixes
1409
+ - Fix rare deletion and recreation of all comics when inodes changed.
1410
+
1411
+ ## v1.1.5
1412
+
1413
+ - Features
1414
+ - Admin Stats tab
1415
+ - Libraries can have a poll delay longer than 1 day.
1416
+ - Fixes
1417
+ - Crash when removing comics.
1418
+ - Admin Create & Update dialogs would get stuck open on submit.
1419
+ - Delete expired and corrupt sessions every night.
1420
+ - More liberal touch detection for more devices.
1421
+
1422
+ ## v1.1.4
1423
+
1424
+ - Fixes
1425
+ - Multiprocessing speedup for large search engine indexing jobs
1426
+ - Writes search engine data in segments.
1427
+ - Search engine segment combiner optimizer runs nightly (and manually).
1428
+
1429
+ ## v1.1.3
1430
+
1431
+ - Fixes
1432
+ - Fix some OPDS browsers unable to read comics.
1433
+
1434
+ ## v1.1.2
1435
+
1436
+ - Fixes
1437
+ - Fix unable to initialize database on first run
1438
+
1439
+ ## v1.1.0
1440
+
1441
+ ### Whoosh
1442
+
1443
+ - Features
1444
+ - Switch to Whoosh Search Engine.
1445
+ - You may delete `config/xapian_index`.
1446
+ - May run on Windows now?
1447
+ - Moved db backups to `config/backups`.
1448
+ - Backup database before migrations.
1449
+ - Removed
1450
+ - Do not store search history for combobox across sessions.
1451
+ - Fixes
1452
+ - Fix Admin Library folder picker.
1453
+ - Uatu does a better job of ignoring device changes.
1454
+ - Don't pop out of folder mode on searches.
1455
+ - Fix showing error on unable to load comic image.
1456
+
1457
+ ## v1.0.3
1458
+
1459
+ - Features
1460
+ - Force update all failed imports admin task.
1461
+ - Fixes
1462
+ - Fix moving folders to subfolder orphans folders bug.
1463
+ - Fix id does not exist redirect loop.
1464
+
1465
+ ## v1.0.2
1466
+
1467
+ - Features
1468
+ - Support for Deflate64 zip compression algorithm.
1469
+ - Fixes
1470
+ - Fix Failed Imports not retrying import when updated.
1471
+ - Make db updates more durable and possibly problem comics paths in log.
1472
+ - Discard orphan websocket connections from the connection pool.
1473
+ - Fix Admin Status drawer closing at wrong time.
1474
+
1475
+ ## v1.0.1
1476
+
1477
+ - Features
1478
+ - Justify order-by field in browser cards.
1479
+ - Fixes
1480
+ - Fixed next book change drawer opening settings drawer.
1481
+ - Fixed zero padding on browser card issue numbers.
1482
+
1483
+ ## v1.0.0
1484
+
1485
+ ### Vue 3
1486
+
1487
+ - Features
1488
+ - Removed old django admin pages.
1489
+ - Shutdown task for admins.
1490
+ - Configure logging with environment variables. See README.
1491
+ - Fixes
1492
+ - Fix displaying error in login dialog.
1493
+ - Fix saving community & critical rating filters to session
1494
+ - Fix fit to screen not enlarging pages smaller than screen.
1495
+ - Developer
1496
+ - Frontend is now Vuetify 3 over Vue 3. Using options API.
1497
+
1498
+ ## v0.14.5
1499
+
1500
+ - Fixes
1501
+ - Fix crash on decoding some comics metadata charset encoding.
1502
+
1503
+ ## v0.14.4
1504
+
1505
+ - Fixes
1506
+ - Fix login not available when AdminFlag Enable Non Users was unset.
1507
+ - Fix server PicklingError logging bug.
1508
+
1509
+ ## v0.14.3
1510
+
1511
+ - Fixes
1512
+ - Fix root_path configuration
1513
+
1514
+ ## v0.14.2
1515
+
1516
+ - Fixes
1517
+ - Fix Librarian process hanging due to logging deadlock.
1518
+ - Fix reader keyboard shortcut help.
1519
+ - Fix book change drawer appearing in the middle of books.
1520
+
1521
+ ## v0.14.1
1522
+
1523
+ - Fixes
1524
+ - Resolve ties in browser ordering with default comic ordering.
1525
+ - Always close book change drawer before reader opens.
1526
+
1527
+ ## v0.14.0
1528
+
1529
+ ### Sliding Pages
1530
+
1531
+ - Features
1532
+ - Animated sliding pages on reader.
1533
+ - Comic & PDF pages display loading, rendering and password errors.
1534
+ - Fixes
1535
+ - Filters with compound names were not loading choices.
1536
+ - Show only usable filters for current view as filter choices.
1537
+ - Allow filtering by None values when None values exist.
1538
+ - Handle an iOS bug with downloading pages and comics inside a PWA.
1539
+ - Fixed PDF failure to render on load and after changing settings.
1540
+ - Login & Change Password dialogs no longer activate Reader shortcuts by
1541
+ accident.
1542
+
1543
+ ## v0.13.0
1544
+
1545
+ ### Admin Panel
1546
+
1547
+ - Features
1548
+ - Single Page Admin Panel.
1549
+ - Users may now change their own passwords.
1550
+ - OPDS
1551
+ - Use facets for known User Agents that support them. Default to using entry
1552
+ links.
1553
+ - Gain a Newest Issues facet, a Start top link and a Featured / Oldest
1554
+ Unread link.
1555
+ - More metadata tags.
1556
+ - Special thanks to @beville for UX research and suggestions
1557
+ - HTTP Basic auth only used for OPDS.
1558
+ - Frontend components do lazy loading, should see some speedups.
1559
+ - Fixes
1560
+ - Fixed imprints & volume levels not displaying sometimes.
1561
+ - Fix large images & downloads for some OPDS clients.
1562
+ - Developer
1563
+ - API v3 is more restful.
1564
+ - /api/v3/ displays API documentation.
1565
+ - Vite replaces Vue CLI.
1566
+ - Pina replaces Vuex.
1567
+ - Vitest replaces Jest.
1568
+ - Django livereload server and debug toolbar removed.
1569
+
1570
+ ## v0.12.2
1571
+
1572
+ - Fixes
1573
+ - Fix OPDS downloading & streaming for Chunky Comic Reader.
1574
+ - Hack in facets as nav links for Panels & Chunky OPDS readers.
1575
+
1576
+ ## v0.12.1
1577
+
1578
+ - Fixes
1579
+ - Disable article ignore on name sort in folder view.
1580
+ - Fix browser navigation bug with issues top group.
1581
+
1582
+ ## v0.12.0
1583
+
1584
+ ### Syndication
1585
+
1586
+ - Features
1587
+ - OPDS v1, OPDS Streaming & OPDS Search support.
1588
+ - Codex now accepts HTTP Basic authentication.
1589
+ - If you run Codex behind a proxy that accepts HTTP Basic credentials that
1590
+ are different than those for Codex, be sure to disable authorization
1591
+ forwarding.
1592
+ - Larger browser covers.
1593
+ - Sort by name ignores leading articles in 11 languages.
1594
+ - Fixes
1595
+ - Use defusexml to load xml metadata for safety.
1596
+ - Removed process naming. My implementation was prone to instability.
1597
+
1598
+ ## v0.11.0
1599
+
1600
+ ### Task Monitor
1601
+
1602
+ - Features
1603
+ - Librarian tasks in progress appear in the settings side drawer for
1604
+ adminstratiors.
1605
+ - Covers are now created on demand by the browser, rather than on import.
1606
+ - Browser Read filter.
1607
+ - Fixes
1608
+ - Bookmark progress bar updates in browser after closing book.
1609
+ - Metadata web links fix.
1610
+
1611
+ ## v0.10.10
1612
+
1613
+ - Features
1614
+ - Reader nav toolbar shows position in series.
1615
+
1616
+ - Fixes
1617
+ - Fix inability to log in when Enable Non Users admin flag is unset.
1618
+ - Simplify Admin Library delete confirmation page to prevent OOM crash.
1619
+ - Move controls away from iphone notch and home bar.
1620
+
1621
+ ## v0.10.9
1622
+
1623
+ - Fixes
1624
+ - Fix null bookmark and count fields in metadata
1625
+ - Fix indeterminate finished state when children have bookmark progress.
1626
+ - Fix maintenance running inappropriately on first run. Crashed xapian
1627
+ database.
1628
+ - Fix reader metadata keymap
1629
+
1630
+ - Features
1631
+ - Progressive Web App support
1632
+ - Reader "Shrink to" settings replaced by "Fit to"
1633
+
1634
+ - Special Thanks
1635
+ - To ToxicFrog, who's been finding most of these bugs I'm fixing for a
1636
+ while.
1637
+
1638
+ ## v0.10.8
1639
+
1640
+ - Fixes
1641
+ - Fixed reader nav clicks always showing the toolbars.
1642
+ - Attempt to fix unwanted browser toolbars when treated as mobile app
1643
+ - Wait half a second before displaying reader placeholder spinner.
1644
+ - Fix metadata missing search query.
1645
+ - Fix metadata cache busting.
1646
+
1647
+ - Features
1648
+ - Accessibility enhancements for screen readers.
1649
+
1650
+ ## v0.10.7
1651
+
1652
+ - Features
1653
+ - Browser tries to scroll to closed book to keep your place.
1654
+
1655
+ - Fixes
1656
+ - Fixed missing lower click area on browser cards.
1657
+ - Fixed session bookmark interfering with logged in user bookmark.
1658
+
1659
+ ## v0.10.6
1660
+
1661
+ - Broken docker container
1662
+
1663
+ ## v0.10.5
1664
+
1665
+ - Features
1666
+ - Reader shrink to screen setting becomes fit to screen and embiggens small
1667
+ images.
1668
+ - Reader changing to the next book now has visual feedback and requires two
1669
+ clicks.
1670
+
1671
+ - Fixes
1672
+ - Removed vertical scrollbars when Reader shrunk to height.
1673
+ - Don't disturb the view when top group changes from higher to lower.
1674
+
1675
+ ## v0.10.4
1676
+
1677
+ - Fixes
1678
+ - Fix double tap for non-iOS touch devices.
1679
+
1680
+ - Features
1681
+ - Shrink to Screen reader setting.
1682
+ - Reader throbber if a page takes longer than a quarter second to load.
1683
+
1684
+ ## v0.10.3
1685
+
1686
+ - Fixes
1687
+ - Fix PDF going blank when settings change.
1688
+ - Remove vestigial browser scrollbars when they're not needed. Thanks to
1689
+ ToxicFrog.
1690
+ - Fix cover cleanup maintenance task.
1691
+
1692
+ ## v0.10.2
1693
+
1694
+ - Fixes
1695
+ - URLS dictate view over top group. Fixes linking into views.
1696
+ - Fix possible cover generation memory leak.
1697
+ - Build a deadfall trap for search indexer zombies. Use Offspring's brains
1698
+ as bait.
1699
+
1700
+ ## v0.10.1
1701
+
1702
+ - Fixes
1703
+ - Linked old top level comics orphaned by library folders migration.
1704
+
1705
+ ## v0.10.0
1706
+
1707
+ ### Portable Document Format
1708
+
1709
+ - Features
1710
+ - PDF support. Optional poppler-utils binary package needed to generate PDF
1711
+ cover thumbnails.
1712
+ - CBT support. Tarball comic archives.
1713
+ - Alphanumeric issue support. Requires rescanning existing comics.
1714
+ - Individual top level folders for each library.
1715
+ - Don't duplicate folder name in filename sort.
1716
+
1717
+ - Fixes
1718
+ - Comic file suffixes now matched case insensitively.
1719
+ - Finished comics count as 100% complete for bookmark aggregation.
1720
+ - Mark all folder descendant comics un/read recursively instead of immediate
1721
+ children.
1722
+ - Don't leak library root paths in Folder View for non-admins in the API.
1723
+ - Fixed aggregation bug showing inaccurate data when viewing group metadata.
1724
+ - More accurate Name sorting.
1725
+ - Fixed default start page for RTL comics.
1726
+ - Disabled reading links for empty comics.
1727
+ - Shield radiation from Venus to reduce zombie incidents.
1728
+
1729
+ ## v0.9.14
1730
+
1731
+ - Fixes
1732
+ - Fix comicbox config crash.
1733
+ - Use codex config namespace (\~/.config/codex) so codex doesn't interfere
1734
+ with standalone comicbox configs.
1735
+ - Comic issue numbers display to two decimal points instead of using ½
1736
+ glyphs.
1737
+
1738
+ - Features
1739
+ - Filename order by option. Disabled if the "Enable Folder View" Admin Flag
1740
+ is off.
1741
+
1742
+ ## v0.9.13
1743
+
1744
+ - Fixes
1745
+ - Fix root_path configuration for running codex in url sub-paths
1746
+ - Parse new filename patterns for metadata.
1747
+ - Slightly faster comic cover generation.
1748
+
1749
+ ## v0.9.12
1750
+
1751
+ - Fixes
1752
+ - Fix setting global reader settings.
1753
+ - Fixed reader settings not applying due to caching.
1754
+ - Bust reader caches when library updates.
1755
+ - Reader titles smaller and wrap on mobile.
1756
+ - Fixed deep linking into reader.
1757
+
1758
+ - Features
1759
+ - Disable reader prev/next touch swiping for phone sized browsers.
1760
+
1761
+ ## v0.9.11
1762
+
1763
+ - Fixes
1764
+ - Fixed covers not creating on import.
1765
+ - Covers update in browser when updated on disk.
1766
+ - Create missing covers on startup.
1767
+ - Bust browser cache when library updates.
1768
+ - Reader settings were not applying in some cases.
1769
+ - Fixed crash updating latest codex software version from the internet.
1770
+ - Fixed crash loading admin page.
1771
+
1772
+ - Features
1773
+ - Codex processes show names in ps and thread names on Linux.
1774
+ - Add Poll libraries action to FailedImports Admin Panel.
1775
+ - Space and shift-space previous and next reader shortcuts.
1776
+ - Reader settings UI redesigned to be clearer.
1777
+
1778
+ ## v0.9.10
1779
+
1780
+ Yanked. Crash loading admin page.
1781
+
1782
+ ## v0.9.9
1783
+
1784
+ - Fixes
1785
+ - Fixed combining CBI credits with other format credits
1786
+ - Failed imports notification appears only for new failed imports.
1787
+
1788
+ - Features
1789
+ - Update search index daily.
1790
+ - Clean up orphan comic covers every night.
1791
+
1792
+ ## v0.9.8
1793
+
1794
+ - Fixes
1795
+ - Fixed search index update crash while database is still updating.
1796
+ - Fixed issues larger than 99 bug.
1797
+ - Fixed issue not imported due to metadata cleaning bug.
1798
+ - Fixed crash updating search index while library was still updating.
1799
+ - Thread error trapping and diagnostics to root out zombie process issue.
1800
+ - Sort numeric terms in filter menus numerically not alphabetically.
1801
+ - Fixed comic name display wrapping in browser.
1802
+
1803
+ - Features
1804
+ - More comprehensive metadata sanitizing before import.
1805
+ - Reduced time checking to see if files have finished writing before import.
1806
+ - Uniform format for metadata parsing logging.
1807
+ - Credits sorted by last name.
1808
+
1809
+ ## v0.9.7
1810
+
1811
+ - Fixes
1812
+ - Coerce decimal values into valid ranges and precision before importing.
1813
+
1814
+ - Features
1815
+ - Clean up unused foreign keys once a day instead of after every import.
1816
+ - Clean up unused foreign keys librarian job available in admin panel.
1817
+
1818
+ ## v0.9.6
1819
+
1820
+ - Fixes
1821
+ - Don't open browser when a library changes when reading a comic.
1822
+ - Fixed crash creating illegal dates on import.
1823
+
1824
+ - Features
1825
+ - Replace description field with more common ComicInfo comments field.
1826
+ - Log files now rotate by size instead of daily.
1827
+ - Log path for failed imports and cover creation.
1828
+
1829
+ ## v0.9.5
1830
+
1831
+ - Fixed
1832
+ - Use an allow list for importing metadata to prevent crashes.
1833
+
1834
+ ## v0.9.4
1835
+
1836
+ - Fixes
1837
+ - Fixed crash when importing comments metadata.
1838
+
1839
+ ## v0.9.3
1840
+
1841
+ - Fixes
1842
+ - Import credits data for CBI and CIX tagged comics.
1843
+ - More liberal metadata decimal parsing.
1844
+
1845
+ ## v0.9.2
1846
+
1847
+ - Fixes
1848
+ - Fix rare migration bug for Cover Artist role.
1849
+
1850
+ ## v0.9.1
1851
+
1852
+ - Fixes
1853
+ - Fix to library group integrity checker
1854
+
1855
+ ## v0.9.0
1856
+
1857
+ ### Private Libraries
1858
+
1859
+ - Features
1860
+ - Libraries may have access restricted to certain user groups.
1861
+ - The "Critical Rating" tag is now a decimal value.
1862
+ - The "Community Rating" tag replaced "User Rating" tag, a decimal value.
1863
+ - Cover Credits role replaced by "Cover Artist".
1864
+ - Reader has a "Download Page" button.
1865
+ - Metadata dialog highlights filtered items.
1866
+ - Metadata dialog is faster.
1867
+ - Admin Queue Job for creating missing comic covers.
1868
+
1869
+ ## v0.8.0
1870
+
1871
+ ### Search
1872
+
1873
+ - Features
1874
+ - Metadata search field in browser
1875
+ - Settings dialogs replaced with side drawers
1876
+ - Changed some keyboard shortcuts in reader.
1877
+ - "group by" renamed to "top group".
1878
+ - Admin panel gained a Queue Jobs page.
1879
+ - Fixes
1880
+ - Browser does a better job of remembering your last browser view on first
1881
+ load.
1882
+ - Reader's "close book" button now does a better job returning you to your
1883
+ last browser view.
1884
+ - Metadata panel cleanup and fix some missing fields.
1885
+ - Binary Dependencies
1886
+ - Codex now requires the Xapian library to run as a native application
1887
+ - Drop Support
1888
+ - The linux/armhf platform is no longer published for Docker.
1889
+ - License
1890
+ - Codex is GPLv3
1891
+
1892
+ ## v0.7.5
1893
+
1894
+ - Fixes
1895
+ - Fix integrity cleanup check for old comic_folder relations that prevented
1896
+ migrations.
1897
+
1898
+ ## v0.7.4
1899
+
1900
+ - Fixes
1901
+ - Fix integrity cleanup check for more types of integrity errors that may
1902
+ have prevented clean db migrations.
1903
+ - Fix last filter, group, sort not loading properly for some new views.
1904
+
1905
+ ## v0.7.3
1906
+
1907
+ - Fixes
1908
+ - Fix crash updating latest version.
1909
+ - Fix a folder not found crash in folder view.
1910
+ - Features
1911
+ - Database indexing speedups.
1912
+
1913
+ ## v0.7.2
1914
+
1915
+ - Fixes
1916
+ - Fix another integrity check bug
1917
+
1918
+ ## v0.7.1
1919
+
1920
+ - Fixes
1921
+ - Fix and integrity check crash that happened with an older databases.
1922
+ - Features
1923
+ - Added `CODEX_SKIP_INTEGRITY_CHECK` env var.
1924
+
1925
+ ## v0.7.0
1926
+
1927
+ ### Feels Snappier
1928
+
1929
+ - Database Migration
1930
+ - v0.7.0 changes the database schema. Databases run with v0.7.0+ will not
1931
+ run on previous versions of codex.
1932
+
1933
+ - Features
1934
+ - Big speed up to importing comics for large imports.
1935
+ - Speed up creating comic covers on large imports.
1936
+ - Admin Panel options for polling (formerly "scanning") and watching events
1937
+ have changed names.
1938
+ - Admin Panel task added to regenerate all comic covers.
1939
+ - Browser Admin Menu option added for polling all Libraries on demand.
1940
+ - Comics with no specified Publishers, Imprints and Series no longer have
1941
+ induced default names for these but have no name like Volumes.
1942
+ - Codex repairs database integrity on startup.
1943
+ - Codex backs up the database every night.
1944
+ - Autodetect server timezone (for logging).
1945
+ - Use TZ and TIMEZONE environment variables to explicitly set server
1946
+ timezone.
1947
+ - Added `VERBOSE` logging level to help screen out bulk `DEBUG` messages
1948
+ from dependencies.
1949
+ - Truncated logging messages for easier reading.
1950
+
1951
+ - Fixes
1952
+ - Fixed metadata screen displaying incorrect information.
1953
+ - Now compatible with python 3.10.
1954
+
1955
+ ## v0.6.8
1956
+
1957
+ - Fixes
1958
+ - Fixes some import bugs with filename parsing when there are no tags
1959
+ - Fixed two page view toggle hotkey
1960
+ - Features
1961
+ - Browser now tells you what kind of items you're looking at.
1962
+ - Reader swiping navigation
1963
+ - Reader keyboard shortcut help dialog
1964
+ - Tentative linux/armhf support. No way for me to test this
1965
+ - Vacuum the sqlite database once a day to prevent bloat
1966
+ - Corrupt database rebuild procedure. See README.
1967
+
1968
+ ## v0.6.7
1969
+
1970
+ - Dark admin pages and fix template overrides.
1971
+
1972
+ ## v0.6.6
1973
+
1974
+ - Automate multi-arch builds
1975
+
1976
+ ## v0.6.5
1977
+
1978
+ - Build Docker images for amd64 & arm64 manually.
1979
+
1980
+ ## v0.6.4
1981
+
1982
+ - Fix reader bug that only displayed first page
1983
+
1984
+ ## v0.6.3
1985
+
1986
+ - Add LOGLEVEL environment variable.
1987
+ - Set to DEBUG to see everything.
1988
+ - Removed DEV environment variable.
1989
+ - Possible fix for newly imported covers not displaying.
1990
+
1991
+ ## v0.6.2
1992
+
1993
+ - Fixes
1994
+ - Fixed intermittent Librarian startup crash in docker.
1995
+ - Fixed DEBUG environment variable to be able to run in production.
1996
+ - Dev
1997
+ - Added DEV environment variable for dev environment.
1998
+
1999
+ ## v0.6.1
2000
+
2001
+ - Fixes
2002
+ - Fix librarian startup crash. Prevented admin actions from happening.
2003
+
2004
+ ## v0.6.0
2005
+
2006
+ ### Better Filtering and Sorting
2007
+
2008
+ - Features
2009
+ - New Filters
2010
+ - New sort options: Updated Time and Maturity Rating
2011
+ - New frontend URL scheme
2012
+ - New API
2013
+ - Added time to the browse card when sorting by time fields
2014
+ - Browser pagination footer now remains fixed on the page
2015
+ - Browser pagination footer is now a slider to handle larger collections
2016
+ - Notifications now appear in reader as well as browser
2017
+ - On comic import failure, log the path as well as the reason
2018
+ - Codex version information moved to Browser > Settings
2019
+ - Fixes
2020
+ - Fixed a bug importing Story Arc Series Groups and Genres. Requires
2021
+ re-import to correct.
2022
+ - Fixed a bug with sorting that grouped improperly and showed the wrong
2023
+ covers for reverse sorts.
2024
+ - Scanning notifications on login not disappearing bug squashed
2025
+ - Fixed a bug where the browser settings menu wouldn't close when opening a
2026
+ dialog
2027
+
2028
+ ## v0.5.18
2029
+
2030
+ - Fixes
2031
+ - Fix filters not changing display bug
2032
+
2033
+ ## v0.5.17
2034
+
2035
+ - Fixes
2036
+ - Fix root_path not parsing bug
2037
+
2038
+ ## v0.5.16
2039
+
2040
+ - Fixes
2041
+ - Fix broken startup when parsing json shared between front and back end
2042
+
2043
+ ## v0.5.15
2044
+
2045
+ - Features
2046
+ - Metadata popup is now faster.
2047
+ - Metadata popup now shows created_at, updated_at and path (if admin).
2048
+ - Removed numeric and common password validators. Made the minimum length 4.
2049
+
2050
+ ## v0.5.14
2051
+
2052
+ - Features
2053
+ - Metadata view for browse containers. Also observes filters.
2054
+ - Covers now regenerate on re-import.
2055
+
2056
+ - Fixes
2057
+ - Fix scanning notification
2058
+ - Fix unable to delete libraries bug
2059
+
2060
+ ## v0.5.13
2061
+
2062
+ - Features
2063
+ - Admin Flag for automatically updating codex
2064
+ - Force updates from the admin panel with an Admin Flag action
2065
+ - Snackbar for notifying about failed imports
2066
+
2067
+ ## v0.5.12
2068
+
2069
+ - Features
2070
+ - Admin page for failed imports
2071
+ - Snackbar tells admins when scans are happening
2072
+ - Report the latest version available in the browser footer tooltip
2073
+ - Admin flag for disabling codex for non-users
2074
+
2075
+ ## v0.5.11
2076
+
2077
+ - Features
2078
+ - Browser rows now adapt to browse tile size
2079
+ - Browser covers for containers now match data we're sorting by
2080
+ - Serve static files faster
2081
+ - Fixes
2082
+ - Reader fix settings for all comics were not setting properly
2083
+ - Fix bookmarks for sessions that aren't logged in
2084
+
2085
+ ## v0.5.10
2086
+
2087
+ - Fixes
2088
+ - Fix filtering bugs
2089
+ - Fix mark read/unread bugs
2090
+ - Fix reader settings not setting properly
2091
+ - Fix reader images positioning
2092
+ - Fix minor crash closing books with uninitialized browser app
2093
+
2094
+ ## v0.5.9
2095
+
2096
+ - Fixes
2097
+ - Fix sorting for folder view
2098
+ - Fix import bugs
2099
+ - Features
2100
+ - Display sort key value in browse tile
2101
+ - Display standard image for missing covers
2102
+ - Slightly more helpful 404 page
2103
+
2104
+ ## v0.5.8
2105
+
2106
+ - Upload mistake with 0.5.7. This is just a version bump.
2107
+
2108
+ ## v0.5.7
2109
+
2110
+ - Fixes
2111
+ - Fix import crashes
2112
+ - Remove scan locks on startup
2113
+
2114
+ - Features
2115
+ - Allow credits with an empty role
2116
+ - Pagination of large browse results
2117
+ - Center comic pages better
2118
+ - Add download link to browser menu
2119
+ - Log to files as well as console
2120
+
2121
+ ## v0.5.6
2122
+
2123
+ - Fixes
2124
+ - Websocket path security wasn't handling leading slashes well. Skip it.
2125
+
2126
+ ## v0.5.5
2127
+
2128
+ - Fixes
2129
+ - Revert to whitenoise 5.1.0 which works with subpaths
2130
+
2131
+ ## v0.5.4
2132
+
2133
+ - Fixes
2134
+ - Fix crash on start if all static dirs do not exist.
2135
+
2136
+ ## v0.5.3
2137
+
2138
+ - Fixes
2139
+ - Fixed login bug introduces in v0.5.3 (thanks hubcaps)
2140
+ - Fixed filtering bug introduced in v0.5.2
2141
+ - Features
2142
+ - Versioned API
2143
+ - Toast popup for admins indicating libraries are scanning.
2144
+ - Periodic frontend refresh during long scans.
2145
+ - Codex version displayed in browser footer
2146
+
2147
+ ## v0.5.2
2148
+
2149
+ - Features
2150
+ - Lazy load filter choices when the menu opens
2151
+ - Documentation moved into admin panel
2152
+ - Fixes
2153
+ - Fix multiprocessing for Windows
2154
+
2155
+ ## v0.5.1
2156
+
2157
+ - Minor bugfixes.
2158
+
2159
+ ## v0.5.0
2160
+
2161
+ ### First useful working version
2162
+
2163
+ - Productionized alpha release
2164
+
2165
+ ## v0.4.0
2166
+
2167
+ ### Polished UI
2168
+
2169
+ - Polished VueJS frontend
2170
+
2171
+ ## v0.3.0
2172
+
2173
+ ### I'm a frontend developer!
2174
+
2175
+ - Single Page VueJS frontend PoC without much styling
2176
+
2177
+ ## v0.2.0
2178
+
2179
+ ### It's alive
2180
+
2181
+ - Working application with all initial features
2182
+ - Django frontend
2183
+
2184
+ ## v0.1.0
2185
+
2186
+ ### Hello world
2187
+
2188
+ - Proof of concept.