summaryrefslogtreecommitdiff
path: root/contents/ui
diff options
context:
space:
mode:
authorFrederick Yin <fkfd@fkfd.me>2022-04-05 17:18:14 +0800
committerFrederick Yin <fkfd@fkfd.me>2022-04-05 17:18:14 +0800
commit670655326ec305797b2c460b42e7ee53b057082e (patch)
tree2795d5312f3e95ba48af93f2cb210a7bf0e8e0f1 /contents/ui
parentdc920a81f58d745be895817d136b144c1665481b (diff)
Add basic canvas API request and related config
Diffstat (limited to 'contents/ui')
-rw-r--r--contents/ui/configGeneral.qml23
-rw-r--r--contents/ui/main.qml33
2 files changed, 53 insertions, 3 deletions
diff --git a/contents/ui/configGeneral.qml b/contents/ui/configGeneral.qml
new file mode 100644
index 0000000..c13b5ea
--- /dev/null
+++ b/contents/ui/configGeneral.qml
@@ -0,0 +1,23 @@
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+import QtQuick.Layouts 1.15
+import org.kde.kirigami 2.5 as Kirigami
+
+Kirigami.FormLayout {
+ id: page
+ property alias cfg_canvasUrl: canvasUrl.text
+ property alias cfg_oauth2Token: oauth2Token.text
+
+ TextField {
+ id: canvasUrl
+ Kirigami.FormData.label: i18n("Canvas URL:")
+ placeholderText: i18n("https://your.canvas.url/")
+ }
+
+ TextField {
+ id: oauth2Token
+ Kirigami.FormData.label: i18n("OAuth2 Token:")
+ placeholderText: i18n("")
+ }
+}
+
diff --git a/contents/ui/main.qml b/contents/ui/main.qml
index c78ba5e..33c12b6 100644
--- a/contents/ui/main.qml
+++ b/contents/ui/main.qml
@@ -2,6 +2,7 @@ import QtQuick 2.15
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
+import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.components 3.0 as PlasmaComponents3
@@ -11,11 +12,31 @@ Item {
width: PlasmaCore.Units.gridUnit * 20
height: PlasmaCore.Units.gridUnit * 40
+ readonly property string canvasUrl: plasmoid.configuration.canvasUrl
+ readonly property string apiEndpoint: `${canvasUrl.replace(/\/$/, "")}/api/v1`
+ readonly property string oauth2Token: plasmoid.configuration.oauth2Token
+ readonly property string authHeader: `Bearer ${oauth2Token}`
+
function syncCanvas() {
- // TODO: networking
- for (let i = 0; i < 8; i++) {
- announcementsModel.append({course: `VZ${i}01`, title: "Something"})
+ let xhr = new XMLHttpRequest()
+ xhr.open("GET", `${apiEndpoint}/courses`)
+ xhr.setRequestHeader("Authorization", authHeader)
+ xhr.onload = function () {
+ if (xhr.status == 200) {
+ try {
+ let courses = JSON.parse(xhr.responseText)
+ for (let c of courses) {
+ announcementsModel.append({course: c.name, title: ""})
+ }
+ } catch (e) {
+ if (e instanceof SyntaxError) { console.error("Cannot parse JSON:") }
+ else { throw e }
+ }
+ } else {
+ console.error("XHR failed")
+ }
}
+ xhr.send()
}
Timer {
@@ -25,9 +46,15 @@ Item {
onTriggered: syncCanvas();
}
+ Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
+
+ Plasmoid.fullRepresentation: main
+
ColumnLayout {
id: main
anchors.fill: parent
+ width: PlasmaCore.Units.gridUnit * 20
+ height: PlasmaCore.Units.gridUnit * 40
PlasmaExtras.Heading {
level: 1