qcanvas 0.0.5.7a0__tar.gz → 1.0.3.post1__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.

Potentially problematic release.


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

Files changed (122) hide show
  1. qcanvas-1.0.3.post1/PKG-INFO +59 -0
  2. qcanvas-1.0.3.post1/README.md +38 -0
  3. qcanvas-1.0.3.post1/pyproject.toml +49 -0
  4. qcanvas-1.0.3.post1/qcanvas/app_start/__init__.py +47 -0
  5. qcanvas-1.0.3.post1/qcanvas/backend_connectors/__init__.py +2 -0
  6. qcanvas-1.0.3.post1/qcanvas/backend_connectors/frontend_resource_manager.py +63 -0
  7. qcanvas-1.0.3.post1/qcanvas/backend_connectors/qcanvas_task_master.py +28 -0
  8. qcanvas-1.0.3.post1/qcanvas/icons/__init__.py +7 -0
  9. qcanvas-1.0.3.post1/qcanvas/icons/file-download-failed.svg +6 -0
  10. qcanvas-1.0.3.post1/qcanvas/icons/file-downloaded.svg +6 -0
  11. qcanvas-1.0.3.post1/qcanvas/icons/file-not-downloaded.svg +6 -0
  12. qcanvas-1.0.3.post1/qcanvas/icons/file-unknown.svg +6 -0
  13. qcanvas-1.0.3.post1/qcanvas/icons/icons.qrc +10 -0
  14. {qcanvas-0.0.5.7a0 → qcanvas-1.0.3.post1}/qcanvas/icons/main_icon.svg +7 -7
  15. qcanvas-1.0.3.post1/qcanvas/icons/rc_icons.py +608 -0
  16. {qcanvas-0.0.5.7a0 → qcanvas-1.0.3.post1}/qcanvas/icons/sync.svg +6 -6
  17. qcanvas-1.0.3.post1/qcanvas/run.py +29 -0
  18. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/__init__.py +2 -0
  19. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/content_tree.py +123 -0
  20. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/course_tree.py +93 -0
  21. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/course_viewer.py +62 -0
  22. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/__init__.py +3 -0
  23. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/assignment_tab/__init__.py +1 -0
  24. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tab.py +168 -0
  25. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/assignment_tab/assignment_tree.py +104 -0
  26. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/content_tab.py +96 -0
  27. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/mail_tab/__init__.py +1 -0
  28. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/mail_tab/mail_tab.py +68 -0
  29. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/mail_tab/mail_tree.py +70 -0
  30. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/page_tab/__init__.py +1 -0
  31. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/page_tab/page_tab.py +36 -0
  32. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/page_tab/page_tree.py +74 -0
  33. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/resource_rich_browser.py +176 -0
  34. qcanvas-1.0.3.post1/qcanvas/ui/course_viewer/tabs/util.py +1 -0
  35. qcanvas-1.0.3.post1/qcanvas/ui/main_ui/course_viewer_container.py +52 -0
  36. qcanvas-1.0.3.post1/qcanvas/ui/main_ui/options/__init__.py +3 -0
  37. qcanvas-1.0.3.post1/qcanvas/ui/main_ui/options/quick_sync_option.py +25 -0
  38. qcanvas-1.0.3.post1/qcanvas/ui/main_ui/options/sync_on_start_option.py +25 -0
  39. qcanvas-1.0.3.post1/qcanvas/ui/main_ui/qcanvas_window.py +192 -0
  40. qcanvas-1.0.3.post1/qcanvas/ui/main_ui/status_bar_progress_display.py +153 -0
  41. qcanvas-1.0.3.post1/qcanvas/ui/memory_tree/__init__.py +2 -0
  42. qcanvas-1.0.3.post1/qcanvas/ui/memory_tree/_tree_memory.py +66 -0
  43. qcanvas-1.0.3.post1/qcanvas/ui/memory_tree/memory_tree_widget.py +133 -0
  44. qcanvas-1.0.3.post1/qcanvas/ui/memory_tree/memory_tree_widget_item.py +19 -0
  45. qcanvas-1.0.3.post1/qcanvas/ui/setup/__init__.py +2 -0
  46. qcanvas-1.0.3.post1/qcanvas/ui/setup/setup_checker.py +17 -0
  47. qcanvas-1.0.3.post1/qcanvas/ui/setup/setup_dialog.py +212 -0
  48. qcanvas-1.0.3.post1/qcanvas/util/__init__.py +2 -0
  49. qcanvas-1.0.3.post1/qcanvas/util/basic_fonts.py +12 -0
  50. qcanvas-1.0.3.post1/qcanvas/util/fe_resource_manager.py +23 -0
  51. qcanvas-1.0.3.post1/qcanvas/util/html_cleaner.py +25 -0
  52. qcanvas-1.0.3.post1/qcanvas/util/layouts.py +52 -0
  53. qcanvas-1.0.3.post1/qcanvas/util/logs.py +6 -0
  54. qcanvas-1.0.3.post1/qcanvas/util/paths.py +41 -0
  55. qcanvas-1.0.3.post1/qcanvas/util/settings/__init__.py +9 -0
  56. qcanvas-1.0.3.post1/qcanvas/util/settings/_client_settings.py +29 -0
  57. qcanvas-1.0.3.post1/qcanvas/util/settings/_mapped_setting.py +63 -0
  58. qcanvas-1.0.3.post1/qcanvas/util/settings/_ui_settings.py +34 -0
  59. qcanvas-1.0.3.post1/qcanvas/util/ui_tools.py +41 -0
  60. qcanvas-1.0.3.post1/qcanvas/util/url_checker.py +13 -0
  61. qcanvas-0.0.5.7a0/.gitignore +0 -8
  62. qcanvas-0.0.5.7a0/PKG-INFO +0 -21
  63. qcanvas-0.0.5.7a0/README.md +0 -1
  64. qcanvas-0.0.5.7a0/pyproject.toml +0 -36
  65. qcanvas-0.0.5.7a0/qcanvas/__main__.py +0 -155
  66. qcanvas-0.0.5.7a0/qcanvas/db/__init__.py +0 -5
  67. qcanvas-0.0.5.7a0/qcanvas/db/database.py +0 -338
  68. qcanvas-0.0.5.7a0/qcanvas/db/db_converter_helper.py +0 -81
  69. qcanvas-0.0.5.7a0/qcanvas/icons/__init__.py +0 -1
  70. qcanvas-0.0.5.7a0/qcanvas/icons/icons.qrc +0 -6
  71. qcanvas-0.0.5.7a0/qcanvas/icons/rc_icons.py +0 -242
  72. qcanvas-0.0.5.7a0/qcanvas/net/canvas/__init__.py +0 -2
  73. qcanvas-0.0.5.7a0/qcanvas/net/canvas/canvas_client.py +0 -209
  74. qcanvas-0.0.5.7a0/qcanvas/net/canvas/legacy_canvas_types.py +0 -124
  75. qcanvas-0.0.5.7a0/qcanvas/net/custom_httpx_async_transport.py +0 -34
  76. qcanvas-0.0.5.7a0/qcanvas/net/self_authenticating.py +0 -108
  77. qcanvas-0.0.5.7a0/qcanvas/queries/__init__.py +0 -4
  78. qcanvas-0.0.5.7a0/qcanvas/queries/all_courses.gql +0 -7
  79. qcanvas-0.0.5.7a0/qcanvas/queries/all_courses.py +0 -108
  80. qcanvas-0.0.5.7a0/qcanvas/queries/canvas_course_data.gql +0 -51
  81. qcanvas-0.0.5.7a0/qcanvas/queries/canvas_course_data.py +0 -143
  82. qcanvas-0.0.5.7a0/qcanvas/ui/container_item.py +0 -11
  83. qcanvas-0.0.5.7a0/qcanvas/ui/main_ui.py +0 -251
  84. qcanvas-0.0.5.7a0/qcanvas/ui/menu_bar/__init__.py +0 -0
  85. qcanvas-0.0.5.7a0/qcanvas/ui/menu_bar/grouping_preferences_menu.py +0 -61
  86. qcanvas-0.0.5.7a0/qcanvas/ui/menu_bar/theme_selection_menu.py +0 -39
  87. qcanvas-0.0.5.7a0/qcanvas/ui/setup_dialog.py +0 -190
  88. qcanvas-0.0.5.7a0/qcanvas/ui/status_bar_reporter.py +0 -40
  89. qcanvas-0.0.5.7a0/qcanvas/ui/viewer/__init__.py +0 -0
  90. qcanvas-0.0.5.7a0/qcanvas/ui/viewer/course_list.py +0 -96
  91. qcanvas-0.0.5.7a0/qcanvas/ui/viewer/file_list.py +0 -195
  92. qcanvas-0.0.5.7a0/qcanvas/ui/viewer/file_view_tab.py +0 -62
  93. qcanvas-0.0.5.7a0/qcanvas/ui/viewer/page_list_viewer.py +0 -150
  94. qcanvas-0.0.5.7a0/qcanvas/util/__init__.py +0 -0
  95. qcanvas-0.0.5.7a0/qcanvas/util/app_settings.py +0 -98
  96. qcanvas-0.0.5.7a0/qcanvas/util/constants.py +0 -5
  97. qcanvas-0.0.5.7a0/qcanvas/util/course_indexer/__init__.py +0 -1
  98. qcanvas-0.0.5.7a0/qcanvas/util/course_indexer/conversion_helpers.py +0 -78
  99. qcanvas-0.0.5.7a0/qcanvas/util/course_indexer/data_manager.py +0 -447
  100. qcanvas-0.0.5.7a0/qcanvas/util/course_indexer/resource_helpers.py +0 -191
  101. qcanvas-0.0.5.7a0/qcanvas/util/download_pool.py +0 -58
  102. qcanvas-0.0.5.7a0/qcanvas/util/helpers/__init__.py +0 -0
  103. qcanvas-0.0.5.7a0/qcanvas/util/helpers/canvas_sanitiser.py +0 -47
  104. qcanvas-0.0.5.7a0/qcanvas/util/helpers/file_icon_helper.py +0 -34
  105. qcanvas-0.0.5.7a0/qcanvas/util/helpers/qaction_helper.py +0 -25
  106. qcanvas-0.0.5.7a0/qcanvas/util/helpers/theme_helper.py +0 -48
  107. qcanvas-0.0.5.7a0/qcanvas/util/link_scanner/__init__.py +0 -2
  108. qcanvas-0.0.5.7a0/qcanvas/util/link_scanner/canvas_link_scanner.py +0 -41
  109. qcanvas-0.0.5.7a0/qcanvas/util/link_scanner/canvas_media_object_scanner.py +0 -60
  110. qcanvas-0.0.5.7a0/qcanvas/util/link_scanner/dropbox_scanner.py +0 -68
  111. qcanvas-0.0.5.7a0/qcanvas/util/link_scanner/resource_scanner.py +0 -69
  112. qcanvas-0.0.5.7a0/qcanvas/util/progress_reporter.py +0 -101
  113. qcanvas-0.0.5.7a0/qcanvas/util/self_updater.py +0 -55
  114. qcanvas-0.0.5.7a0/qcanvas/util/task_pool.py +0 -253
  115. qcanvas-0.0.5.7a0/qcanvas/util/tree_util/__init__.py +0 -3
  116. qcanvas-0.0.5.7a0/qcanvas/util/tree_util/expanding_tree.py +0 -165
  117. qcanvas-0.0.5.7a0/qcanvas/util/tree_util/model_helpers.py +0 -36
  118. qcanvas-0.0.5.7a0/qcanvas/util/tree_util/tree_model.py +0 -85
  119. qcanvas-0.0.5.7a0/requirements.txt +0 -15
  120. {qcanvas-0.0.5.7a0 → qcanvas-1.0.3.post1}/qcanvas/__init__.py +0 -0
  121. {qcanvas-0.0.5.7a0/qcanvas/net → qcanvas-1.0.3.post1/qcanvas/ui}/__init__.py +0 -0
  122. {qcanvas-0.0.5.7a0/qcanvas/ui → qcanvas-1.0.3.post1/qcanvas/ui/main_ui}/__init__.py +0 -0
@@ -0,0 +1,59 @@
1
+ Metadata-Version: 2.1
2
+ Name: qcanvas
3
+ Version: 1.0.3.post1
4
+ Summary: QCanvas is a desktop client for Canvas LMS.
5
+ Author: QCanvas
6
+ Author-email: QCanvas@noreply.codeberg.org
7
+ Requires-Python: >=3.12,<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.2.2,<0.3.0)
17
+ Requires-Dist: qcanvas-backend (==0.1.10a1)
18
+ Requires-Dist: qtpy (>=2.4.1,<3.0.0)
19
+ Requires-Dist: sqlalchemy (>=2.0.31,<3.0.0)
20
+ Description-Content-Type: text/markdown
21
+
22
+ # QCanvas
23
+
24
+ QCanvas is a desktop client for Canvas LMS.
25
+
26
+ # Downloads
27
+
28
+ Download it from [releases](https://github.com/QCanvas/QCanvasApp/releases)
29
+
30
+ # Development/Run from source
31
+
32
+ ## Prerequisites
33
+
34
+ - Python 3.12+ (use [pyenv](https://github.com/pyenv/pyenv) if your distro does not have that version)
35
+ - [Pipx](https://pipx.pypa.io/stable/) (optional)
36
+ - Poetry (recommended to install using `pipx install poetry`)
37
+ - [Appimagetool](https://github.com/AppImage/appimagetool) (Only for building the appimage)
38
+
39
+ ## Get started
40
+
41
+ ```bash
42
+ git clone https://github.com/QCanvas/QCanvasApp.git
43
+ cd QCanvasApp
44
+
45
+ # Enter shell and run it
46
+ poetry shell
47
+ poetry install
48
+ python qcanvas/run.py
49
+
50
+ # Alternatively you can run it like this:
51
+ poetry install
52
+ poetry run python qcanvas/run.py
53
+ ```
54
+
55
+ ## Build custom AppImage
56
+
57
+ ```bash
58
+ bash build_appimage.sh
59
+ ```
@@ -0,0 +1,38 @@
1
+ # QCanvas
2
+
3
+ QCanvas is a desktop client for Canvas LMS.
4
+
5
+ # Downloads
6
+
7
+ Download it from [releases](https://github.com/QCanvas/QCanvasApp/releases)
8
+
9
+ # Development/Run from source
10
+
11
+ ## Prerequisites
12
+
13
+ - Python 3.12+ (use [pyenv](https://github.com/pyenv/pyenv) if your distro does not have that version)
14
+ - [Pipx](https://pipx.pypa.io/stable/) (optional)
15
+ - Poetry (recommended to install using `pipx install poetry`)
16
+ - [Appimagetool](https://github.com/AppImage/appimagetool) (Only for building the appimage)
17
+
18
+ ## Get started
19
+
20
+ ```bash
21
+ git clone https://github.com/QCanvas/QCanvasApp.git
22
+ cd QCanvasApp
23
+
24
+ # Enter shell and run it
25
+ poetry shell
26
+ poetry install
27
+ python qcanvas/run.py
28
+
29
+ # Alternatively you can run it like this:
30
+ poetry install
31
+ poetry run python qcanvas/run.py
32
+ ```
33
+
34
+ ## Build custom AppImage
35
+
36
+ ```bash
37
+ bash build_appimage.sh
38
+ ```
@@ -0,0 +1,49 @@
1
+ [tool.poetry]
2
+ name = "qcanvas"
3
+ version = "1.0.3.post1"
4
+ description = "QCanvas is a desktop client for Canvas LMS."
5
+ authors = ["QCanvas <QCanvas@noreply.codeberg.org>"]
6
+ readme = "README.md"
7
+
8
+ [tool.poetry.scripts]
9
+ qcanvas = "qcanvas.run:main"
10
+
11
+ [tool.poetry.dependencies]
12
+ python = ">=3.12,<3.13"
13
+ qcanvas-api-clients = "^0.2.2"
14
+ qcanvas-backend = "0.1.10a1"
15
+ asynctaskpool = "^0.2.1"
16
+ sqlalchemy = "^2.0.31"
17
+ qtpy = "^2.4.1"
18
+ aiosqlite = "^0.20.0"
19
+ pyqtdarktheme-fork = "^2.3.2"
20
+ qasync = "^0.27.1"
21
+ lightdb = "^2.0"
22
+ platformdirs = "^4.2.2"
23
+
24
+ [tool.poetry.group.flatpak-exclude.dependencies]
25
+ pyside6 = "^6.7.2"
26
+ #2024-07-18: Latest version causes error with pyinstaller
27
+ setuptools = "=70.3.0"
28
+ pyinstaller = "^6.9.0"
29
+
30
+ [tool.poetry.group.dev-tools]
31
+ optional = true
32
+
33
+ [tool.poetry.group.dev-tools.dependencies]
34
+ black = "^24.4.2"
35
+ isort = "^5.13.2"
36
+
37
+ [tool.poetry.group.local-deps]
38
+ optional = true
39
+
40
+ [tool.poetry.group.local-deps.dependencies]
41
+ #qcanvas-api-clients = { path = "../QCanvas-API-Clients/", develop = false }
42
+ #qcanvas-backend = { path = "../QCanvas-Backend/", develop = true }
43
+
44
+ [build-system]
45
+ requires = ["poetry-core"]
46
+ build-backend = "poetry.core.masonry.api"
47
+
48
+ [tool.isort]
49
+ profile = "black"
@@ -0,0 +1,47 @@
1
+ import asyncio
2
+ import sys
3
+
4
+ import qdarktheme
5
+ from qasync import QEventLoop
6
+ from qtpy.QtWidgets import QApplication
7
+
8
+ import qcanvas.backend_connectors.qcanvas_task_master as task_master
9
+ from qcanvas.ui.main_ui.qcanvas_window import QCanvasWindow
10
+ from qcanvas.ui.setup import SetupDialog, setup_checker
11
+
12
+ main_window = None
13
+ setup_window = None
14
+
15
+
16
+ def _show_main():
17
+ global main_window
18
+ main_window = QCanvasWindow()
19
+ main_window.show()
20
+
21
+
22
+ def launch():
23
+ app = QApplication(sys.argv)
24
+ app.setApplicationName("QCanvas")
25
+
26
+ task_master.register()
27
+
28
+ qdarktheme.setup_theme(
29
+ "auto",
30
+ custom_colors={"primary": "e02424"},
31
+ )
32
+
33
+ event_loop = QEventLoop(app)
34
+ asyncio.set_event_loop(event_loop)
35
+
36
+ app_close_event = asyncio.Event()
37
+ app.aboutToQuit.connect(app_close_event.set)
38
+
39
+ if setup_checker.needs_setup():
40
+ setup_window = SetupDialog()
41
+ setup_window.show()
42
+ setup_window.closed.connect(_show_main)
43
+ else:
44
+ _show_main()
45
+
46
+ with event_loop:
47
+ event_loop.run_until_complete(app_close_event.wait())
@@ -0,0 +1,2 @@
1
+ from .frontend_resource_manager import FrontendResourceManager
2
+ from .qcanvas_task_master import task_master
@@ -0,0 +1,63 @@
1
+ import logging
2
+ from abc import ABCMeta
3
+ from pathlib import Path
4
+ from threading import Lock
5
+
6
+ import qcanvas_backend.database.types as db
7
+ from qcanvas_backend.database import QCanvasDatabase
8
+ from qcanvas_backend.net.resources.download.resource_manager import ResourceManager
9
+ from qcanvas_backend.net.resources.extracting.extractors import Extractors
10
+ from qcanvas_backend.task_master import TaskID
11
+ from qtpy.QtCore import QObject, Signal
12
+
13
+ from qcanvas.backend_connectors.qcanvas_task_master import task_master
14
+
15
+ _logger = logging.getLogger(__name__)
16
+
17
+
18
+ class _Meta(type(QObject), ABCMeta): ...
19
+
20
+
21
+ class FrontendResourceManager(QObject, ResourceManager, metaclass=_Meta):
22
+ download_finished = Signal(db.Resource)
23
+ download_failed = Signal(db.Resource)
24
+
25
+ def __init__(
26
+ self,
27
+ database: QCanvasDatabase,
28
+ download_dest: Path,
29
+ extractors: Extractors = Extractors(),
30
+ ):
31
+ super().__init__(
32
+ database=database, download_dest=download_dest, extractors=extractors
33
+ )
34
+ self._lock = Lock()
35
+ self._download_tasks: dict[str, TaskID] = {}
36
+
37
+ # todo will need more signals
38
+ def on_download_progress(
39
+ self, resource: db.Resource, current: int, total: int
40
+ ) -> None:
41
+ with self._lock:
42
+ if resource.id not in self._download_tasks:
43
+ task = TaskID("Download", resource.file_name)
44
+ self._download_tasks[resource.id] = task
45
+ elif current == total and total != 0:
46
+ task = self._download_tasks.pop(resource.id, None)
47
+ else:
48
+ task = self._download_tasks[resource.id]
49
+
50
+ task_master.report_progress(task, current, total)
51
+
52
+ def on_download_failed(self, resource: db.Resource) -> None:
53
+ with self._lock:
54
+ task = self._download_tasks.pop(
55
+ resource.id, TaskID("Download", resource.file_name)
56
+ )
57
+
58
+ task_master.report_failed(task, "Download failed")
59
+
60
+ self.download_failed.emit(resource)
61
+
62
+ def on_download_finished(self, resource: db.Resource) -> None:
63
+ self.download_finished.emit(resource)
@@ -0,0 +1,28 @@
1
+ import logging
2
+ from abc import ABCMeta
3
+
4
+ from qcanvas_backend.task_master import TaskID, TaskMaster, set_global_task_master
5
+ from qtpy.QtCore import QObject, Signal
6
+
7
+ _logger = logging.getLogger(__name__)
8
+
9
+
10
+ class _Meta(type(QObject), ABCMeta): ...
11
+
12
+
13
+ class _TaskMaster(TaskMaster, QObject, metaclass=_Meta):
14
+ task_progress = Signal(TaskID, int, int)
15
+ task_failed = Signal(TaskID, object)
16
+
17
+ def report_failed(self, _task_id: TaskID, context: str | Exception) -> None:
18
+ self.task_failed.emit(_task_id, context)
19
+
20
+ def report_progress(self, _task_id: TaskID, current: int, total: int) -> None:
21
+ self.task_progress.emit(_task_id, current, total)
22
+
23
+
24
+ task_master = _TaskMaster()
25
+
26
+
27
+ def register():
28
+ set_global_task_master(task_master)
@@ -0,0 +1,7 @@
1
+ from qcanvas.icons import rc_icons
2
+
3
+ main_icon = ":/main_icon.svg"
4
+ file_downloaded = ":/file-downloaded.svg"
5
+ file_not_downloaded = ":/file-not-downloaded.svg"
6
+ file_download_failed = ":/file-download-failed.svg"
7
+ file_unknown = ":/file-unknown.svg"
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+ <svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
4
+ <title>file-times</title>
5
+ <path d="M26.731 9.902c-0.005-0.035-0.011-0.066-0.019-0.095l0.001 0.005c-0.031-0.134-0.094-0.249-0.182-0.342l0 0-8-8c-0.092-0.087-0.207-0.15-0.335-0.181l-0.005-0.001c-0.027-0.008-0.059-0.014-0.092-0.019l-0.003-0c-0.026-0.007-0.059-0.014-0.092-0.019l-0.004-0h-12c-0.414 0-0.75 0.336-0.75 0.75v0 28c0 0.414 0.336 0.75 0.75 0.75h20c0.414-0 0.75-0.336 0.75-0.75v0-20c-0.005-0.038-0.012-0.071-0.020-0.103l0.001 0.005zM24.189 9.25h-5.439v-5.439zM6.75 29.25v-26.5h10.5v7.25c0 0.414 0.336 0.75 0.75 0.75h7.25v18.5zM20.066 15.935c-0.136-0.136-0.324-0.22-0.531-0.22s-0.395 0.084-0.531 0.22v0l-3.004 3.004-3.005-3.004c-0.136-0.141-0.327-0.228-0.538-0.228-0.414 0-0.75 0.336-0.75 0.75 0 0.211 0.087 0.402 0.228 0.538l3.004 3.005-3.004 3.004c-0.136 0.136-0.22 0.324-0.22 0.531 0 0.415 0.336 0.751 0.751 0.751 0.207 0 0.395-0.084 0.53-0.219v0l3.005-3.005 3.004 3.005c0.136 0.136 0.324 0.22 0.531 0.22 0.415 0 0.751-0.336 0.751-0.751 0-0.207-0.084-0.395-0.22-0.531l-3.005-3.004 3.005-3.005c0.135-0.136 0.218-0.323 0.218-0.53s-0.083-0.394-0.218-0.53l0 0z"></path>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+ <svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
4
+ <title>file</title>
5
+ <path d="M26.731 9.902c-0.005-0.035-0.011-0.066-0.019-0.095l0.001 0.005c-0.031-0.134-0.094-0.249-0.182-0.342l0 0-8-8c-0.092-0.087-0.207-0.15-0.335-0.181l-0.005-0.001c-0.027-0.008-0.059-0.014-0.092-0.019l-0.003-0c-0.026-0.007-0.059-0.014-0.092-0.019l-0.004-0h-12c-0.414 0-0.75 0.336-0.75 0.75v0 28c0 0.414 0.336 0.75 0.75 0.75h20c0.414-0 0.75-0.336 0.75-0.75v0-20c-0.005-0.038-0.012-0.071-0.020-0.103l0.001 0.005zM24.189 9.25h-5.439v-5.439zM6.75 29.25v-26.5h10.5v7.25c0 0.414 0.336 0.75 0.75 0.75h7.25v18.5z"></path>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+ <svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
4
+ <title>file-arrow-down</title>
5
+ <path d="M26.731 9.902c-0.005-0.035-0.011-0.066-0.019-0.095l0.001 0.005c-0.031-0.134-0.094-0.249-0.182-0.342l0 0-8-8c-0.092-0.087-0.207-0.15-0.335-0.181l-0.005-0.001c-0.027-0.008-0.059-0.014-0.092-0.019l-0.003-0c-0.026-0.007-0.059-0.014-0.092-0.019l-0.004-0h-12c-0.414 0-0.75 0.336-0.75 0.75v0 28c0 0.414 0.336 0.75 0.75 0.75h20c0.414-0 0.75-0.336 0.75-0.75v0-20c-0.005-0.038-0.012-0.071-0.020-0.103l0.001 0.005zM24.189 9.25h-5.439v-5.439zM6.75 29.25v-26.5h10.5v7.25c0 0.414 0.336 0.75 0.75 0.75h7.25v18.5zM20.469 20.91l-3.719 3.721v-10.676c0-0.414-0.336-0.75-0.75-0.75s-0.75 0.336-0.75 0.75v0 10.675l-3.72-3.72c-0.136-0.134-0.322-0.218-0.528-0.218-0.415 0-0.751 0.336-0.751 0.751 0 0.207 0.083 0.394 0.219 0.529l5 5c0.026 0.026 0.065 0.017 0.093 0.038 0.052 0.040 0.088 0.098 0.15 0.124 0.085 0.035 0.184 0.056 0.287 0.057h0c0 0 0 0 0 0 0.207 0 0.394-0.084 0.53-0.219l5.001-5c0.136-0.136 0.22-0.324 0.22-0.531 0-0.415-0.336-0.751-0.751-0.751-0.207 0-0.395 0.084-0.531 0.22v0z"></path>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+ <svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
4
+ <title>question</title>
5
+ <path d="M19.943 5.251c-1.145-0.635-2.511-1.008-3.964-1.008-1.461 0-2.834 0.378-4.026 1.040l0.042-0.022c-1.649 0.916-2.746 2.648-2.746 4.635 0 0.037 0 0.074 0.001 0.111l-0-0.006c0.001 0.413 0.336 0.747 0.75 0.747 0 0 0 0 0 0h-0c0.407-0.021 0.731-0.346 0.75-0.751l0-0.002c-0.001-0.026-0.001-0.058-0.001-0.089 0-1.441 0.8-2.694 1.98-3.341l0.020-0.010c0.934-0.511 2.047-0.812 3.23-0.812 1.178 0 2.287 0.298 3.255 0.824l-0.036-0.018c1.23 0.657 2.053 1.933 2.053 3.401 0 0.017-0 0.033-0 0.050l0-0.003c0.033 0.19 0.051 0.408 0.051 0.631 0 1.699-1.084 3.145-2.598 3.684l-0.027 0.008c-2.303 1.102-3.424 3.285-3.426 6.677 0 0 0 0 0 0.001 0 0.414 0.335 0.749 0.749 0.749h0.001c0.414-0 0.75-0.336 0.75-0.75v0c0.002-2.793 0.819-4.485 2.586-5.329 2.037-0.783 3.457-2.725 3.457-4.997 0-0.238-0.016-0.473-0.046-0.703l0.003 0.027c0-0.017 0-0.037 0-0.057 0-2.018-1.123-3.774-2.779-4.676l-0.028-0.014zM15.46 25.459c-0.123 0.145-0.198 0.334-0.2 0.541v0c-0.001 0.016-0.002 0.034-0.002 0.052 0 0.082 0.015 0.16 0.044 0.231l-0.002-0.004c0.039 0.094 0.093 0.173 0.16 0.24l0 0c0.071 0.076 0.158 0.137 0.255 0.178l0.005 0.002c0.084 0.026 0.18 0.041 0.28 0.041s0.196-0.015 0.287-0.043l-0.007 0.002c0.102-0.043 0.189-0.104 0.26-0.179l0-0c0.067-0.067 0.12-0.147 0.157-0.235l0.002-0.005c0.038-0.079 0.061-0.173 0.061-0.271 0-0.003-0-0.006-0-0.009v0c-0.010-0.209-0.092-0.397-0.221-0.542l0.001 0.001c-0.145-0.121-0.334-0.195-0.54-0.195s-0.395 0.074-0.541 0.196l0.001-0.001z"></path>
6
+ </svg>
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE RCC>
2
+ <RCC version="1.0">
3
+ <qresource>
4
+ <file>main_icon.svg</file>
5
+ <file>file-downloaded.svg</file>
6
+ <file>file-not-downloaded.svg</file>
7
+ <file>file-download-failed.svg</file>
8
+ <file>file-unknown.svg</file>
9
+ </qresource>
10
+ </RCC>
@@ -2,6 +2,12 @@
2
2
  <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
3
 
4
4
  <svg
5
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
6
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
7
+ xmlns:xlink="http://www.w3.org/1999/xlink"
8
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
9
+ xmlns:cc="http://creativecommons.org/ns#"
10
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
5
11
  inkscape:export-ydpi="90.000000"
6
12
  inkscape:export-xdpi="90.000000"
7
13
  width="256"
@@ -15,13 +21,7 @@
15
21
  style="display:inline;enable-background:new"
16
22
  inkscape:export-filename="/home/sam/moka-next-template.png"
17
23
  xml:space="preserve"
18
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
19
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
20
- xmlns:xlink="http://www.w3.org/1999/xlink"
21
- xmlns="http://www.w3.org/2000/svg"
22
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
23
- xmlns:cc="http://creativecommons.org/ns#"
24
- xmlns:dc="http://purl.org/dc/elements/1.1/"><sodipodi:namedview
24
+ xmlns="http://www.w3.org/2000/svg"><sodipodi:namedview
25
25
  stroke="#ef2929"
26
26
  fill="#f57900"
27
27
  id="base"