aa-sov-timer 3.0.0b3__tar.gz → 3.2.0__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 (128) hide show
  1. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/PKG-INFO +46 -30
  2. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/README.md +44 -28
  3. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/pyproject.toml +1 -1
  4. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/__init__.py +1 -1
  5. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/auth_hooks.py +7 -6
  6. aa_sov_timer-3.2.0/sovtimer/handler/esi_handler.py +85 -0
  7. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/cs_CZ/LC_MESSAGES/django.po +14 -14
  8. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/de/LC_MESSAGES/django.po +14 -14
  9. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/django.pot +15 -15
  10. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/es/LC_MESSAGES/django.po +14 -14
  11. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/fr_FR/LC_MESSAGES/django.po +14 -14
  12. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/it_IT/LC_MESSAGES/django.po +14 -14
  13. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/ja/LC_MESSAGES/django.po +14 -14
  14. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/ko_KR/LC_MESSAGES/django.po +14 -14
  15. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/nl_NL/LC_MESSAGES/django.po +14 -14
  16. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/pl_PL/LC_MESSAGES/django.po +14 -14
  17. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/ru/LC_MESSAGES/django.po +14 -14
  18. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/sk/LC_MESSAGES/django.po +14 -14
  19. aa_sov_timer-3.2.0/sovtimer/locale/uk/LC_MESSAGES/django.mo +0 -0
  20. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/uk/LC_MESSAGES/django.po +20 -20
  21. aa_sov_timer-3.2.0/sovtimer/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  22. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/zh_Hans/LC_MESSAGES/django.po +23 -22
  23. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/models.py +13 -44
  24. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/css/aa-sov-timer.css +17 -1
  25. aa_sov_timer-3.2.0/sovtimer/static/sovtimer/css/aa-sov-timer.min.css +2 -0
  26. aa_sov_timer-3.2.0/sovtimer/static/sovtimer/css/aa-sov-timer.min.css.map +1 -0
  27. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/js/aa-sov-timer.js +116 -23
  28. aa_sov_timer-3.2.0/sovtimer/static/sovtimer/js/aa-sov-timer.min.js +2 -0
  29. aa_sov_timer-3.2.0/sovtimer/static/sovtimer/js/aa-sov-timer.min.js.map +1 -0
  30. {aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/libs/DataTables/2.3.4 → aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5}/dataTables.bootstrap5.js +1 -2
  31. {aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/libs/DataTables/2.3.4 → aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5}/dataTables.bootstrap5.min.js +1 -2
  32. aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5/dataTables.bootstrap5.min.js.map +1 -0
  33. aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5/dataTables.js +14127 -0
  34. aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5/dataTables.min.js +5 -0
  35. aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5/dataTables.min.js.map +1 -0
  36. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/base.html +7 -2
  37. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/bundles/datatables-2-css.html +1 -1
  38. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/bundles/datatables-2-js.html +2 -2
  39. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/partials/dashboard/table.html +3 -3
  40. aa_sov_timer-3.2.0/sovtimer/tests/test_auth_hooks.py +76 -0
  41. aa_sov_timer-3.2.0/sovtimer/tests/test_handler_esi.py +110 -0
  42. aa_sov_timer-3.2.0/sovtimer/tests/test_integration.py +22 -0
  43. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/utils.py +14 -0
  44. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/views.py +9 -3
  45. aa_sov_timer-3.0.0b3/sovtimer/locale/uk/LC_MESSAGES/django.mo +0 -0
  46. aa_sov_timer-3.0.0b3/sovtimer/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  47. aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/css/aa-sov-timer.min.css +0 -2
  48. aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/css/aa-sov-timer.min.css.map +0 -1
  49. aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/js/aa-sov-timer.min.js +0 -2
  50. aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/js/aa-sov-timer.min.js.map +0 -1
  51. aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/libs/DataTables/2.3.4/dataTables.bootstrap5.min.js.map +0 -1
  52. aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/libs/DataTables/2.3.4/datatables.min.js +0 -10
  53. aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/libs/DataTables/2.3.4/datatables.min.js.map +0 -1
  54. aa_sov_timer-3.0.0b3/sovtimer/tests/test_integration.py +0 -61
  55. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/.gitignore +0 -0
  56. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/LICENSE +0 -0
  57. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/app_settings.py +0 -0
  58. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/apps.py +0 -0
  59. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/constants.py +0 -0
  60. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/.gitkeep +0 -0
  61. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  62. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/de/LC_MESSAGES/django.mo +0 -0
  63. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/es/LC_MESSAGES/django.mo +0 -0
  64. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/fr_FR/LC_MESSAGES/django.mo +0 -0
  65. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/it_IT/LC_MESSAGES/django.mo +0 -0
  66. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/ja/LC_MESSAGES/django.mo +0 -0
  67. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/ko_KR/LC_MESSAGES/django.mo +0 -0
  68. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  69. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  70. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/ru/LC_MESSAGES/django.mo +0 -0
  71. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/locale/sk/LC_MESSAGES/django.mo +0 -0
  72. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/management/commands/__init__.py +0 -0
  73. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/management/commands/sovtimer_load_initial_data.py +0 -0
  74. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0001_initial.py +0 -0
  75. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0002_aasovtimercampaigns_aasovtimerstructures.py +0 -0
  76. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0003_auto_20201113_1033.py +0 -0
  77. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0004_auto_20201113_1856.py +0 -0
  78. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0005_auto_20201114_0720.py +0 -0
  79. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0006_rename_models.py +0 -0
  80. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0007_cleanup_models.py +0 -0
  81. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0008_fix_campaign_attackers_score.py +0 -0
  82. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0009_alter_campaign_options_and_more.py +0 -0
  83. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/0010_alter_campaign_event_type.py +0 -0
  84. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/migrations/__init__.py +0 -0
  85. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/providers.py +0 -0
  86. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/font/materialicons/v143/MaterialIcons-Regular.woff2 +0 -0
  87. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/font/materialicons/v143/README.md +0 -0
  88. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/images/zkillboard.png +0 -0
  89. {aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/libs/DataTables/2.3.4 → aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5}/dataTables.bootstrap5.css +0 -0
  90. {aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/libs/DataTables/2.3.4 → aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5}/dataTables.bootstrap5.min.css +0 -0
  91. {aa_sov_timer-3.0.0b3/sovtimer/static/sovtimer/libs/DataTables/2.3.4 → aa_sov_timer-3.2.0/sovtimer/static/sovtimer/libs/DataTables/2.3.5}/dataTables.bootstrap5.min.css.map +0 -0
  92. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.css +0 -0
  93. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.min.css +0 -0
  94. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/css/columnControl.bootstrap5.min.css.map +0 -0
  95. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.js +0 -0
  96. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.min.js +0 -0
  97. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/js/columnControl.bootstrap5.min.js.map +0 -0
  98. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.js +0 -0
  99. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.min.js +0 -0
  100. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/ColumnControl/1.1.1/js/dataTables.columnControl.min.js.map +0 -0
  101. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.css +0 -0
  102. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.min.css +0 -0
  103. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/css/fixedHeader.bootstrap5.min.css.map +0 -0
  104. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.js +0 -0
  105. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.min.js +0 -0
  106. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/js/dataTables.fixedHeader.min.js.map +0 -0
  107. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.js +0 -0
  108. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.min.js +0 -0
  109. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/static/sovtimer/libs/DataTables/Extensions/FixedHeader/4.0.4/js/fixedHeader.bootstrap5.min.js.map +0 -0
  110. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tasks.py +0 -0
  111. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/bundles/aa-sov-timer-css.html +0 -0
  112. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/bundles/aa-sov-timer-js.html +0 -0
  113. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/dashboard.html +0 -0
  114. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/partials/common/spinner.html +0 -0
  115. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/templates/sovtimer/partials/footer/app-translation-footer.html +0 -0
  116. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/__init__.py +0 -0
  117. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/fixtures/allianceauth.json +0 -0
  118. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/fixtures/load_allianceauth.py +0 -0
  119. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/fixtures/load_sovtimer.py +0 -0
  120. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/fixtures/sovtimer.json +0 -0
  121. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/fixtures/utils.py +0 -0
  122. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/test_ajax_calls.py +0 -0
  123. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/test_app_settings.py +0 -0
  124. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/test_model_campaign.py +0 -0
  125. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/test_model_sovereignty_structures.py +0 -0
  126. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/test_tasks.py +0 -0
  127. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/tests/test_user_agent.py +0 -0
  128. {aa_sov_timer-3.0.0b3 → aa_sov_timer-3.2.0}/sovtimer/urls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aa-sov-timer
3
- Version: 3.0.0b3
3
+ Version: 3.2.0
4
4
  Summary: Sov Campaign Timer for Alliance Auth
5
5
  Project-URL: Changelog, https://github.com/ppfeufer/aa-sov-timer/blob/master/CHANGELOG.md
6
6
  Project-URL: Codecov, https://codecov.io/gh/ppfeufer/aa-sov-timer
@@ -704,7 +704,7 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
704
704
  Requires-Python: <3.14,>=3.10
705
705
  Requires-Dist: allianceauth-app-utils>=1.25
706
706
  Requires-Dist: allianceauth<5,>=4.9
707
- Requires-Dist: django-esi>=8.0.0b2
707
+ Requires-Dist: django-esi<9,>=8
708
708
  Requires-Dist: django-eveuniverse>=1.5.4
709
709
  Provides-Extra: tests-allianceauth-latest
710
710
  Requires-Dist: coverage; extra == 'tests-allianceauth-latest'
@@ -743,13 +743,14 @@ ______________________________________________________________________
743
743
  - [Step 2: Update Your AA Settings](#step-2-update-your-aa-settings)
744
744
  - [Step 3: Finalizing the Installation](#step-3-finalizing-the-installation)
745
745
  - [Step 4: Preload Eve Universe Data](#step-4-preload-eve-universe-data)
746
- - [Step 5: Setting up Permission](#step-5-setting-up-permission)
747
- - [Step 6: Keep Campaigns Updated](#step-6-keep-campaigns-updated)
746
+ - [Step 5: Restart Supervisor](#step-5-restart-supervisor)
748
747
  - [Docker Installation](#docker-installation)
749
748
  - [Step 1: Add the App](#step-1-add-the-app)
750
749
  - [Step 2: Update Your AA Settings](#step-2-update-your-aa-settings-1)
751
750
  - [Step 3: Build Auth and Restart Your Containers](#step-3-build-auth-and-restart-your-containers)
752
751
  - [Step 4: Finalizing the Installation](#step-4-finalizing-the-installation)
752
+ - [Common Steps / Configuration](#common-steps--configuration)
753
+ - [(Optional) Allow Public Views](#optional-allow-public-views)
753
754
  - [Updating](#updating)
754
755
  - [Bare Metal Installation](#bare-metal-installation-1)
755
756
  - [Docker Installation](#docker-installation-1)
@@ -788,17 +789,24 @@ Make sure you're in the virtual environment (venv) of your Alliance Auth install
788
789
  Then install the latest version:
789
790
 
790
791
  ```shell
791
- pip install aa-sov-timer==2.6.2
792
+ pip install aa-sov-timer==3.2.0
792
793
  ```
793
794
 
794
795
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings"></a>
795
796
 
796
797
  Configure your AA settings (`local.py`) as follows:
797
798
 
798
- - Add `'eveuniverse',` to `INSTALLED_APPS` if not already done for another app
799
- - Add `'sovtimer',` to `INSTALLED_APPS`
799
+ - Add `"eveuniverse",` to `INSTALLED_APPS` if not already done for another app
800
+ - Add `"sovtimer",` to `INSTALLED_APPS`
801
+ - Add the Scheduled Task
800
802
 
801
- Restart your supervisor
803
+ ```python
804
+ # AA Sovereignty Timer - Run sovereignty related updates every 30 seconds
805
+ CELERYBEAT_SCHEDULE["sovtimer.tasks.run_sov_campaign_updates"] = {
806
+ "task": "sovtimer.tasks.run_sov_campaign_updates",
807
+ "schedule": 30,
808
+ }
809
+ ```
802
810
 
803
811
  #### Step 3: Finalizing the Installation<a name="step-3-finalizing-the-installation"></a>
804
812
 
@@ -822,25 +830,11 @@ python manage.py sovtimer_load_initial_data
822
830
 
823
831
  Both commands might take a moment or two, so be patient ...
824
832
 
825
- #### Step 5: Setting up Permission<a name="step-5-setting-up-permission"></a>
826
-
827
- Now you can set up permissions in Alliance Auth for your users.
828
- Add `sovtimer | Sovereignty Timer | Can access the Sovereignty Timer module` to
829
- the states and/or groups you would like to have access.
830
-
831
- #### Step 6: Keep Campaigns Updated<a name="step-6-keep-campaigns-updated"></a>
832
-
833
- Add the following scheduled task to your `local.py`. One done, restart your supervisor.
833
+ #### Step 5: Restart Supervisor<a name="step-5-restart-supervisor"></a>
834
834
 
835
- ```python
836
- # AA Sovereignty Timer - Run sovereignty related updates every 30 seconds
837
- CELERYBEAT_SCHEDULE["sovtimer.tasks.run_sov_campaign_updates"] = {
838
- "task": "sovtimer.tasks.run_sov_campaign_updates",
839
- "schedule": 30,
840
- }
841
- ```
835
+ Once you have completed all previous steps, restart your AA supervisor service to apply the changes.
842
836
 
843
- Now your system is updating the sovereignty campaigns every 30 seconds.
837
+ **Continue with the [Common Steps / Configuration](#common-steps--configuration) below to finish the installation.**
844
838
 
845
839
  ### Docker Installation<a name="docker-installation"></a>
846
840
 
@@ -849,15 +843,15 @@ Now your system is updating the sovereignty campaigns every 30 seconds.
849
843
  Add the app to your `conf/requirements.txt`:
850
844
 
851
845
  ```text
852
- aa-sov-timer==2.6.2
846
+ aa-sov-timer==3.2.0
853
847
  ```
854
848
 
855
849
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings-1"></a>
856
850
 
857
851
  Configure your AA settings (`conf/local.py`) as follows:
858
852
 
859
- - Add `'eveuniverse',` to `INSTALLED_APPS` if not already done for another app
860
- - Add `'sovtimer',` to `INSTALLED_APPS`
853
+ - Add `"eveuniverse",` to `INSTALLED_APPS` if not already done for another app
854
+ - Add `"sovtimer",` to `INSTALLED_APPS`
861
855
  - Add the Scheduled Task
862
856
 
863
857
  ```python
@@ -889,6 +883,28 @@ auth eveuniverse_load_data map
889
883
  auth sovtimer_load_initial_data
890
884
  ```
891
885
 
886
+ **Continue with the [Common Steps / Configuration](#common-steps--configuration) below to finish the installation.**
887
+
888
+ ### Common Steps / Configuration<a name="common-steps--configuration"></a>
889
+
890
+ #### (Optional) Allow Public Views<a name="optional-allow-public-views"></a>
891
+
892
+ This app supports AA's feature of public views. \
893
+ To allow this feature, please add `"sovtimer",`, to the list of `APPS_WITH_PUBLIC_VIEWS` in your `local.py` or `conf/local.py` for Docker:
894
+
895
+ ```python
896
+ APPS_WITH_PUBLIC_VIEWS = [
897
+ "sovtimer",
898
+ ]
899
+ ```
900
+
901
+ > [!NOTE]
902
+ >
903
+ > If you don't have a list for `APPS_WITH_PUBLIC_VIEWS` yet, then add the whole
904
+ > block from here.
905
+
906
+ Restart your supervisor service or your Docker containers to apply the changes.
907
+
892
908
  ## Updating<a name="updating"></a>
893
909
 
894
910
  ### Bare Metal Installation<a name="bare-metal-installation-1"></a>
@@ -900,7 +916,7 @@ Then run the following commands from your AA project directory (the one that
900
916
  contains `manage.py`).
901
917
 
902
918
  ```shell
903
- pip install aa-sov-timer==2.6.2
919
+ pip install aa-sov-timer==3.2.0
904
920
 
905
921
  python manage.py collectstatic
906
922
  python manage.py migrate
@@ -913,7 +929,7 @@ Finally, restart your AA supervisor service.
913
929
  To update your existing installation of AA Sovereignty Timer, all you need to do is to update the respective line in your `conf/requirements.txt` file to the latest version.
914
930
 
915
931
  ```text
916
- aa-sov-timer==2.6.2
932
+ aa-sov-timer==3.2.0
917
933
  ```
918
934
 
919
935
  Now rebuild your containers and restart them:
@@ -29,13 +29,14 @@ ______________________________________________________________________
29
29
  - [Step 2: Update Your AA Settings](#step-2-update-your-aa-settings)
30
30
  - [Step 3: Finalizing the Installation](#step-3-finalizing-the-installation)
31
31
  - [Step 4: Preload Eve Universe Data](#step-4-preload-eve-universe-data)
32
- - [Step 5: Setting up Permission](#step-5-setting-up-permission)
33
- - [Step 6: Keep Campaigns Updated](#step-6-keep-campaigns-updated)
32
+ - [Step 5: Restart Supervisor](#step-5-restart-supervisor)
34
33
  - [Docker Installation](#docker-installation)
35
34
  - [Step 1: Add the App](#step-1-add-the-app)
36
35
  - [Step 2: Update Your AA Settings](#step-2-update-your-aa-settings-1)
37
36
  - [Step 3: Build Auth and Restart Your Containers](#step-3-build-auth-and-restart-your-containers)
38
37
  - [Step 4: Finalizing the Installation](#step-4-finalizing-the-installation)
38
+ - [Common Steps / Configuration](#common-steps--configuration)
39
+ - [(Optional) Allow Public Views](#optional-allow-public-views)
39
40
  - [Updating](#updating)
40
41
  - [Bare Metal Installation](#bare-metal-installation-1)
41
42
  - [Docker Installation](#docker-installation-1)
@@ -74,17 +75,24 @@ Make sure you're in the virtual environment (venv) of your Alliance Auth install
74
75
  Then install the latest version:
75
76
 
76
77
  ```shell
77
- pip install aa-sov-timer==2.6.2
78
+ pip install aa-sov-timer==3.2.0
78
79
  ```
79
80
 
80
81
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings"></a>
81
82
 
82
83
  Configure your AA settings (`local.py`) as follows:
83
84
 
84
- - Add `'eveuniverse',` to `INSTALLED_APPS` if not already done for another app
85
- - Add `'sovtimer',` to `INSTALLED_APPS`
85
+ - Add `"eveuniverse",` to `INSTALLED_APPS` if not already done for another app
86
+ - Add `"sovtimer",` to `INSTALLED_APPS`
87
+ - Add the Scheduled Task
86
88
 
87
- Restart your supervisor
89
+ ```python
90
+ # AA Sovereignty Timer - Run sovereignty related updates every 30 seconds
91
+ CELERYBEAT_SCHEDULE["sovtimer.tasks.run_sov_campaign_updates"] = {
92
+ "task": "sovtimer.tasks.run_sov_campaign_updates",
93
+ "schedule": 30,
94
+ }
95
+ ```
88
96
 
89
97
  #### Step 3: Finalizing the Installation<a name="step-3-finalizing-the-installation"></a>
90
98
 
@@ -108,25 +116,11 @@ python manage.py sovtimer_load_initial_data
108
116
 
109
117
  Both commands might take a moment or two, so be patient ...
110
118
 
111
- #### Step 5: Setting up Permission<a name="step-5-setting-up-permission"></a>
112
-
113
- Now you can set up permissions in Alliance Auth for your users.
114
- Add `sovtimer | Sovereignty Timer | Can access the Sovereignty Timer module` to
115
- the states and/or groups you would like to have access.
116
-
117
- #### Step 6: Keep Campaigns Updated<a name="step-6-keep-campaigns-updated"></a>
118
-
119
- Add the following scheduled task to your `local.py`. One done, restart your supervisor.
119
+ #### Step 5: Restart Supervisor<a name="step-5-restart-supervisor"></a>
120
120
 
121
- ```python
122
- # AA Sovereignty Timer - Run sovereignty related updates every 30 seconds
123
- CELERYBEAT_SCHEDULE["sovtimer.tasks.run_sov_campaign_updates"] = {
124
- "task": "sovtimer.tasks.run_sov_campaign_updates",
125
- "schedule": 30,
126
- }
127
- ```
121
+ Once you have completed all previous steps, restart your AA supervisor service to apply the changes.
128
122
 
129
- Now your system is updating the sovereignty campaigns every 30 seconds.
123
+ **Continue with the [Common Steps / Configuration](#common-steps--configuration) below to finish the installation.**
130
124
 
131
125
  ### Docker Installation<a name="docker-installation"></a>
132
126
 
@@ -135,15 +129,15 @@ Now your system is updating the sovereignty campaigns every 30 seconds.
135
129
  Add the app to your `conf/requirements.txt`:
136
130
 
137
131
  ```text
138
- aa-sov-timer==2.6.2
132
+ aa-sov-timer==3.2.0
139
133
  ```
140
134
 
141
135
  #### Step 2: Update Your AA Settings<a name="step-2-update-your-aa-settings-1"></a>
142
136
 
143
137
  Configure your AA settings (`conf/local.py`) as follows:
144
138
 
145
- - Add `'eveuniverse',` to `INSTALLED_APPS` if not already done for another app
146
- - Add `'sovtimer',` to `INSTALLED_APPS`
139
+ - Add `"eveuniverse",` to `INSTALLED_APPS` if not already done for another app
140
+ - Add `"sovtimer",` to `INSTALLED_APPS`
147
141
  - Add the Scheduled Task
148
142
 
149
143
  ```python
@@ -175,6 +169,28 @@ auth eveuniverse_load_data map
175
169
  auth sovtimer_load_initial_data
176
170
  ```
177
171
 
172
+ **Continue with the [Common Steps / Configuration](#common-steps--configuration) below to finish the installation.**
173
+
174
+ ### Common Steps / Configuration<a name="common-steps--configuration"></a>
175
+
176
+ #### (Optional) Allow Public Views<a name="optional-allow-public-views"></a>
177
+
178
+ This app supports AA's feature of public views. \
179
+ To allow this feature, please add `"sovtimer",`, to the list of `APPS_WITH_PUBLIC_VIEWS` in your `local.py` or `conf/local.py` for Docker:
180
+
181
+ ```python
182
+ APPS_WITH_PUBLIC_VIEWS = [
183
+ "sovtimer",
184
+ ]
185
+ ```
186
+
187
+ > [!NOTE]
188
+ >
189
+ > If you don't have a list for `APPS_WITH_PUBLIC_VIEWS` yet, then add the whole
190
+ > block from here.
191
+
192
+ Restart your supervisor service or your Docker containers to apply the changes.
193
+
178
194
  ## Updating<a name="updating"></a>
179
195
 
180
196
  ### Bare Metal Installation<a name="bare-metal-installation-1"></a>
@@ -186,7 +202,7 @@ Then run the following commands from your AA project directory (the one that
186
202
  contains `manage.py`).
187
203
 
188
204
  ```shell
189
- pip install aa-sov-timer==2.6.2
205
+ pip install aa-sov-timer==3.2.0
190
206
 
191
207
  python manage.py collectstatic
192
208
  python manage.py migrate
@@ -199,7 +215,7 @@ Finally, restart your AA supervisor service.
199
215
  To update your existing installation of AA Sovereignty Timer, all you need to do is to update the respective line in your `conf/requirements.txt` file to the latest version.
200
216
 
201
217
  ```text
202
- aa-sov-timer==2.6.2
218
+ aa-sov-timer==3.2.0
203
219
  ```
204
220
 
205
221
  Now rebuild your containers and restart them:
@@ -41,7 +41,7 @@ dynamic = [
41
41
  dependencies = [
42
42
  "allianceauth>=4.9,<5",
43
43
  "allianceauth-app-utils>=1.25",
44
- "django-esi>=8.0.0b2",
44
+ "django-esi>=8,<9",
45
45
  "django-eveuniverse>=1.5.4",
46
46
  ]
47
47
  optional-dependencies.tests-allianceauth-latest = [
@@ -5,7 +5,7 @@ App init
5
5
  # Django
6
6
  from django.utils.translation import gettext_lazy as _
7
7
 
8
- __version__ = "3.0.0-beta.3"
8
+ __version__ = "3.2.0"
9
9
  __title__ = "Sovereignty Timer"
10
10
  __title_translated__ = _("Sovereignty Timer")
11
11
 
@@ -33,11 +33,7 @@ class AaSovtimerMenuItem(MenuItemHook): # pylint: disable=too-few-public-method
33
33
  :return:
34
34
  """
35
35
 
36
- return (
37
- MenuItemHook.render(self, request=request)
38
- if request.user.has_perm("sovtimer.basic_access")
39
- else ""
40
- )
36
+ return MenuItemHook.render(self, request=request)
41
37
 
42
38
 
43
39
  @hooks.register("menu_item_hook")
@@ -59,4 +55,9 @@ def register_urls():
59
55
  :return:
60
56
  """
61
57
 
62
- return UrlHook(urls=urls, namespace="sovtimer", base_url=r"^sovereignty-timer/")
58
+ return UrlHook(
59
+ urls=urls,
60
+ namespace="sovtimer",
61
+ base_url=r"^sovereignty-timer/",
62
+ excluded_views=["sovtimer.views.dashboard", "sovtimer.views.dashboard_data"],
63
+ )
@@ -0,0 +1,85 @@
1
+ """
2
+ ESI Handler for AA Sovereignty Timer
3
+ """
4
+
5
+ # Standard Library
6
+ from typing import Any
7
+
8
+ # Third Party
9
+ from aiopenapi3 import ContentTypeError
10
+ from httpx import Response
11
+
12
+ # Alliance Auth
13
+ from allianceauth.services.hooks import get_extension_logger
14
+ from esi.exceptions import HTTPClientError, HTTPNotModified
15
+ from esi.openapi_clients import EsiOperation
16
+
17
+ # Alliance Auth (External Libs)
18
+ from app_utils.logging import LoggerAddTag
19
+
20
+ # AA Sovereignty Timer
21
+ from sovtimer import __title__
22
+
23
+ # Initialize a logger with a custom tag for the AA SRP application
24
+ logger = LoggerAddTag(my_logger=get_extension_logger(__name__), prefix=__title__)
25
+
26
+
27
+ def result( # pylint: disable=too-many-arguments too-many-positional-arguments
28
+ operation: EsiOperation,
29
+ use_etag: bool = True,
30
+ return_response: bool = False,
31
+ force_refresh: bool = False,
32
+ use_cache: bool = True,
33
+ return_cached_for_304: bool = False,
34
+ **extra,
35
+ ) -> tuple[Any, Response] | Any:
36
+ """
37
+ Retrieve the result of an ESI operation, handling HTTPNotModified exceptions.
38
+
39
+ :param operation: The ESI operation to execute.
40
+ :type operation: EsiOperation
41
+ :param use_etag: Whether to use ETag for caching.
42
+ :type use_etag: bool
43
+ :param return_response: Whether to return the full response object.
44
+ :type return_response: bool
45
+ :param force_refresh: Whether to force a refresh of the data.
46
+ :type force_refresh: bool
47
+ :param use_cache: Whether to use cached data.
48
+ :type use_cache: bool
49
+ :param extra: Additional parameters to pass to the operation.
50
+ :param return_cached_for_304: Whether to return cached data on 304 Not Modified. If False, returns None for 304 responses.
51
+ :type return_cached_for_304: bool
52
+ :type extra: dict
53
+ :return: The result of the ESI operation, optionally with the response object.
54
+ :rtype: tuple[Any, Response] | Any
55
+ """
56
+
57
+ logger.debug(f"Handling ESI operation: {operation.operation.operationId}")
58
+
59
+ try:
60
+ esi_result = operation.result(
61
+ use_etag=use_etag,
62
+ return_response=return_response,
63
+ force_refresh=force_refresh,
64
+ use_cache=use_cache,
65
+ **extra,
66
+ )
67
+ except HTTPNotModified:
68
+ logger.debug(
69
+ f"ESI returned 304 Not Modified for operation: {operation.operation.operationId} "
70
+ f"- {'Using cached data.' if return_cached_for_304 else 'Skipping update.'}"
71
+ )
72
+
73
+ esi_result = operation.result(use_etag=False) if return_cached_for_304 else None
74
+ except ContentTypeError:
75
+ logger.warning(
76
+ msg="ESI returned gibberish (ContentTypeError) - Skipping update."
77
+ )
78
+
79
+ esi_result = None
80
+ except HTTPClientError as exc:
81
+ logger.error(msg=f"Error while fetching data from ESI: {str(exc)}")
82
+
83
+ esi_result = None
84
+
85
+ return esi_result
@@ -6,7 +6,7 @@ msgid ""
6
6
  msgstr ""
7
7
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
8
8
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
9
- "POT-Creation-Date: 2025-11-10 22:19+0100\n"
9
+ "POT-Creation-Date: 2025-11-16 00:19+0100\n"
10
10
  "PO-Revision-Date: 2024-07-10 14:26+0000\n"
11
11
  "Last-Translator: Dadas Aideron <dadas.aideron@gmail.com>\n"
12
12
  "Language-Team: Czech <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/cs/>\n"
@@ -17,45 +17,45 @@ msgstr ""
17
17
  "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
18
18
  "X-Generator: Weblate 5.6.2\n"
19
19
 
20
- #: sovtimer/__init__.py:10 sovtimer/models.py:37
20
+ #: sovtimer/__init__.py:10 sovtimer/models.py:34
21
21
  #: sovtimer/templates/sovtimer/base.html:7
22
22
  #: sovtimer/templates/sovtimer/base.html:11
23
23
  msgid "Sovereignty Timer"
24
24
  msgstr ""
25
25
 
26
- #: sovtimer/models.py:40
26
+ #: sovtimer/models.py:37
27
27
  msgid "Can access the Sovereignty Timer module"
28
28
  msgstr ""
29
29
 
30
- #: sovtimer/models.py:77
30
+ #: sovtimer/models.py:74
31
31
  msgid "Sovereignty structure"
32
32
  msgstr ""
33
33
 
34
- #: sovtimer/models.py:78
34
+ #: sovtimer/models.py:75
35
35
  msgid "Sovereignty structures"
36
36
  msgstr ""
37
37
 
38
- #: sovtimer/models.py:135
38
+ #: sovtimer/models.py:117
39
39
  msgid "Sov Hub defense"
40
40
  msgstr ""
41
41
 
42
- #: sovtimer/models.py:136
42
+ #: sovtimer/models.py:118
43
43
  msgid "TCU defense"
44
44
  msgstr ""
45
45
 
46
- #: sovtimer/models.py:162
46
+ #: sovtimer/models.py:144
47
47
  msgid "Sovereignty campaign"
48
48
  msgstr ""
49
49
 
50
- #: sovtimer/models.py:163
50
+ #: sovtimer/models.py:145
51
51
  msgid "Sovereignty campaigns"
52
52
  msgstr ""
53
53
 
54
- #: sovtimer/templates/sovtimer/dashboard.html:15 sovtimer/views.py:163
54
+ #: sovtimer/templates/sovtimer/dashboard.html:15 sovtimer/views.py:167
55
55
  msgid "Yes"
56
56
  msgstr ""
57
57
 
58
- #: sovtimer/templates/sovtimer/dashboard.html:16 sovtimer/views.py:161
58
+ #: sovtimer/templates/sovtimer/dashboard.html:16 sovtimer/views.py:160
59
59
  msgid "No"
60
60
  msgstr ""
61
61
 
@@ -127,14 +127,14 @@ msgstr "Chceš pomoc s překladem této aplikace do tvého jazyka, nebo vylepši
127
127
  msgid "Join our team of translators!"
128
128
  msgstr "Připoj se k našemu týmu překladatelů!"
129
129
 
130
- #: sovtimer/views.py:165
130
+ #: sovtimer/views.py:170
131
131
  msgid "Neither side has made any progress yet"
132
132
  msgstr ""
133
133
 
134
- #: sovtimer/views.py:173
134
+ #: sovtimer/views.py:178
135
135
  msgid "Defenders making progress"
136
136
  msgstr ""
137
137
 
138
- #: sovtimer/views.py:181
138
+ #: sovtimer/views.py:186
139
139
  msgid "Attackers making progress"
140
140
  msgstr ""
@@ -6,7 +6,7 @@ msgid ""
6
6
  msgstr ""
7
7
  "Project-Id-Version: AA Sov Timer 2.2.1\n"
8
8
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
9
- "POT-Creation-Date: 2025-11-10 22:19+0100\n"
9
+ "POT-Creation-Date: 2025-11-16 00:19+0100\n"
10
10
  "PO-Revision-Date: 2025-11-10 21:06+0000\n"
11
11
  "Last-Translator: Peter Pfeufer <info@ppfeufer.de>\n"
12
12
  "Language-Team: German <https://weblate.ppfeufer.de/projects/alliance-auth-apps/aa-sov-timer/de/>\n"
@@ -17,45 +17,45 @@ msgstr ""
17
17
  "Plural-Forms: nplurals=2; plural=n != 1;\n"
18
18
  "X-Generator: Weblate 5.14.3\n"
19
19
 
20
- #: sovtimer/__init__.py:10 sovtimer/models.py:37
20
+ #: sovtimer/__init__.py:10 sovtimer/models.py:34
21
21
  #: sovtimer/templates/sovtimer/base.html:7
22
22
  #: sovtimer/templates/sovtimer/base.html:11
23
23
  msgid "Sovereignty Timer"
24
24
  msgstr "Souveränitäts-Timer"
25
25
 
26
- #: sovtimer/models.py:40
26
+ #: sovtimer/models.py:37
27
27
  msgid "Can access the Sovereignty Timer module"
28
28
  msgstr "Kann das Souveränitäts-Timer Modul nutzen"
29
29
 
30
- #: sovtimer/models.py:77
30
+ #: sovtimer/models.py:74
31
31
  msgid "Sovereignty structure"
32
32
  msgstr "Souveränitäts-Struktur"
33
33
 
34
- #: sovtimer/models.py:78
34
+ #: sovtimer/models.py:75
35
35
  msgid "Sovereignty structures"
36
36
  msgstr "Souveränitäts-Strukturen"
37
37
 
38
- #: sovtimer/models.py:135
38
+ #: sovtimer/models.py:117
39
39
  msgid "Sov Hub defense"
40
40
  msgstr "Sov Hub Verteidigung"
41
41
 
42
- #: sovtimer/models.py:136
42
+ #: sovtimer/models.py:118
43
43
  msgid "TCU defense"
44
44
  msgstr "TCU Verteidigung"
45
45
 
46
- #: sovtimer/models.py:162
46
+ #: sovtimer/models.py:144
47
47
  msgid "Sovereignty campaign"
48
48
  msgstr "Souveränitäts-Kampagne"
49
49
 
50
- #: sovtimer/models.py:163
50
+ #: sovtimer/models.py:145
51
51
  msgid "Sovereignty campaigns"
52
52
  msgstr "Souveränitäts-Kampagnen"
53
53
 
54
- #: sovtimer/templates/sovtimer/dashboard.html:15 sovtimer/views.py:163
54
+ #: sovtimer/templates/sovtimer/dashboard.html:15 sovtimer/views.py:167
55
55
  msgid "Yes"
56
56
  msgstr "Ja"
57
57
 
58
- #: sovtimer/templates/sovtimer/dashboard.html:16 sovtimer/views.py:161
58
+ #: sovtimer/templates/sovtimer/dashboard.html:16 sovtimer/views.py:160
59
59
  msgid "No"
60
60
  msgstr "Nein"
61
61
 
@@ -127,15 +127,15 @@ msgstr "Du möchtest helfen diese App in Deine Sprache zu übersetzen oder die b
127
127
  msgid "Join our team of translators!"
128
128
  msgstr "Tritt unserm Team von Übersetzern bei!"
129
129
 
130
- #: sovtimer/views.py:165
130
+ #: sovtimer/views.py:170
131
131
  msgid "Neither side has made any progress yet"
132
132
  msgstr "Keine Seite hat bisher Fortschritte gemacht"
133
133
 
134
- #: sovtimer/views.py:173
134
+ #: sovtimer/views.py:178
135
135
  msgid "Defenders making progress"
136
136
  msgstr "Verteidiger machen Fortschritte"
137
137
 
138
- #: sovtimer/views.py:181
138
+ #: sovtimer/views.py:186
139
139
  msgid "Attackers making progress"
140
140
  msgstr "Angreifer machen Fortschritte"
141
141
 
@@ -6,9 +6,9 @@
6
6
  #, fuzzy
7
7
  msgid ""
8
8
  msgstr ""
9
- "Project-Id-Version: AA Sov Timer 3.0.0b2\n"
9
+ "Project-Id-Version: AA Sov Timer 3.2.0\n"
10
10
  "Report-Msgid-Bugs-To: https://github.com/ppfeufer/aa-sov-timer/issues\n"
11
- "POT-Creation-Date: 2025-11-10 22:19+0100\n"
11
+ "POT-Creation-Date: 2025-11-16 00:19+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,45 +17,45 @@ msgstr ""
17
17
  "Content-Type: text/plain; charset=UTF-8\n"
18
18
  "Content-Transfer-Encoding: 8bit\n"
19
19
 
20
- #: sovtimer/__init__.py:10 sovtimer/models.py:37
20
+ #: sovtimer/__init__.py:10 sovtimer/models.py:34
21
21
  #: sovtimer/templates/sovtimer/base.html:7
22
22
  #: sovtimer/templates/sovtimer/base.html:11
23
23
  msgid "Sovereignty Timer"
24
24
  msgstr ""
25
25
 
26
- #: sovtimer/models.py:40
26
+ #: sovtimer/models.py:37
27
27
  msgid "Can access the Sovereignty Timer module"
28
28
  msgstr ""
29
29
 
30
- #: sovtimer/models.py:77
30
+ #: sovtimer/models.py:74
31
31
  msgid "Sovereignty structure"
32
32
  msgstr ""
33
33
 
34
- #: sovtimer/models.py:78
34
+ #: sovtimer/models.py:75
35
35
  msgid "Sovereignty structures"
36
36
  msgstr ""
37
37
 
38
- #: sovtimer/models.py:135
38
+ #: sovtimer/models.py:117
39
39
  msgid "Sov Hub defense"
40
40
  msgstr ""
41
41
 
42
- #: sovtimer/models.py:136
42
+ #: sovtimer/models.py:118
43
43
  msgid "TCU defense"
44
44
  msgstr ""
45
45
 
46
- #: sovtimer/models.py:162
46
+ #: sovtimer/models.py:144
47
47
  msgid "Sovereignty campaign"
48
48
  msgstr ""
49
49
 
50
- #: sovtimer/models.py:163
50
+ #: sovtimer/models.py:145
51
51
  msgid "Sovereignty campaigns"
52
52
  msgstr ""
53
53
 
54
- #: sovtimer/templates/sovtimer/dashboard.html:15 sovtimer/views.py:163
54
+ #: sovtimer/templates/sovtimer/dashboard.html:15 sovtimer/views.py:167
55
55
  msgid "Yes"
56
56
  msgstr ""
57
57
 
58
- #: sovtimer/templates/sovtimer/dashboard.html:16 sovtimer/views.py:161
58
+ #: sovtimer/templates/sovtimer/dashboard.html:16 sovtimer/views.py:160
59
59
  msgid "No"
60
60
  msgstr ""
61
61
 
@@ -131,14 +131,14 @@ msgstr ""
131
131
  msgid "Join our team of translators!"
132
132
  msgstr ""
133
133
 
134
- #: sovtimer/views.py:165
134
+ #: sovtimer/views.py:170
135
135
  msgid "Neither side has made any progress yet"
136
136
  msgstr ""
137
137
 
138
- #: sovtimer/views.py:173
138
+ #: sovtimer/views.py:178
139
139
  msgid "Defenders making progress"
140
140
  msgstr ""
141
141
 
142
- #: sovtimer/views.py:181
142
+ #: sovtimer/views.py:186
143
143
  msgid "Attackers making progress"
144
144
  msgstr ""