qcanvas 1.1.0__py3-none-any.whl → 1.2.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (30) hide show
  1. qcanvas/app_start/__init__.py +6 -1
  2. qcanvas/icons/__init__.py +2 -0
  3. qcanvas/icons/file-downloaded.svg +4 -4
  4. qcanvas/icons/icons.qrc +2 -0
  5. qcanvas/icons/logo-transparent-dark.svg +303 -0
  6. qcanvas/icons/logo-transparent-light.svg +304 -0
  7. qcanvas/icons/rc_icons.py +726 -173
  8. qcanvas/ui/course_viewer/content_tree.py +13 -0
  9. qcanvas/ui/course_viewer/course_viewer.py +14 -5
  10. qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tree.py +9 -12
  11. qcanvas/ui/course_viewer/tabs/file_tab/__init__.py +1 -0
  12. qcanvas/ui/course_viewer/tabs/file_tab/file_tab.py +46 -0
  13. qcanvas/ui/course_viewer/tabs/file_tab/file_tree.py +95 -0
  14. qcanvas/ui/course_viewer/tabs/file_tab/pages_file_tree.py +50 -0
  15. qcanvas/ui/course_viewer/tabs/mail_tab/mail_tree.py +4 -7
  16. qcanvas/ui/course_viewer/tabs/page_tab/page_tree.py +7 -9
  17. qcanvas/ui/course_viewer/tabs/util.py +10 -0
  18. qcanvas/ui/main_ui/course_viewer_container.py +45 -3
  19. qcanvas/ui/main_ui/status_bar_progress_display.py +17 -8
  20. qcanvas/util/file_icons.py +36 -0
  21. qcanvas/util/themes/__init__.py +2 -0
  22. qcanvas/util/themes/_colour_scheme_helper.py +38 -0
  23. qcanvas/util/themes/_selected_theme.py +10 -0
  24. qcanvas/util/themes/_theme_changed_event.py +17 -0
  25. qcanvas/util/themes/_theme_changer.py +74 -0
  26. {qcanvas-1.1.0.dist-info → qcanvas-1.2.0a1.dist-info}/METADATA +6 -2
  27. {qcanvas-1.1.0.dist-info → qcanvas-1.2.0a1.dist-info}/RECORD +29 -18
  28. qcanvas/util/themes.py +0 -27
  29. {qcanvas-1.1.0.dist-info → qcanvas-1.2.0a1.dist-info}/WHEEL +0 -0
  30. {qcanvas-1.1.0.dist-info → qcanvas-1.2.0a1.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,74 @@
1
+ import logging
2
+
3
+ import qdarktheme
4
+ from qtpy.QtCore import Slot
5
+ from qtpy.QtWidgets import QApplication, QStyleFactory
6
+
7
+ from qcanvas.util.themes._colour_scheme_helper import (
8
+ colour_scheme_changed,
9
+ is_dark_colour_scheme,
10
+ )
11
+ from qcanvas.util.themes._selected_theme import SelectedTheme
12
+ from qcanvas.util.themes._theme_changed_event import theme_changed
13
+
14
+ _logger = logging.getLogger(__name__)
15
+
16
+ default_theme = "auto"
17
+ _is_dark_mode: bool | None = None
18
+ _selected_theme: SelectedTheme | None = None
19
+
20
+
21
+ def apply(theme: str) -> None:
22
+ global _is_dark_mode, _selected_theme
23
+
24
+ theme = ensure_theme_is_valid(theme)
25
+ was_dark_mode = _is_dark_mode
26
+
27
+ if theme != "native":
28
+ if theme == "auto":
29
+ _is_dark_mode = is_dark_colour_scheme()
30
+ _selected_theme = SelectedTheme.AUTO
31
+ selected_colour_scheme = "dark" if _is_dark_mode else "light"
32
+ else:
33
+ _is_dark_mode = theme == "dark"
34
+ _selected_theme = SelectedTheme.OVERRIDE
35
+ selected_colour_scheme = theme
36
+
37
+ qdarktheme.setup_theme(
38
+ selected_colour_scheme,
39
+ custom_colors={"primary": "e02424"},
40
+ )
41
+
42
+ QApplication.setStyle(QStyleFactory.create("Fusion"))
43
+ else:
44
+ _is_dark_mode = is_dark_colour_scheme()
45
+ _selected_theme = SelectedTheme.NATIVE
46
+
47
+ if was_dark_mode != _is_dark_mode:
48
+ theme_changed().emit()
49
+
50
+
51
+ def is_dark_mode() -> bool:
52
+ return _is_dark_mode
53
+
54
+
55
+ def ensure_theme_is_valid(theme: str) -> str:
56
+ if theme not in ["auto", "light", "dark", "native"]:
57
+ return default_theme
58
+ else:
59
+ return theme
60
+
61
+
62
+ @Slot()
63
+ def _scheme_changed():
64
+ global _selected_theme, _is_dark_mode
65
+
66
+ if _selected_theme == SelectedTheme.AUTO:
67
+ apply("auto")
68
+ elif _selected_theme == SelectedTheme.NATIVE:
69
+ # noinspection PyTestUnpassedFixture
70
+ _is_dark_mode = is_dark_colour_scheme()
71
+ theme_changed().emit()
72
+
73
+
74
+ colour_scheme_changed().connect(_scheme_changed)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qcanvas
3
- Version: 1.1.0
3
+ Version: 1.2.0a1
4
4
  Summary: QCanvas is a desktop client for Canvas LMS.
5
5
  Author: QCanvas
6
6
  Author-email: QCanvas@noreply.codeberg.org
@@ -15,7 +15,7 @@ Requires-Dist: platformdirs (>=4.2.2,<5.0.0)
15
15
  Requires-Dist: pyqtdarktheme-fork (>=2.3.2,<3.0.0)
16
16
  Requires-Dist: qasync (>=0.27.1,<0.28.0)
17
17
  Requires-Dist: qcanvas-api-clients (>=0.3.0,<0.4.0)
18
- Requires-Dist: qcanvas-backend (>=0.2.0,<0.3.0)
18
+ Requires-Dist: qcanvas-backend (>=0.2.2,<0.3.0)
19
19
  Requires-Dist: qtpy (>=2.4.1,<3.0.0)
20
20
  Requires-Dist: sqlalchemy (>=2.0.31,<3.0.0)
21
21
  Requires-Dist: validators (>=0.33.0,<0.34.0)
@@ -25,6 +25,10 @@ Description-Content-Type: text/markdown
25
25
 
26
26
  QCanvas is an **unofficial** desktop client for Canvas LMS.
27
27
 
28
+ https://codeberg.org/QCanvas/QCanvas
29
+
30
+ https://github.com/QCanvas/QCanvasApp
31
+
28
32
  # Downloads
29
33
 
30
34
  Download it from [releases](https://github.com/QCanvas/QCanvasApp/releases)
@@ -1,45 +1,51 @@
1
1
  qcanvas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- qcanvas/app_start/__init__.py,sha256=Qq_8Zgqhkd_lHLOvUH6NP95-WofxyC0R_vgZx2hQF7g,1274
2
+ qcanvas/app_start/__init__.py,sha256=r16bg9Otw8Sy6MYLmIt5Nu-oSwyYP8Y2kzMtbmeF6m0,1437
3
3
  qcanvas/backend_connectors/__init__.py,sha256=Wj8cmxQng3SSlmlXJyzHaPmvxbkauwsxINckPb7WuHc,108
4
4
  qcanvas/backend_connectors/frontend_resource_manager.py,sha256=87oszxCle0Y9AUAHH3wn_7oilY45ddMET-4EnpTtjn0,1322
5
5
  qcanvas/backend_connectors/qcanvas_task_master.py,sha256=CTPBvf_9w-livscKNspnd98mNvFLYTYHef0RQSUkfFc,742
6
- qcanvas/icons/__init__.py,sha256=eaZWyt-xEsLqRVI2HNvevgRhXUnM_oyDrT5hSyLM1eE,246
6
+ qcanvas/icons/__init__.py,sha256=HQJzW9BXiWqj8yRHRvevlSWZ-TLB7vUbVlwuQKgX_Lk,356
7
7
  qcanvas/icons/file-download-failed.svg,sha256=lhDf8ul__T2ByRcd5KZicNtUVl4BdSqeZ3yOR6DvCLk,1091
8
- qcanvas/icons/file-downloaded.svg,sha256=a6YO4kHpCEgVUStKADmNz0QgW5meiCQsrmY1cunQ4b8,1091
8
+ qcanvas/icons/file-downloaded.svg,sha256=fWDcSy0PwQX3LZwaEVJLE3fUVg7q1TO3n44svyUyb64,1091
9
9
  qcanvas/icons/file-not-downloaded.svg,sha256=7zl_Gmx2IHZrugFYAUjBCSwmfXM0pvlshj8GhewxY5Q,1091
10
10
  qcanvas/icons/file-unknown.svg,sha256=9xlN244HJX3zM_MqdMTnNbKlqLjOFgCx3ZdM4Wc4zC0,1729
11
- qcanvas/icons/icons.qrc,sha256=czwaoP0TNXGoH91cstRbdhvKnfyLlmAp-VmaZoBk0YY,280
11
+ qcanvas/icons/icons.qrc,sha256=tI5HDO3a9eMWhkrEfdQrnIkEAH7L4-kpDu-t-wstE10,375
12
+ qcanvas/icons/logo-transparent-dark.svg,sha256=1bVg8AK9FepOvWTcu_zDLX2eZ1inYuAMBwZRi252-5o,18660
13
+ qcanvas/icons/logo-transparent-light.svg,sha256=DsNOFWHGAVCZ-ue-pf1iatQ1t_IBmnyxs3FNw-UUukg,18647
12
14
  qcanvas/icons/main_icon.svg,sha256=st2sfA8HIETmoacJ2Oq84iJzfnNHH-T03ijB-J419_s,16104
13
- qcanvas/icons/rc_icons.py,sha256=e1jj_P3F2CDTyrlnk96-m4DtMy0a8WNMw8C_SwLWOfo,18387
15
+ qcanvas/icons/rc_icons.py,sha256=AlCluQJETsrxGHG4lBrZnDpJY5oVt9OzTj0qIODkYSE,44764
14
16
  qcanvas/icons/sync.svg,sha256=J-7_KnFbQL3uh-RrTy0_wSJUVW4Cc6ZSTacld6ULv1w,2829
15
17
  qcanvas/run.py,sha256=tP5bplaPa_Z8DaKqP59bwYaIEccW5B18xoyXgKJsrf8,1681
16
18
  qcanvas/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
19
  qcanvas/ui/course_viewer/__init__.py,sha256=XkoFnh4ULw3_i-GDsOlueEWido0PkoDcN9_EX6-nkXY,76
18
- qcanvas/ui/course_viewer/content_tree.py,sha256=XsPyCDAD_g5dKRYRVpiKwRioLMcWAOGatI3po0QO7BU,4105
20
+ qcanvas/ui/course_viewer/content_tree.py,sha256=QS0mcyxLDdXt27TBzdCTYu2fuchPO-j6z6VPJT6rhkA,4478
19
21
  qcanvas/ui/course_viewer/course_tree.py,sha256=LkzquiAIKzFwB9dkOx-QmIp7CkKJ8R5Kk0aeYHQLu5s,2709
20
- qcanvas/ui/course_viewer/course_viewer.py,sha256=uNnw2XRMXiBGyv2stfEqWcw7MpDDc6h8tGiMsq5oxS0,3551
22
+ qcanvas/ui/course_viewer/course_viewer.py,sha256=n7d4KjWJAPJcHjy0BQcRLOsV5fyM1vWIdYA_AmxMlSE,3922
21
23
  qcanvas/ui/course_viewer/tabs/__init__.py,sha256=SlfWUzk6_E5uM9GIV-y9BVeKMwqn3pRx_xWhMyb1dfI,54
22
24
  qcanvas/ui/course_viewer/tabs/assignment_tab/__init__.py,sha256=w936dW7za10Fh6rN0zVA-7Kyiup3kd6C-mPAFHtxmy0,42
23
25
  qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tab.py,sha256=_de3IPBCe27Bt8MoabcX1ZchBbVb-_QHVeYMvL3wzr8,1986
24
- qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tree.py,sha256=sy9Cu5ZMt_Jb6PK-ikyB8CvSvdGecsK_8sPpKigTlfo,2924
26
+ qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tree.py,sha256=z6-8SHBh6OvVy8lH-YeR28cGEh7V0wOi1_EQcw5hFcc,2691
25
27
  qcanvas/ui/course_viewer/tabs/content_tab.py,sha256=CAfzUYawDde0lhL7R7dFu07uS1XEG39VIleS2Cpu30g,3540
28
+ qcanvas/ui/course_viewer/tabs/file_tab/__init__.py,sha256=mMebnrNw_V-lQ-eBXS_kFinL-ZdUAXa459NmuyuCu6s,30
29
+ qcanvas/ui/course_viewer/tabs/file_tab/file_tab.py,sha256=DOpnSDg7vDRvLc4LFf94BHkx0cRy6InYLpKH7n_p4IU,1404
30
+ qcanvas/ui/course_viewer/tabs/file_tab/file_tree.py,sha256=Q5lRr619ktn_CDs4yr5Lv276-BH8JK907fJTn2cDEz0,3199
31
+ qcanvas/ui/course_viewer/tabs/file_tab/pages_file_tree.py,sha256=UDoTkZp1IJTQBevveCXATDQmAYCC6Yf1HivmN2ifHdw,1605
26
32
  qcanvas/ui/course_viewer/tabs/mail_tab/__init__.py,sha256=68iRUUWEP7mudbaxa4ZBKMra4rvs2oZKaZkBWwmUrsI,30
27
33
  qcanvas/ui/course_viewer/tabs/mail_tab/mail_tab.py,sha256=fw0FORJiH19rAGsjBFJHZlNrVCMbwG4n3AFV3wbhwGM,1840
28
- qcanvas/ui/course_viewer/tabs/mail_tab/mail_tree.py,sha256=5yCLjkwFV1qIOq-NYeUds_gz_gi-yy0OXblNXt_zzVQ,1799
34
+ qcanvas/ui/course_viewer/tabs/mail_tab/mail_tree.py,sha256=K7RLLZ8KwqJrzsrcxBSAJ9MlJ34O1zqMRsPuL_wMoPQ,1639
29
35
  qcanvas/ui/course_viewer/tabs/page_tab/__init__.py,sha256=lcafxlSEVZ0wqZySxT6hTrvExX-GU2AfcZQbp6W8haU,30
30
36
  qcanvas/ui/course_viewer/tabs/page_tab/page_tab.py,sha256=cv-pCDri7thRJZv-gWUZrL2FUQAHe7vZthRAhejsqWY,771
31
- qcanvas/ui/course_viewer/tabs/page_tab/page_tree.py,sha256=ugxEOaNUdWDsyj7GC-LUtH_OsONgdWRSyugFNPBhZS4,2172
37
+ qcanvas/ui/course_viewer/tabs/page_tab/page_tree.py,sha256=ffM-IFdNPBdTggmJCnseuO35xs7zqo9C78580p209Jw,1967
32
38
  qcanvas/ui/course_viewer/tabs/resource_rich_browser.py,sha256=dTRsJO_xeo72vsX0FrT1XHfr9VlFjnM9woeFxVg0dDw,6649
33
- qcanvas/ui/course_viewer/tabs/util.py,sha256=rUVEGSREV9vTFs4o3AD2OjaSFA-GPsmelxYWz0J8OP4,48
39
+ qcanvas/ui/course_viewer/tabs/util.py,sha256=Cg8FmPbkiTepV9IlTZQSWtcUaovv66iAD4_BUYJjIAY,344
34
40
  qcanvas/ui/main_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- qcanvas/ui/main_ui/course_viewer_container.py,sha256=R3w0EImYQTUMPPtoaTIZZTf8MCMDC_5Ia_c-MBJ6-QQ,1912
41
+ qcanvas/ui/main_ui/course_viewer_container.py,sha256=EJo0QnlD-Rz04Yy_k1md4YjYTGOwg1dxdsPMPHtCVFA,3277
36
42
  qcanvas/ui/main_ui/options/__init__.py,sha256=SlfWUzk6_E5uM9GIV-y9BVeKMwqn3pRx_xWhMyb1dfI,54
37
43
  qcanvas/ui/main_ui/options/auto_download_resources_option.py,sha256=W9BleGh6egfN9d9awnjEAAFq6_6DyXyD-rIopkofVDw,1284
38
44
  qcanvas/ui/main_ui/options/quick_sync_option.py,sha256=qEfmtLllO32ejc-bydCvFRjal5RUlk2HtC5Ld4mT7ss,753
39
45
  qcanvas/ui/main_ui/options/sync_on_start_option.py,sha256=zFFAAyGZEa6qBchJJIm7bJpOwxcntnto9Ee-lzCiHX4,731
40
46
  qcanvas/ui/main_ui/options/theme_selection_menu.py,sha256=MVudpolTToR1TRAtqfaFMUH__G0gc4oyqDAL5BH-7RY,1263
41
47
  qcanvas/ui/main_ui/qcanvas_window.py,sha256=aaN2gIyKpjcdd6NKp9E0DPt6YHBT-DX7RVRqnWSJVaQ,8554
42
- qcanvas/ui/main_ui/status_bar_progress_display.py,sha256=ExFRWY1SPDS2t8CBOx80TlOdENrxXGnuv7ht-DPcnwY,4836
48
+ qcanvas/ui/main_ui/status_bar_progress_display.py,sha256=vbuZwMR4It1qH8EY4ZiBz7akSDfaYZ_V18eS-pBgYq4,5047
43
49
  qcanvas/ui/memory_tree/__init__.py,sha256=-XLitM6teC0zmwPrGf-Q-A53-zgmIPASExdOtaLIvPU,107
44
50
  qcanvas/ui/memory_tree/_tree_memory.py,sha256=CMKfCnrHj22ervaq7xB5U4AiKijYvghUK5ZL0MJIFmQ,1805
45
51
  qcanvas/ui/memory_tree/memory_tree_widget.py,sha256=OT3TnYsUSbMowqR9my19QG4AuAdhTb29SGSa2406-SE,4432
@@ -50,6 +56,7 @@ qcanvas/ui/setup/setup_dialog.py,sha256=0oYk5chmMUo2fR6tmu-HkM8QXPkFdewXyx1n_X_W
50
56
  qcanvas/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
57
  qcanvas/util/auto_downloader.py,sha256=WGawgc849qpPf7ufe_yxRYhwVf2Aj15wTAAQvToxmHg,1842
52
58
  qcanvas/util/basic_fonts.py,sha256=1NK5_kejgH45mENwiTWvE5oOuAvGqWMX3hg9tTUCBi4,243
59
+ qcanvas/util/file_icons.py,sha256=Cf7l3xV5XecAS-jEUtzTs7S-Vym6bs9E2JfUXnGtFFM,1017
53
60
  qcanvas/util/html_cleaner.py,sha256=O9_PhvZZw3RcPjdXZagAbNmp8Hfyq9fydBH-ee-DfII,615
54
61
  qcanvas/util/layouts.py,sha256=7wQ0-DAbRHPPcfVIQoOmVhPdhGqcF-6qWE1-P86e7ys,1351
55
62
  qcanvas/util/logs.py,sha256=VZKFITiW2WR2POEFVv5GRpEXic23Pzjehry-vH3g3Gk,138
@@ -60,10 +67,14 @@ qcanvas/util/settings/__init__.py,sha256=ivc8bczhQdEJsWse6fc81Xyz0i2YX57pL4UubM3
60
67
  qcanvas/util/settings/_client_settings.py,sha256=HyUpXoc7TinOviEd-eCo8g8Fbw8TqGAH2KfCkgPr9N0,1413
61
68
  qcanvas/util/settings/_mapped_setting.py,sha256=Z6635FfDll9cCLfSkVg-unsDLvUWuKT5MmxJEiUkd2k,1823
62
69
  qcanvas/util/settings/_ui_settings.py,sha256=zlWMjpntuqm7ZN3aBEROGrXc4bhtKOfWijmiGkdt1UA,804
63
- qcanvas/util/themes.py,sha256=2K4b8DqtT61Sh9njs3P6BYclNVIOMAs_UUX5t6XMPIw,591
70
+ qcanvas/util/themes/__init__.py,sha256=Ng-Rii7cFKrhSoE03J5tSYeaMY4UebFubKCBsWxouYM,134
71
+ qcanvas/util/themes/_colour_scheme_helper.py,sha256=QTrQ5c9AduBJMUuXp8sG-WPmYU82cF1tXjGDKhpI10w,1063
72
+ qcanvas/util/themes/_selected_theme.py,sha256=w1CXvMuLM8wKDgANOhcvNnlEXDyjdgnWO0TtA3vGomY,150
73
+ qcanvas/util/themes/_theme_changed_event.py,sha256=dIu1857h2ytSqmcRb2CABro3Gc0s9bm5DHdT23jyuk8,317
74
+ qcanvas/util/themes/_theme_changer.py,sha256=ybMgKT2sL_orvH0OYXPOlA5w6hociMjMQbbTJgNw1Us,1993
64
75
  qcanvas/util/ui_tools.py,sha256=bSM1xrmZPn847YEbXAC9VIAv--8hMLMWrsEMWGA5p3E,916
65
76
  qcanvas/util/url_checker.py,sha256=gaV_KZZsG5bfJaGBv9jbHJjq0rVxIH55HRtucT6Qkx8,144
66
- qcanvas-1.1.0.dist-info/METADATA,sha256=_70_c0ILAcAfjw3SFo9VGmAm4DFz0gE63ZIiGstNH70,1715
67
- qcanvas-1.1.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
68
- qcanvas-1.1.0.dist-info/entry_points.txt,sha256=46VbnhQ9w2CYdfhYcPfWgjXYHjsKshu0asQ1B_sAMac,44
69
- qcanvas-1.1.0.dist-info/RECORD,,
77
+ qcanvas-1.2.0a1.dist-info/METADATA,sha256=DvxP1JLD7MNLfjfpxZ6hOOiEKzV88TS4WiUwbrtER3o,1794
78
+ qcanvas-1.2.0a1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
79
+ qcanvas-1.2.0a1.dist-info/entry_points.txt,sha256=46VbnhQ9w2CYdfhYcPfWgjXYHjsKshu0asQ1B_sAMac,44
80
+ qcanvas-1.2.0a1.dist-info/RECORD,,
qcanvas/util/themes.py DELETED
@@ -1,27 +0,0 @@
1
- import logging
2
-
3
- import qdarktheme
4
- from qtpy.QtWidgets import QApplication, QStyleFactory
5
-
6
- _logger = logging.getLogger(__name__)
7
-
8
- default_theme = "auto"
9
-
10
-
11
- def ensure_theme_is_valid(theme: str) -> str:
12
- if theme not in ["auto", "light", "dark", "native"]:
13
- return default_theme
14
- else:
15
- return theme
16
-
17
-
18
- def apply(theme: str) -> None:
19
- theme = ensure_theme_is_valid(theme)
20
-
21
- if theme != "native":
22
- QApplication.setStyle(QStyleFactory.create("Fusion"))
23
-
24
- qdarktheme.setup_theme(
25
- theme,
26
- custom_colors={"primary": "e02424"},
27
- )