From f406524aa38a38a3997aefd6b6ceb27f0d9a3581 Mon Sep 17 00:00:00 2001 From: Teddy Cornaut Date: Thu, 24 Mar 2022 15:03:05 +0100 Subject: [PATCH] Initial commit --- .gitignore | 1 + README.md | 5 ++ config.json.dist | 3 + extension.js | 144 +++++++++++++++++++++++++++++++++++++++++++++++ icon.svg | 35 ++++++++++++ logo.png | Bin 0 -> 3701 bytes metadata.json | 12 ++++ stylesheet.css | 9 +++ 8 files changed, 209 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 config.json.dist create mode 100644 extension.js create mode 100644 icon.svg create mode 100644 logo.png create mode 100644 metadata.json create mode 100644 stylesheet.css 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 0000000000000000000000000000000000000000..85d1f2a0f27146c2a45db0a1e42f36f07c2d593f GIT binary patch literal 3701 zcmV-*4vO)KP)#v|N0=6o$dC11uO{m%jr?vtDj8h(K9S4vw-g2Hc6<1Pu z!Pa^UBR-ufjExH?V6tUABSBz|v<4g!3yArUMx&W?_5le?=yNpP(<9COJ!!i8o^v$! zKYjc5J@;P1BqJPFzEKq|wGt>(XekJD0iL6(Gl{f_1Tz!}D&Pad2LKSn35XNW3C1N+ zxayo&_-9?RXqPXUn0j%HEQckQd0eHmCINU;24uI*$4a+M}x)p;f z0$BUz2l-ZMM{xdFsjm?oqlZ5|d(A-S>&Spe# z7DQ_rYswF1(r?BD5NR zoe&%7OdlTTjYv24Jt^CJv3m|;xkcX|r zYvyU+J(zJn$2~i~)6_KX0kv@ppzB)EcGJ&y9|l5S3VfwuyyeIB5Lnk7`7RUvX1q=f z_M_0%4WY_cQ!SUW05hsT;(G$sLr zo1#-X0~#@DToVMvNAa$!l`lR1K-XxOj;RUg3dp~k%AY_G?(qetJ~y^YN1-=$`vh`4 zdv~HCf&?^K(YSKKA4j@wW_2%uH%Aa5`!vnTn9QC@9POje@sYZ@Y+L#P5;oBRV zBae=F&2T5eVP#6bQZU|92UmTyM;2Yvg!%d(8vcN`C1i?O1j7z^*7 zZnx=4#j%gCV0X(!^d#+HjgAC=vt>oa|MovNs0mP!AKLBMYcc+%s>D?O7+5rCI{vw; z1YXPjS$jhIgWHb{@Dgr{`b6+OyB)8nD8}3wLA%XPT1saGvAnFT`+Lxj6Ve)x$RiL52CfUdIV5aGQ)0@Im4n7 z`+qp9$pLkIO90_RZGK^0VYkD3?r>z))||kZ?~YeKweNJ^txtV_bY1IQ%HSz>yDJQO zN59B0Br}3O`;8K&1$tsj`abq+0>qIN?_BTar-Q`~eRqsypa0p5lA0X<96`YY1@O$y z$lYdoSMI>TyiNOCXZ8LKBrQDPZb*hqlSs&7pm!`lfW=O=)GPmKokNy$gL$>zcf>9! z76W*l0e}c!cf^Y!n^^<^91bf(sM76d44Fk$DxgYyqbgeJ)E+yA?1h-8uHD-@hphz4 z+z!Uz4wj&d6}(Fi|PPEbf%EsA>tT>O|X(%U}}(Dq;BF=u0pu{qSD1+Tyi@QgIjP1i;@vQj>13(6Vaz` z2V!ssg?2C?AG;lh!6k^=nTXrmj>F&%s@l$yR3m^Kg}`lWS=#D$AO?3JXbb1PU)e5@ z>uv{Q$S{h}wuZ{jaeX}rgB;(d-jH1=Aqpbx9Sovl?uKK?JaP=^og1hkM~L}H?gr!> zJ(thp%F)*l`{X15z(2bT)2kkbclzuJQQiqi=?KubP^4GiL(;Wa9Hr;-d0gD}Jf!FI z1sJr~KU;t>SUT_{FXIzQIVXho~ZNQh`hs3*ZdOZBpi*GQ|Imd?vft7a{IAC0%#1CpHY&=UAk)bKavx?6K%tV%hznPCn`hM>5u|w43)hFkq_)}%$5gDN1{0MiAg>l zE2lr{!0Yct!5*7dT2~xz3{@T;>eSGW=R_)G)!X6Q;}4=Ik;Kb;e`oFlW8j@=8-Bj$ zcj!q9Jbrs-?kmf4Akv}E4gW4umFk*X-e<=B={QgJ#BuH7=ZVL67fr+8mz7}N?3uV@ zY7icmyNGU+5JAV)PMkXbDc)^u$AwFuzl<#?o&(F9-sEjnIoc4a{JY@-Y>i4u6=A$(+DfP?&b*1AxMMX1K}+M%g`l%kqi? zcJv4Wg?GTp8~i%dFf<;25P@kntlXp0+*nh7aHLB{zyC7*7)UQ&gorU^<}CQ8OiRa1 zPT(sjM1D~*h|+8t6+J@Ms7tkv>ZM_M_S$r~3bq8DB~_Fw5&hu+Xeb=O`j) z0#gf~AIqg=jSmX*mm1ah4$UH$Xwd%II9m-6H0 z=1^JG5)9gg+~6(*{(f(dEhWa)-`KLEVuwP~?iw0wLebC=s(5`oMaSLYZ0kBzC&2FU zmN(dg3U;22wWieW_b074G2y1@lvqID0qDMT>=?$0$T2^~m)6%T9QQL>+OOiC-u2;~ z3D99?x;I^0h7=H-WN-W%o2&0jD{st}cd_gDo%o_A`CSIhwZooaRN5@`JovNF*Dj=M z$diZ=xfD6CRQ$HrLEQ<+QJiIkzO{b5IF;;HK`9Br@$k>rnKl;%D*L^#z%(e88<$ih8Mg=8g8s#Lc(`b|n=-6U!n_K3>1#!%(qY^nG@vQGg0*tjeDWg-265gI z5+WBt^sA%?uMD*^N4AjF0_bDS@#EeZe+oRJnydwQB?#F%$?&g$?j)k7%f+#Sw=c+) zjZ6pu^yjI4r}F|mu_a(EQ}8kd=D8Y>;3Qc06Y>7MPCeXz5ypwYgcHE+Y}(&CE0K`J zq*x4K5lAWlE^xw^id+SA1dwB-bR@}iq;J*jiOPf*z#vpA|?(1$P-8&aB~-J0NtX}1#kxg9SZFLQM;T literal 0 HcmV?d00001 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