qcanvas 1.2.0__py3-none-any.whl → 2026.1.19__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. qcanvas/__init__.py +60 -0
  2. qcanvas/app.py +72 -0
  3. qcanvas/backend_connectors/frontend_resource_manager.py +13 -5
  4. qcanvas/backend_connectors/qcanvas_task_master.py +2 -2
  5. qcanvas/icons/__init__.py +5 -5
  6. qcanvas/icons/_icon_type.py +1 -1
  7. qcanvas/icons/icons.qrc +39 -35
  8. qcanvas/icons/rc_icons.py +1298 -1197
  9. qcanvas/settings/__init__.py +6 -0
  10. qcanvas/{util/settings → settings}/_client_settings.py +4 -4
  11. qcanvas/settings/_course_settings.py +54 -0
  12. qcanvas/{util/settings → settings}/_mapped_setting.py +2 -5
  13. qcanvas/{util/settings → settings}/_ui_settings.py +5 -5
  14. qcanvas/theme.py +101 -0
  15. qcanvas/ui/course_viewer/content_tree.py +9 -12
  16. qcanvas/ui/course_viewer/course_tree/_course_icon_generator.py +3 -3
  17. qcanvas/ui/course_viewer/course_tree/course_tree.py +9 -8
  18. qcanvas/ui/course_viewer/course_viewer.py +42 -56
  19. qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tab.py +107 -29
  20. qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tree.py +4 -4
  21. qcanvas/ui/course_viewer/tabs/constants.py +1 -0
  22. qcanvas/ui/course_viewer/tabs/content_tab.py +33 -39
  23. qcanvas/ui/course_viewer/tabs/file_tab/file_tab.py +4 -4
  24. qcanvas/ui/course_viewer/tabs/file_tab/file_tree.py +7 -10
  25. qcanvas/ui/course_viewer/tabs/file_tab/pages_file_tree.py +6 -7
  26. qcanvas/ui/course_viewer/tabs/mail_tab/mail_tab.py +50 -27
  27. qcanvas/ui/course_viewer/tabs/mail_tab/mail_tree.py +7 -8
  28. qcanvas/ui/course_viewer/tabs/page_tab/page_tab.py +3 -3
  29. qcanvas/ui/course_viewer/tabs/page_tab/page_tree.py +5 -5
  30. qcanvas/ui/course_viewer/tabs/resource_rich_browser.py +18 -32
  31. qcanvas/ui/course_viewer/tree_widget_data_item.py +1 -1
  32. qcanvas/ui/memory_tree/_tree_memory.py +45 -42
  33. qcanvas/ui/memory_tree/memory_tree_widget.py +22 -18
  34. qcanvas/ui/memory_tree/memory_tree_widget_item.py +3 -3
  35. qcanvas/ui/qcanvas_window/__init__.py +1 -0
  36. qcanvas/ui/{main_ui → qcanvas_window}/course_viewer_container.py +10 -10
  37. qcanvas/ui/{main_ui → qcanvas_window}/options/auto_download_resources_option.py +5 -5
  38. qcanvas/ui/{main_ui → qcanvas_window}/options/quick_sync_option.py +7 -6
  39. qcanvas/ui/{main_ui → qcanvas_window}/options/sync_on_start_option.py +7 -6
  40. qcanvas/ui/{main_ui → qcanvas_window}/options/theme_selection_menu.py +10 -10
  41. qcanvas/ui/{main_ui → qcanvas_window}/qcanvas_window.py +57 -41
  42. qcanvas/ui/{main_ui → qcanvas_window}/status_bar_progress_display.py +5 -6
  43. qcanvas/ui/qml_components/__init__.py +4 -0
  44. qcanvas/ui/qml_components/attachments_pane.py +70 -0
  45. qcanvas/ui/qml_components/comments_pane.py +83 -0
  46. qcanvas/ui/qml_components/qml/AttachmentsList.ui.qml +15 -0
  47. qcanvas/ui/qml_components/qml/AttachmentsListDelegate.qml +77 -0
  48. qcanvas/ui/qml_components/qml/AttachmentsListModel.qml +19 -0
  49. qcanvas/ui/qml_components/qml/AttachmentsPane.qml +11 -0
  50. qcanvas/ui/qml_components/qml/CommentsList.ui.qml +15 -0
  51. qcanvas/ui/qml_components/qml/CommentsListDelegate.ui.qml +118 -0
  52. qcanvas/ui/qml_components/qml/CommentsListModel.qml +56 -0
  53. qcanvas/ui/qml_components/qml/CommentsPane.qml +11 -0
  54. qcanvas/ui/qml_components/qml/DecoratedText.ui.qml +44 -0
  55. qcanvas/ui/qml_components/qml/Spacer.ui.qml +7 -0
  56. qcanvas/ui/qml_components/qml/ThemedRectangle.qml +53 -0
  57. qcanvas/ui/qml_components/qml/__init__.py +3 -0
  58. qcanvas/ui/qml_components/qml/rc_qml.py +709 -0
  59. qcanvas/ui/qml_components/qml/rc_qml.qrc +16 -0
  60. qcanvas/ui/qml_components/qml_bridge_types.py +95 -0
  61. qcanvas/ui/qml_components/qml_pane.py +21 -0
  62. qcanvas/ui/setup/setup_checker.py +1 -1
  63. qcanvas/ui/setup/setup_dialog.py +28 -14
  64. qcanvas/util/auto_downloader.py +9 -7
  65. qcanvas/util/basic_fonts.py +2 -2
  66. qcanvas/util/context_dict.py +12 -0
  67. qcanvas/util/file_icons.py +11 -19
  68. qcanvas/util/layouts.py +5 -7
  69. qcanvas/util/paths.py +17 -6
  70. qcanvas/util/qurl_util.py +1 -1
  71. qcanvas/util/ui_tools.py +118 -8
  72. qcanvas/util/url_checker.py +1 -1
  73. qcanvas-2026.1.19.dist-info/METADATA +95 -0
  74. qcanvas-2026.1.19.dist-info/RECORD +92 -0
  75. {qcanvas-1.2.0.dist-info → qcanvas-2026.1.19.dist-info}/WHEEL +1 -1
  76. qcanvas-2026.1.19.dist-info/entry_points.txt +3 -0
  77. qcanvas/app_start/__init__.py +0 -59
  78. qcanvas/icons/_update_icons.py +0 -89
  79. qcanvas/icons/dark/actions/exit.svg +0 -3
  80. qcanvas/icons/dark/actions/mark_all_read.svg +0 -3
  81. qcanvas/icons/dark/actions/open_downloads.svg +0 -3
  82. qcanvas/icons/dark/actions/quick_login.svg +0 -3
  83. qcanvas/icons/dark/actions/sync.svg +0 -3
  84. qcanvas/icons/dark/branding/logo_transparent.svg +0 -303
  85. qcanvas/icons/dark/options/auto_download.svg +0 -3
  86. qcanvas/icons/dark/options/theme.svg +0 -3
  87. qcanvas/icons/dark/tabs/assignments.svg +0 -3
  88. qcanvas/icons/dark/tabs/mail.svg +0 -3
  89. qcanvas/icons/dark/tabs/pages.svg +0 -3
  90. qcanvas/icons/dark/tree_items/assignment.svg +0 -3
  91. qcanvas/icons/dark/tree_items/mail.svg +0 -3
  92. qcanvas/icons/dark/tree_items/module.svg +0 -3
  93. qcanvas/icons/dark/tree_items/page.svg +0 -3
  94. qcanvas/icons/light/actions/exit.svg +0 -3
  95. qcanvas/icons/light/actions/mark_all_read.svg +0 -3
  96. qcanvas/icons/light/actions/open_downloads.svg +0 -3
  97. qcanvas/icons/light/actions/quick_login.svg +0 -3
  98. qcanvas/icons/light/actions/sync.svg +0 -3
  99. qcanvas/icons/light/branding/logo_transparent.svg +0 -304
  100. qcanvas/icons/light/options/auto_download.svg +0 -3
  101. qcanvas/icons/light/options/ignore_old.svg +0 -3
  102. qcanvas/icons/light/options/include_videos.svg +0 -3
  103. qcanvas/icons/light/options/theme.svg +0 -3
  104. qcanvas/icons/light/tabs/assignments.svg +0 -3
  105. qcanvas/icons/light/tabs/mail.svg +0 -3
  106. qcanvas/icons/light/tabs/pages.svg +0 -3
  107. qcanvas/icons/light/tree_items/assignment.svg +0 -3
  108. qcanvas/icons/light/tree_items/mail.svg +0 -3
  109. qcanvas/icons/light/tree_items/module.svg +0 -3
  110. qcanvas/icons/light/tree_items/page.svg +0 -3
  111. qcanvas/icons/universal/branding/main_icon.svg +0 -325
  112. qcanvas/icons/universal/downloads/download_failed.svg +0 -23
  113. qcanvas/icons/universal/downloads/downloaded.svg +0 -23
  114. qcanvas/icons/universal/downloads/not_downloaded.svg +0 -23
  115. qcanvas/icons/universal/downloads/unknown.svg +0 -6
  116. qcanvas/icons/universal/tabs/assignments_new_content.svg +0 -3
  117. qcanvas/icons/universal/tabs/mail_new_content.svg +0 -3
  118. qcanvas/icons/universal/tabs/pages_new_content.svg +0 -3
  119. qcanvas/icons/universal/tree_items/semester.svg +0 -108
  120. qcanvas/run.py +0 -54
  121. qcanvas/ui/course_viewer/tabs/util.py +0 -11
  122. qcanvas/ui/main_ui/__init__.py +0 -0
  123. qcanvas/util/settings/__init__.py +0 -9
  124. qcanvas/util/themes/__init__.py +0 -2
  125. qcanvas/util/themes/_colour_scheme_helper.py +0 -38
  126. qcanvas/util/themes/_selected_theme.py +0 -10
  127. qcanvas/util/themes/_theme_changed_event.py +0 -17
  128. qcanvas/util/themes/_theme_changer.py +0 -86
  129. qcanvas-1.2.0.dist-info/METADATA +0 -71
  130. qcanvas-1.2.0.dist-info/RECORD +0 -118
  131. qcanvas-1.2.0.dist-info/entry_points.txt +0 -3
  132. /qcanvas/ui/{main_ui → qcanvas_window}/options/__init__.py +0 -0
@@ -1,10 +0,0 @@
1
- import logging
2
- from enum import Enum
3
-
4
- _logger = logging.getLogger(__name__)
5
-
6
-
7
- class SelectedTheme(Enum):
8
- AUTO = 0
9
- NATIVE = 1
10
- OVERRIDE = 2
@@ -1,17 +0,0 @@
1
- import logging
2
-
3
- from qtpy.QtCore import QObject, Signal
4
-
5
- _logger = logging.getLogger(__name__)
6
-
7
-
8
- class ThemeChangedEvent(QObject):
9
- theme_changed = Signal()
10
-
11
-
12
- theme_changed_event = ThemeChangedEvent(None)
13
-
14
-
15
- def theme_changed() -> Signal:
16
- global theme_changed_event
17
- return theme_changed_event.theme_changed
@@ -1,86 +0,0 @@
1
- import logging
2
-
3
- import qdarktheme
4
- from qtpy.QtCore import Slot
5
- from qtpy.QtGui import QIcon
6
- from qtpy.QtWidgets import QApplication, QStyleFactory
7
-
8
- from qcanvas.util.themes._colour_scheme_helper import (
9
- colour_scheme_changed,
10
- is_dark_colour_scheme,
11
- )
12
- from qcanvas.util.themes._selected_theme import SelectedTheme
13
- from qcanvas.util.themes._theme_changed_event import theme_changed
14
-
15
- _logger = logging.getLogger(__name__)
16
-
17
- default_theme = "auto"
18
- _is_dark_mode: bool | None = None
19
- _selected_theme: SelectedTheme | None = None
20
-
21
- _universal_path = ":icons/universal"
22
- _dark_path = ":icons/dark"
23
- _light_path = ":icons/light"
24
-
25
-
26
- def apply(theme: str) -> None:
27
- global _is_dark_mode, _selected_theme
28
-
29
- theme = ensure_theme_is_valid(theme)
30
- was_dark_mode = _is_dark_mode
31
-
32
- if theme != "native":
33
- if theme == "auto":
34
- _is_dark_mode = is_dark_colour_scheme()
35
- _selected_theme = SelectedTheme.AUTO
36
- selected_colour_scheme = "dark" if _is_dark_mode else "light"
37
- else:
38
- _is_dark_mode = theme == "dark"
39
- _selected_theme = SelectedTheme.OVERRIDE
40
- selected_colour_scheme = theme
41
-
42
- qdarktheme.setup_theme(
43
- selected_colour_scheme,
44
- custom_colors={"primary": "e02424"},
45
- )
46
-
47
- QApplication.setStyle(QStyleFactory.create("Fusion"))
48
- else:
49
- _is_dark_mode = is_dark_colour_scheme()
50
- _selected_theme = SelectedTheme.NATIVE
51
-
52
- if was_dark_mode != _is_dark_mode:
53
- _set_fallback_paths()
54
- theme_changed().emit()
55
-
56
-
57
- def is_dark_mode() -> bool:
58
- return _is_dark_mode
59
-
60
-
61
- def ensure_theme_is_valid(theme: str) -> str:
62
- if theme not in ["auto", "light", "dark", "native"]:
63
- return default_theme
64
- else:
65
- return theme
66
-
67
-
68
- @Slot()
69
- def _scheme_changed():
70
- global _selected_theme, _is_dark_mode
71
-
72
- if _selected_theme == SelectedTheme.AUTO:
73
- apply("auto")
74
- elif _selected_theme == SelectedTheme.NATIVE:
75
- _is_dark_mode = is_dark_colour_scheme()
76
- _set_fallback_paths()
77
- theme_changed().emit()
78
-
79
-
80
- def _set_fallback_paths():
81
- QIcon.setFallbackSearchPaths(
82
- [_dark_path if _is_dark_mode else _light_path, _universal_path]
83
- )
84
-
85
-
86
- colour_scheme_changed().connect(_scheme_changed)
@@ -1,71 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: qcanvas
3
- Version: 1.2.0
4
- Summary: QCanvas is a desktop client for Canvas LMS.
5
- Author: QCanvas
6
- Author-email: QCanvas@noreply.codeberg.org
7
- Requires-Python: >3.11.0,<3.13
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: Programming Language :: Python :: 3.12
10
- Requires-Dist: aiosqlite (>=0.20.0,<0.21.0)
11
- Requires-Dist: asynctaskpool (>=0.2.1,<0.3.0)
12
- Requires-Dist: lightdb (>=2.0,<3.0)
13
- Requires-Dist: platformdirs (>=4.2.2,<5.0.0)
14
- Requires-Dist: pyqtdarktheme-fork (>=2.3.2,<3.0.0)
15
- Requires-Dist: qasync (>=0.27.1,<0.28.0)
16
- Requires-Dist: qcanvas-api-clients (>=0.3.0,<0.4.0)
17
- Requires-Dist: qcanvas-backend (>=0.2.5,<0.3.0)
18
- Requires-Dist: qtpy (>=2.4.1,<3.0.0)
19
- Requires-Dist: sqlalchemy (>=2.0.31,<3.0.0)
20
- Requires-Dist: validators (>=0.33.0,<0.34.0)
21
- Description-Content-Type: text/markdown
22
-
23
- # QCanvas
24
-
25
- QCanvas is an **unofficial** desktop client for Canvas LMS.
26
-
27
- https://codeberg.org/QCanvas/QCanvas
28
-
29
- https://github.com/QCanvas/QCanvasApp
30
-
31
- # Downloads
32
-
33
- <a href='https://flathub.org/apps/io.github.qcanvas.QCanvasApp'>
34
- <img width='240' alt='Get it on Flathub' src='https://flathub.org/api/badge?svg&locale=en'/>
35
- </a>
36
-
37
- You can download a **windows** version from [releases](https://github.com/QCanvas/QCanvasApp/releases)
38
-
39
- The appimage version is *not recommended* as it is not a proper portable appimage. It will only work on debian/ubuntu
40
- based distros.
41
-
42
- # Development/Run from source
43
-
44
- ## Prerequisites
45
-
46
- - Python 3.12+ (use [pyenv](https://github.com/pyenv/pyenv) if your distro does not have that version)
47
- - [Pipx](https://pipx.pypa.io/stable/) (optional)
48
- - Poetry (recommended to install using `pipx install poetry`)
49
- - [Appimagetool](https://github.com/AppImage/appimagetool) (Only for building the appimage)
50
-
51
- ## Get started
52
-
53
- ```bash
54
- git clone https://github.com/QCanvas/QCanvasApp.git
55
- cd QCanvasApp
56
-
57
- # Enter shell and run it
58
- poetry shell
59
- poetry install
60
- python qcanvas/run.py
61
-
62
- # Alternatively you can run it like this:
63
- poetry install
64
- poetry run python qcanvas/run.py
65
- ```
66
-
67
- ## Build custom AppImage
68
-
69
- ```bash
70
- bash build_appimage.sh
71
- ```
@@ -1,118 +0,0 @@
1
- qcanvas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- qcanvas/app_start/__init__.py,sha256=r16bg9Otw8Sy6MYLmIt5Nu-oSwyYP8Y2kzMtbmeF6m0,1437
3
- qcanvas/backend_connectors/__init__.py,sha256=Wj8cmxQng3SSlmlXJyzHaPmvxbkauwsxINckPb7WuHc,108
4
- qcanvas/backend_connectors/frontend_resource_manager.py,sha256=87oszxCle0Y9AUAHH3wn_7oilY45ddMET-4EnpTtjn0,1322
5
- qcanvas/backend_connectors/qcanvas_task_master.py,sha256=CTPBvf_9w-livscKNspnd98mNvFLYTYHef0RQSUkfFc,742
6
- qcanvas/icons/__init__.py,sha256=gczS3dUVDSgkfalmNhnynILAkk4099BE8jWDTmY7fyY,1902
7
- qcanvas/icons/_icon_type.py,sha256=p5YpGAoJViOA2SB4o4Vw4jI_kDwrvzwCP8NIxUydCjo,901
8
- qcanvas/icons/_update_icons.py,sha256=iZrmZaaq2rIt5ATL9qJ-x2RhvQ4dDp391RsAhwfirLU,2410
9
- qcanvas/icons/dark/actions/exit.svg,sha256=FTw6JW0xq-xRh7oHQdhKrJpf2nkm4ot5kVjXXJRgszI,228
10
- qcanvas/icons/dark/actions/mark_all_read.svg,sha256=V7OEY0hjNmSJtt9Ufu0vgd5BZRH0pLCo5h58Xi0VJhI,201
11
- qcanvas/icons/dark/actions/open_downloads.svg,sha256=ft5TuP97ErGRq5RUVtEC5HaA28yqbebkZVfz3zfRA4w,359
12
- qcanvas/icons/dark/actions/quick_login.svg,sha256=I3_raVdsNKuCBazs8wj6JByu2p3qXSZ8_K8eYOmb3hw,982
13
- qcanvas/icons/dark/actions/sync.svg,sha256=qN8F5qg_TIirjDePfmQgiR0DO5FmSckOP5Wlo2KQhI0,413
14
- qcanvas/icons/dark/branding/logo_transparent.svg,sha256=1bVg8AK9FepOvWTcu_zDLX2eZ1inYuAMBwZRi252-5o,18660
15
- qcanvas/icons/dark/options/auto_download.svg,sha256=MYiffHrLsCkLJ55SaKfBkoC3WZTe8Fj8l-jYzON28Mc,284
16
- qcanvas/icons/dark/options/theme.svg,sha256=9Clv7h2z0YuprG4CoPEJAvl_mUsAeGwepe2tGvYJZoc,383
17
- qcanvas/icons/dark/tabs/assignments.svg,sha256=MlYp4ibpT5bb3V2nRBwrTfNYzfFkvEX7uf287uy4i5k,502
18
- qcanvas/icons/dark/tabs/mail.svg,sha256=CoTukvsulJnVtPdTgIExdUdoPtB4W-lnIvs4m-s80vc,334
19
- qcanvas/icons/dark/tabs/pages.svg,sha256=TCoeLrX-UOzESVJMVVP1XnA6YfGKO7C3BDtH683nJ1k,339
20
- qcanvas/icons/dark/tree_items/assignment.svg,sha256=MlYp4ibpT5bb3V2nRBwrTfNYzfFkvEX7uf287uy4i5k,502
21
- qcanvas/icons/dark/tree_items/mail.svg,sha256=CoTukvsulJnVtPdTgIExdUdoPtB4W-lnIvs4m-s80vc,334
22
- qcanvas/icons/dark/tree_items/module.svg,sha256=mfb16D2rGcVudJd4uTc9sRdN8B7tgaAU5OaxhZ_0daY,902
23
- qcanvas/icons/dark/tree_items/page.svg,sha256=mLyiil83ycWaCEdQ6KaKTt4h6-HK5os_XzTsIkPlR1w,356
24
- qcanvas/icons/icons.qrc,sha256=SHWS7nxSwzEDyqu_Z9zIcKbsshY4aoYT6QNazzIY7v0,2251
25
- qcanvas/icons/light/actions/exit.svg,sha256=hTF_ke8f91D0t5SkNat5mijOiFfwZqg-t7NMIrx8k2w,228
26
- qcanvas/icons/light/actions/mark_all_read.svg,sha256=pa_VNoSnlwgzrn5UyiRYf1EH3N2Eu3Q96SoO_A59Sf4,201
27
- qcanvas/icons/light/actions/open_downloads.svg,sha256=wZTOfN7XwVPxaOZ_lTmTSuZvrlHi7L840JlduzjJ3z4,359
28
- qcanvas/icons/light/actions/quick_login.svg,sha256=0toC_4pROdJQWz6DcLM_UqnRknqckTIcS0ZaJL5o_es,982
29
- qcanvas/icons/light/actions/sync.svg,sha256=KqQi5DbT7_4OmZ1dwidkC61Tel3thcUHJ-3u1zgEvLw,413
30
- qcanvas/icons/light/branding/logo_transparent.svg,sha256=DsNOFWHGAVCZ-ue-pf1iatQ1t_IBmnyxs3FNw-UUukg,18647
31
- qcanvas/icons/light/options/auto_download.svg,sha256=93efpzvsLYYZVze2CKTDhp2x8l-4UsF75DFGMHmCD3I,307
32
- qcanvas/icons/light/options/ignore_old.svg,sha256=Zn3Dl6DD9omgoqqcM5xAbRYA8fqVGKwooTFYOQZJTVo,484
33
- qcanvas/icons/light/options/include_videos.svg,sha256=3HmJvM95JFqvE2WXEAIjTc5sPp0aLuKKu7yb0tX5sM4,349
34
- qcanvas/icons/light/options/theme.svg,sha256=9HCwt6AndJJjgjPgS9BO4mkKWtkigTpUUxct4sw6SI4,383
35
- qcanvas/icons/light/tabs/assignments.svg,sha256=ci5z-t0MAhTHYoMVXvIyHlZcd3MEYgeGMISxMSX0zes,502
36
- qcanvas/icons/light/tabs/mail.svg,sha256=l_ITAKZRkq7PbPw1-iY5fma9Zimr9w9-721rYNros6o,334
37
- qcanvas/icons/light/tabs/pages.svg,sha256=Zgcsknpd4jiWuqRNYqFQvCAxgH4ThlSUl9rS-ZcrpL4,339
38
- qcanvas/icons/light/tree_items/assignment.svg,sha256=ci5z-t0MAhTHYoMVXvIyHlZcd3MEYgeGMISxMSX0zes,502
39
- qcanvas/icons/light/tree_items/mail.svg,sha256=l_ITAKZRkq7PbPw1-iY5fma9Zimr9w9-721rYNros6o,334
40
- qcanvas/icons/light/tree_items/module.svg,sha256=P8N_7iH3tfHEyajMO2aQ-eKaB3mbNptREAzAic5P6Cg,902
41
- qcanvas/icons/light/tree_items/page.svg,sha256=ui8UX_bPrOOnb9GlHujzopLO8yRRdpzp0nwmmELb214,356
42
- qcanvas/icons/rc_icons.py,sha256=xJteGJsyG7o6XmRtFO4fItlzLy-PvQzwcn5MR-ZYLNA,72887
43
- qcanvas/icons/universal/branding/main_icon.svg,sha256=st2sfA8HIETmoacJ2Oq84iJzfnNHH-T03ijB-J419_s,16104
44
- qcanvas/icons/universal/downloads/download_failed.svg,sha256=lhDf8ul__T2ByRcd5KZicNtUVl4BdSqeZ3yOR6DvCLk,1091
45
- qcanvas/icons/universal/downloads/downloaded.svg,sha256=WM5Kpi9IzLvDASOHQGQGtFb_m4u02mGHLLZNs19-4HA,1091
46
- qcanvas/icons/universal/downloads/not_downloaded.svg,sha256=7zl_Gmx2IHZrugFYAUjBCSwmfXM0pvlshj8GhewxY5Q,1091
47
- qcanvas/icons/universal/downloads/unknown.svg,sha256=9xlN244HJX3zM_MqdMTnNbKlqLjOFgCx3ZdM4Wc4zC0,1729
48
- qcanvas/icons/universal/tabs/assignments_new_content.svg,sha256=IwnLpS31-eZS6ADEtpf1PFjr5Z6QoeGWElZEguaMmBM,502
49
- qcanvas/icons/universal/tabs/mail_new_content.svg,sha256=q43Y6Xnq2BDFXPA88kJJl4KQbJw7jsm8q8A1NnVcRJ8,334
50
- qcanvas/icons/universal/tabs/pages_new_content.svg,sha256=vUksdaa0bzEm6xvbp0sqQ_XJlqW87P-N-Btifstx7Tc,339
51
- qcanvas/icons/universal/tree_items/semester.svg,sha256=9aWy2VH-PMhkMlhlq97Yh2pvW2xyYsdRh-5knUcgzfY,4088
52
- qcanvas/run.py,sha256=tP5bplaPa_Z8DaKqP59bwYaIEccW5B18xoyXgKJsrf8,1681
53
- qcanvas/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- qcanvas/ui/course_viewer/__init__.py,sha256=XkoFnh4ULw3_i-GDsOlueEWido0PkoDcN9_EX6-nkXY,76
55
- qcanvas/ui/course_viewer/content_tree.py,sha256=Rjq7GNf-h9tb1gyUdRebh_VNxltLafjoy7oDhafAWDU,4631
56
- qcanvas/ui/course_viewer/course_tree/__init__.py,sha256=N2XorJ4COFHzRYx53noANb4_qJYf6N8_YCjPdQuDCHs,36
57
- qcanvas/ui/course_viewer/course_tree/_course_icon_generator.py,sha256=3r0pBRbb9LsD0VAXOj4VfD8IPyGmfXu-FJPnL3aHbRI,3071
58
- qcanvas/ui/course_viewer/course_tree/course_tree.py,sha256=XR9IirTSQZsmmHeTojkZL29sSn6VBTut5e-01yLU_bo,3195
59
- qcanvas/ui/course_viewer/course_viewer.py,sha256=P5GI4_xv8mFZ671hyY1zciMhRTE4HiWU2-1aLuLAik8,5339
60
- qcanvas/ui/course_viewer/tabs/__init__.py,sha256=SlfWUzk6_E5uM9GIV-y9BVeKMwqn3pRx_xWhMyb1dfI,54
61
- qcanvas/ui/course_viewer/tabs/assignment_tab/__init__.py,sha256=w936dW7za10Fh6rN0zVA-7Kyiup3kd6C-mPAFHtxmy0,42
62
- qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tab.py,sha256=_de3IPBCe27Bt8MoabcX1ZchBbVb-_QHVeYMvL3wzr8,1986
63
- qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tree.py,sha256=ipscHCgvDLL0kGnDelZ3UprPRIwHS3Ju9L4qR4UyyS0,2925
64
- qcanvas/ui/course_viewer/tabs/content_tab.py,sha256=CAfzUYawDde0lhL7R7dFu07uS1XEG39VIleS2Cpu30g,3540
65
- qcanvas/ui/course_viewer/tabs/file_tab/__init__.py,sha256=mMebnrNw_V-lQ-eBXS_kFinL-ZdUAXa459NmuyuCu6s,30
66
- qcanvas/ui/course_viewer/tabs/file_tab/file_tab.py,sha256=DOpnSDg7vDRvLc4LFf94BHkx0cRy6InYLpKH7n_p4IU,1404
67
- qcanvas/ui/course_viewer/tabs/file_tab/file_tree.py,sha256=HJ7KEk5QOI2B8orvPXL-d7oMI2ZSROO8v5Ccn4xNDJ8,3360
68
- qcanvas/ui/course_viewer/tabs/file_tab/pages_file_tree.py,sha256=0XUydcBgeXmQp7cRjZ6YUS0k4HkekWRuxp8-VCRlNrc,1919
69
- qcanvas/ui/course_viewer/tabs/mail_tab/__init__.py,sha256=68iRUUWEP7mudbaxa4ZBKMra4rvs2oZKaZkBWwmUrsI,30
70
- qcanvas/ui/course_viewer/tabs/mail_tab/mail_tab.py,sha256=fw0FORJiH19rAGsjBFJHZlNrVCMbwG4n3AFV3wbhwGM,1840
71
- qcanvas/ui/course_viewer/tabs/mail_tab/mail_tree.py,sha256=Z1eQSp1D_E78khGKf4qGlmo6AF_heWuz9zmgrv_VXik,1784
72
- qcanvas/ui/course_viewer/tabs/page_tab/__init__.py,sha256=lcafxlSEVZ0wqZySxT6hTrvExX-GU2AfcZQbp6W8haU,30
73
- qcanvas/ui/course_viewer/tabs/page_tab/page_tab.py,sha256=cv-pCDri7thRJZv-gWUZrL2FUQAHe7vZthRAhejsqWY,771
74
- qcanvas/ui/course_viewer/tabs/page_tab/page_tree.py,sha256=AbN9U35PUSF0eO5SNexyzaLaCs2t_imkKOkwYsRtfyM,2179
75
- qcanvas/ui/course_viewer/tabs/resource_rich_browser.py,sha256=_Q9xwUW0Mb8DqWUCAps2tHA5t4a22mEjuOOZNTdQSyM,7180
76
- qcanvas/ui/course_viewer/tabs/util.py,sha256=Cg8FmPbkiTepV9IlTZQSWtcUaovv66iAD4_BUYJjIAY,344
77
- qcanvas/ui/course_viewer/tree_widget_data_item.py,sha256=_j-j-jmi65-PucXhf3qqQp6jZ49q5PszuFwH1SndC18,566
78
- qcanvas/ui/main_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
- qcanvas/ui/main_ui/course_viewer_container.py,sha256=814pP-HoALQdNE8L6XJ7WEmPcfmdRluz5Y-LqMJEUZQ,3447
80
- qcanvas/ui/main_ui/options/__init__.py,sha256=SlfWUzk6_E5uM9GIV-y9BVeKMwqn3pRx_xWhMyb1dfI,54
81
- qcanvas/ui/main_ui/options/auto_download_resources_option.py,sha256=n6OecWqCmyk4szHYVUkqTb9ADb4yQ0BKx50Xr7p_x4E,1361
82
- qcanvas/ui/main_ui/options/quick_sync_option.py,sha256=qEfmtLllO32ejc-bydCvFRjal5RUlk2HtC5Ld4mT7ss,753
83
- qcanvas/ui/main_ui/options/sync_on_start_option.py,sha256=zFFAAyGZEa6qBchJJIm7bJpOwxcntnto9Ee-lzCiHX4,731
84
- qcanvas/ui/main_ui/options/theme_selection_menu.py,sha256=5DCCDBUiQHD_tC8e37kN6V7DElfhVGYChl5DgJd7cp4,1331
85
- qcanvas/ui/main_ui/qcanvas_window.py,sha256=eVM4Y0q-enXS4NIooBQh1woVV5fOAJW5lYC8L1cxq3k,9013
86
- qcanvas/ui/main_ui/status_bar_progress_display.py,sha256=vbuZwMR4It1qH8EY4ZiBz7akSDfaYZ_V18eS-pBgYq4,5047
87
- qcanvas/ui/memory_tree/__init__.py,sha256=-XLitM6teC0zmwPrGf-Q-A53-zgmIPASExdOtaLIvPU,107
88
- qcanvas/ui/memory_tree/_tree_memory.py,sha256=6d_-CpUC8u3s_LO100Gb-3DhoxwUDckgB56suOCyTZg,1893
89
- qcanvas/ui/memory_tree/memory_tree_widget.py,sha256=Mq-zBNEwU-Npch-I5mhl_0tYAN7NvMN9GStajus3YWg,4408
90
- qcanvas/ui/memory_tree/memory_tree_widget_item.py,sha256=JXk07AzrKsBnYAqhayIFYAwMfF_D_EfkfJY4Qyez47U,425
91
- qcanvas/ui/setup/__init__.py,sha256=QWt2lEyLqWG5QC-BmCBlYyi0LZsBfsQYbP0XkvqA2f8,77
92
- qcanvas/ui/setup/setup_checker.py,sha256=pRLZJR6ySa09DhMEt8F0VQ2D_r7IzrDJAULIatuokJw,449
93
- qcanvas/ui/setup/setup_dialog.py,sha256=AbKtzHzdQkCHLksYedMWbAN2-r6jWm2R-1Vez0BGkKU,10281
94
- qcanvas/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
- qcanvas/util/auto_downloader.py,sha256=WGawgc849qpPf7ufe_yxRYhwVf2Aj15wTAAQvToxmHg,1842
96
- qcanvas/util/basic_fonts.py,sha256=1NK5_kejgH45mENwiTWvE5oOuAvGqWMX3hg9tTUCBi4,243
97
- qcanvas/util/file_icons.py,sha256=mJySt-RnlCYSn8pKdJtenB_oqRPJRbSOdvwC2u70LqI,1738
98
- qcanvas/util/html_cleaner.py,sha256=U-UbZVX9x85gatOvxLsQXe2hL6x4I86eUKwkm0p159E,710
99
- qcanvas/util/layouts.py,sha256=FN1DxKuAmI4P_RRO4Qo1-J1Y61hT7859OAkO-EpgrFU,1457
100
- qcanvas/util/logs.py,sha256=VZKFITiW2WR2POEFVv5GRpEXic23Pzjehry-vH3g3Gk,138
101
- qcanvas/util/paths.py,sha256=TzG5iy7A6ndzUdeV00lJKXq_gmbtooahueBjgvN02s8,989
102
- qcanvas/util/qurl_util.py,sha256=NkskYvrMQJuYWMNF4DFQ4J5-YM5CGl5gHQKxJaAhHBE,197
103
- qcanvas/util/runtime.py,sha256=EO1HFCN7dZbQtKHQOILuvjZFXGT7SzhlmPvU8ma95Z8,617
104
- qcanvas/util/settings/__init__.py,sha256=ivc8bczhQdEJsWse6fc81Xyz0i2YX57pL4UubM3NJfw,228
105
- qcanvas/util/settings/_client_settings.py,sha256=HyUpXoc7TinOviEd-eCo8g8Fbw8TqGAH2KfCkgPr9N0,1413
106
- qcanvas/util/settings/_mapped_setting.py,sha256=Lb9mut_l5AM6a6jwfO9aZq1KEYZKa0qgOdAWwAJzX6Q,1973
107
- qcanvas/util/settings/_ui_settings.py,sha256=zlWMjpntuqm7ZN3aBEROGrXc4bhtKOfWijmiGkdt1UA,804
108
- qcanvas/util/themes/__init__.py,sha256=Ng-Rii7cFKrhSoE03J5tSYeaMY4UebFubKCBsWxouYM,134
109
- qcanvas/util/themes/_colour_scheme_helper.py,sha256=QTrQ5c9AduBJMUuXp8sG-WPmYU82cF1tXjGDKhpI10w,1063
110
- qcanvas/util/themes/_selected_theme.py,sha256=w1CXvMuLM8wKDgANOhcvNnlEXDyjdgnWO0TtA3vGomY,150
111
- qcanvas/util/themes/_theme_changed_event.py,sha256=dIu1857h2ytSqmcRb2CABro3Gc0s9bm5DHdT23jyuk8,317
112
- qcanvas/util/themes/_theme_changer.py,sha256=RA0b5Fur0LTlO-s1ZE4j2SedtbnWajEMw7m2HBdaDv0,2272
113
- qcanvas/util/ui_tools.py,sha256=ogIHWutN7Yw_AgR5BEXDVXoo_ylN91SCXBdKUyWv-r8,1027
114
- qcanvas/util/url_checker.py,sha256=gaV_KZZsG5bfJaGBv9jbHJjq0rVxIH55HRtucT6Qkx8,144
115
- qcanvas-1.2.0.dist-info/METADATA,sha256=MBwhQpLuWA0_Nv0UD_7FXIvIRIdXbY5SwUo3UwtK-to,2071
116
- qcanvas-1.2.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
117
- qcanvas-1.2.0.dist-info/entry_points.txt,sha256=46VbnhQ9w2CYdfhYcPfWgjXYHjsKshu0asQ1B_sAMac,44
118
- qcanvas-1.2.0.dist-info/RECORD,,
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- qcanvas=qcanvas.run:main
3
-