commit f406524aa38a38a3997aefd6b6ceb27f0d9a3581 Author: Teddy Cornaut Date: Thu Mar 24 15:03:05 2022 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d344ba6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..1d20e53 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Installation + +- Extraire le contenu du dossier dans `~/.local/share/gnome-shell/extensions` +- Copier `config.json.dist` vers `config.json` et y entrer votre clé API Ninebadge +- Recharger votre session Gnome (ALT + F2, entrer "r" puis appuyer sur Entrée) \ No newline at end of file diff --git a/config.json.dist b/config.json.dist new file mode 100644 index 0000000..20f1fa3 --- /dev/null +++ b/config.json.dist @@ -0,0 +1,3 @@ +{ + "key": "change_me" +} \ No newline at end of file diff --git a/extension.js b/extension.js new file mode 100644 index 0000000..a6a315d --- /dev/null +++ b/extension.js @@ -0,0 +1,144 @@ +// Example#8 + +imports.gi.versions.Gtk = "4.0"; +const { Gtk } = imports.gi; + +const Main = imports.ui.main; +const St = imports.gi.St; +const ByteArray = imports.byteArray; +const GLib = imports.gi.GLib; +const GObject = imports.gi.GObject; +const Gio = imports.gi.Gio; +const Soup = imports.gi.Soup; +const PanelMenu = imports.ui.panelMenu; +const PopupMenu = imports.ui.popupMenu; +const Me = imports.misc.extensionUtils.getCurrentExtension(); + +const version = Gtk.get_major_version(); + +log(`GTK version is ${version}`); + +let myPopup; +let started = false; +let key = get_config('key'); + +const MyPopup = GObject.registerClass( +class MyPopup extends PanelMenu.Button { + + _init () { + + super._init(0); + + let icon = new St.Icon({ + //icon_name : 'security-low-symbolic', + gicon : Gio.icon_new_for_string( Me.dir.get_path() + '/logo.png' ), + style_class : 'system-status-icon', + }); + + this.add_child(icon); + + let today = new Date() + let time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); + + let timeItem = new PopupMenu.PopupMenuItem(''); + let timeLabel = new St.Label({text:'Capital actuel : +0:00'}); + timeItem.add(timeLabel); + + this.menu.addMenuItem(timeItem); + + this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); + + let startItem = new PopupMenu.PopupMenuItem(''); + let label = new St.Label({ + text:'DÉBUT POINTAGE', + style_class:'timer-btn' + }); + startItem.add(label); + + this.menu.addMenuItem(startItem); + + this.menu.connect('open-state-changed', (menu, open) => { + if (open) { + log('opened'); + let result = send_request('https://badge.cadoles.com/ninebadge/rest/showtimers', 'POST', key) + timeLabel.set_text('Capital actuel : ' + result.capitaltime) + let status = send_request('https://badge.cadoles.com/ninebadge/rest/status', 'POST', key) + if(status.status == "started") { + label.set_text('FIN POINTAGE'); + started = true + } else { + started = false + label.set_text('DÉBUT POINTAGE'); + } + } + }); + + + startItem.connect('activate', () => { + try { + let result = send_request('https://badge.cadoles.com/ninebadge/rest/showtimers', 'POST', key) + timeLabel.set_text('CAPITAL : ' + result.capitaltime) + } catch(error) { + log(error); + } + if(started){ + send_request('https://badge.cadoles.com/ninebadge/rest/clockout', 'POST', key) + started = false + label.set_text('DÉBUT POINTAGE'); + } else { + send_request('https://badge.cadoles.com/ninebadge/rest/clockin', 'POST', key) + label.set_text('FIN POINTAGE'); + started = true + } + log(started); + }); + + this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); + + let validateItem = new PopupMenu.PopupMenuItem(''); + let validateLabel = new St.Label({ + text:'VALIDER MA JOURNÉE', + style_class:'validate-btn' + }); + validateItem.add(validateLabel); + this.menu.addMenuItem(validateItem); + + validateItem.connect('activate', () => { + send_request('https://badge.cadoles.com/ninebadge/rest/clockout', 'POST', key) + started = false + label.set_text('DÉBUT POINTAGE'); + send_request('https://badge.cadoles.com/ninebadge/rest/validate', 'POST', key) + }); + + // you can close, open and toggle the menu with + // this.menu.close(); + // this.menu.open(); + // this.menu.toggle(); + } +}); + +function send_request(url, type='POST', key) { + let [ok, out, err, exit] = GLib.spawn_command_line_sync(`/usr/bin/curl --insecure -X ${type} -d '{"key": "${key}"}' -H "Content-Type: application/json" ${url} -o /tmp/test.json`); + let text = GLib.file_get_contents('/tmp/test.json')[1]; + let json_result = JSON.parse(text); + + return json_result +} + +function get_config(property) { + let text = GLib.file_get_contents(Me.dir.get_path() + '/config.json')[1]; + let json_result = JSON.parse(text); + return json_result[property]; +} + +function init() { +} + +function enable() { + myPopup = new MyPopup(); + Main.panel.addToStatusArea('myPopup', myPopup, 1); +} + +function disable() { + myPopup.destroy(); +} \ No newline at end of file diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..55ffd83 --- /dev/null +++ b/icon.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..85d1f2a Binary files /dev/null and b/logo.png differ diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..bb510a6 --- /dev/null +++ b/metadata.json @@ -0,0 +1,12 @@ +{ + "name" : "Ninebadge Gnome Extension", + "description" : "Ninebadge Gnome Extension", + "shell-version" : [ + "3.36", + "40", + "41" + ], + "url" : "", + "uuid" : "ninebadge-gnome-extension@cadoles.com", + "version" : 1.0 +} diff --git a/stylesheet.css b/stylesheet.css new file mode 100644 index 0000000..cf1c357 --- /dev/null +++ b/stylesheet.css @@ -0,0 +1,9 @@ +.timer-btn{ + background:green; + padding:5px 15px; +} + +.validate-btn{ + background:#C82333; + padding:5px 15px; +} \ No newline at end of file