From 37fab7ac6374c9468118d31f0fdc9851acc9f111 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 27 Mar 2021 14:30:06 +0100 Subject: [PATCH 01/12] Update error handling for newsfeed and calendar --- modules/default/calendar/calendar.js | 11 +++++++++-- modules/default/newsfeed/newsfeed.js | 3 +++ modules/default/newsfeed/node_helper.js | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index e7a6fcc9..726d659b 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -147,10 +147,11 @@ Module.register("calendar", { } } } else if (notification === "FETCH_ERROR") { - Log.error("Calendar Error. Could not fetch calendar: " + payload.url); + this.error = this.translate("MODULE_CONFIG_ERROR", { MODULE_NAME: this.name, ERROR: payload.error }); this.loaded = true; } else if (notification === "INCORRECT_URL") { - Log.error("Calendar Error. Incorrect url: " + payload.url); + this.error = `Incorrect url: ${payload.url}`; + this.loaded = true; } this.updateDom(this.config.animationSpeed); @@ -168,6 +169,12 @@ Module.register("calendar", { const wrapper = document.createElement("table"); wrapper.className = this.config.tableClass; + if (this.error) { + wrapper.innerHTML = this.error; + wrapper.className = this.config.tableClass + " dimmed"; + return wrapper; + } + if (events.length === 0) { wrapper.innerHTML = this.loaded ? this.translate("EMPTY") : this.translate("LOADING"); wrapper.className = this.config.tableClass + " dimmed"; diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 441984f4..13efd590 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -89,6 +89,9 @@ Module.register("newsfeed", { this.loaded = true; this.error = null; + } else if (notification === "FETCH_ERROR") { + this.error = `Could not fetch newsfeed ${payload.url}`; + this.scheduleUpdateInterval(); } else if (notification === "INCORRECT_URL") { this.error = `Incorrect url: ${payload.url}`; this.scheduleUpdateInterval(); diff --git a/modules/default/newsfeed/node_helper.js b/modules/default/newsfeed/node_helper.js index 6fd461a1..29e503d8 100644 --- a/modules/default/newsfeed/node_helper.js +++ b/modules/default/newsfeed/node_helper.js @@ -52,6 +52,7 @@ module.exports = NodeHelper.create({ }); fetcher.onError((fetcher, error) => { + Log.error("Newsfeed Error. Could not fetch newsfeed: ", fetcher.url(), error); this.sendSocketNotification("FETCH_ERROR", { url: fetcher.url(), error: error From a6879e853b7d99dc15aa950815e4bb6e90480e62 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 27 Mar 2021 17:59:11 +0100 Subject: [PATCH 02/12] Fix tests --- tests/e2e/modules/calendar_spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js index a5cbe55a..edecf4fa 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/e2e/modules/calendar_spec.js @@ -149,8 +149,8 @@ describe("Calendar module", function () { serverBasicAuth.close(done()); }); - it("should return No upcoming events", function () { - return app.client.waitUntilTextExists(".calendar", "No upcoming events.", 10000); + it("should show Unauthorized error", function () { + return app.client.waitUntilTextExists(".calendar", "Error in the calendar module. Unauthorized", 10000); }); }); }); From 90aa50bb11cd7fca10b30f6707decbe1bfd806f5 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 28 Mar 2021 14:17:03 +0200 Subject: [PATCH 03/12] Add fetcher_helper for calendar and newsfeed --- js/fetcher_helper.js | 12 ++++++++++++ modules/default/calendar/calendarfetcher.js | 17 ++++++----------- modules/default/calendar/node_helper.js | 4 ++-- modules/default/newsfeed/newsfeed.js | 2 +- modules/default/newsfeed/newsfeedfetcher.js | 12 +++++++----- modules/default/newsfeed/node_helper.js | 4 ++-- package.json | 1 + 7 files changed, 31 insertions(+), 21 deletions(-) create mode 100644 js/fetcher_helper.js diff --git a/js/fetcher_helper.js b/js/fetcher_helper.js new file mode 100644 index 00000000..04532873 --- /dev/null +++ b/js/fetcher_helper.js @@ -0,0 +1,12 @@ +const FetcherHelper = { + checkStatus: function (response) { + // response.status >= 200 && response.status < 300 + if (response.ok) { + return response; + } else { + throw Error(response.statusText); + } + } +}; + +module.exports = FetcherHelper; diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 855257d4..b5d98607 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -5,6 +5,7 @@ * MIT Licensed. */ const CalendarUtils = require("./calendarutils"); +const FetcherHelper = require("fetcher_helper"); const Log = require("logger"); const ical = require("node-ical"); const fetch = require("node-fetch"); @@ -62,17 +63,7 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn } fetcher - .catch((error) => { - fetchFailedCallback(this, error); - scheduleTimer(); - }) - .then((response) => { - if (response.status !== 200) { - fetchFailedCallback(this, response.statusText); - scheduleTimer(); - } - return response; - }) + .then(FetcherHelper.checkStatus) .then((response) => response.text()) .then((responseData) => { let data = []; @@ -93,6 +84,10 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn } this.broadcastEvents(); scheduleTimer(); + }) + .catch((error) => { + fetchFailedCallback(this, error.message); + scheduleTimer(); }); }; diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index d544878b..a280ddff 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -46,7 +46,7 @@ module.exports = NodeHelper.create({ let fetcher; if (typeof this.fetchers[identifier + url] === "undefined") { - Log.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval); + Log.log("Create new calendarfetcher for url: " + url + " - Interval: " + fetchInterval); fetcher = new CalendarFetcher(url, fetchInterval, excludedEvents, maximumEntries, maximumNumberOfDays, auth, broadcastPastEvents, selfSignedCert); fetcher.onReceive((fetcher) => { @@ -64,7 +64,7 @@ module.exports = NodeHelper.create({ this.fetchers[identifier + url] = fetcher; } else { - Log.log("Use existing calendar fetcher for url: " + url); + Log.log("Use existing calendarfetcher for url: " + url); fetcher = this.fetchers[identifier + url]; fetcher.broadcastEvents(); } diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 13efd590..3946a9dd 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -90,7 +90,7 @@ Module.register("newsfeed", { this.loaded = true; this.error = null; } else if (notification === "FETCH_ERROR") { - this.error = `Could not fetch newsfeed ${payload.url}`; + this.error = `${payload.error}`; this.scheduleUpdateInterval(); } else if (notification === "INCORRECT_URL") { this.error = `Incorrect url: ${payload.url}`; diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/modules/default/newsfeed/newsfeedfetcher.js index d4db511d..4d359b99 100644 --- a/modules/default/newsfeed/newsfeedfetcher.js +++ b/modules/default/newsfeed/newsfeedfetcher.js @@ -5,6 +5,7 @@ * MIT Licensed. */ const Log = require("logger"); +const FetcherHelper = require("fetcher_helper"); const FeedMe = require("feedme"); const fetch = require("node-fetch"); const iconv = require("iconv-lite"); @@ -84,12 +85,13 @@ const NewsfeedFetcher = function (url, reloadInterval, encoding, logFeedWarnings }; fetch(url, { headers: headers }) - .catch((error) => { - fetchFailedCallback(this, error); - scheduleTimer(); + .then(FetcherHelper.checkStatus) + .then((response) => { + response.body.pipe(iconv.decodeStream(encoding)).pipe(parser); }) - .then((res) => { - res.body.pipe(iconv.decodeStream(encoding)).pipe(parser); + .catch((error) => { + fetchFailedCallback(this, error.message); + scheduleTimer(); }); }; diff --git a/modules/default/newsfeed/node_helper.js b/modules/default/newsfeed/node_helper.js index 29e503d8..926b9d3d 100644 --- a/modules/default/newsfeed/node_helper.js +++ b/modules/default/newsfeed/node_helper.js @@ -44,7 +44,7 @@ module.exports = NodeHelper.create({ let fetcher; if (typeof this.fetchers[url] === "undefined") { - Log.log("Create new news fetcher for url: " + url + " - Interval: " + reloadInterval); + Log.log("Create new newsfetcher for url: " + url + " - Interval: " + reloadInterval); fetcher = new NewsfeedFetcher(url, reloadInterval, encoding, config.logFeedWarnings); fetcher.onReceive(() => { @@ -61,7 +61,7 @@ module.exports = NodeHelper.create({ this.fetchers[url] = fetcher; } else { - Log.log("Use existing news fetcher for url: " + url); + Log.log("Use existing newsfetcher for url: " + url); fetcher = this.fetchers[url]; fetcher.setReloadInterval(reloadInterval); fetcher.broadcastItems(); diff --git a/package.json b/package.json index 4b45193d..39c47bd6 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "socket.io": "^4.1.2" }, "_moduleAliases": { + "fetcher_helper": "js/fetcher_helper.js", "node_helper": "js/node_helper.js", "logger": "js/logger.js" }, From b212641069d18dbf6515c2e313de9e7e322ef37d Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 24 Apr 2021 09:14:08 +0200 Subject: [PATCH 04/12] Move checkFetchStatus into NodelHelper --- js/fetcher_helper.js | 12 ------------ js/node_helper.js | 9 +++++++++ modules/default/calendar/calendarfetcher.js | 4 ++-- modules/default/newsfeed/newsfeedfetcher.js | 4 ++-- package.json | 1 - 5 files changed, 13 insertions(+), 17 deletions(-) delete mode 100644 js/fetcher_helper.js diff --git a/js/fetcher_helper.js b/js/fetcher_helper.js deleted file mode 100644 index 04532873..00000000 --- a/js/fetcher_helper.js +++ /dev/null @@ -1,12 +0,0 @@ -const FetcherHelper = { - checkStatus: function (response) { - // response.status >= 200 && response.status < 300 - if (response.ok) { - return response; - } else { - throw Error(response.statusText); - } - } -}; - -module.exports = FetcherHelper; diff --git a/js/node_helper.js b/js/node_helper.js index 81d2d9d5..415ae658 100644 --- a/js/node_helper.js +++ b/js/node_helper.js @@ -113,6 +113,15 @@ const NodeHelper = Class.extend({ } }); +NodeHelper.checkFetchStatus = function (response) { + // response.status >= 200 && response.status < 300 + if (response.ok) { + return response; + } else { + throw Error(response.statusText); + } +}; + NodeHelper.create = function (moduleDefinition) { return NodeHelper.extend(moduleDefinition); }; diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index b5d98607..02778fd5 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -5,8 +5,8 @@ * MIT Licensed. */ const CalendarUtils = require("./calendarutils"); -const FetcherHelper = require("fetcher_helper"); const Log = require("logger"); +const NodeHelper = require("node_helper"); const ical = require("node-ical"); const fetch = require("node-fetch"); const digest = require("digest-fetch"); @@ -63,7 +63,7 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn } fetcher - .then(FetcherHelper.checkStatus) + .then(NodeHelper.checkFetchStatus) .then((response) => response.text()) .then((responseData) => { let data = []; diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/modules/default/newsfeed/newsfeedfetcher.js index 4d359b99..bbfda9e1 100644 --- a/modules/default/newsfeed/newsfeedfetcher.js +++ b/modules/default/newsfeed/newsfeedfetcher.js @@ -5,8 +5,8 @@ * MIT Licensed. */ const Log = require("logger"); -const FetcherHelper = require("fetcher_helper"); const FeedMe = require("feedme"); +const NodeHelper = require("node_helper"); const fetch = require("node-fetch"); const iconv = require("iconv-lite"); @@ -85,7 +85,7 @@ const NewsfeedFetcher = function (url, reloadInterval, encoding, logFeedWarnings }; fetch(url, { headers: headers }) - .then(FetcherHelper.checkStatus) + .then(NodeHelper.checkFetchStatus) .then((response) => { response.body.pipe(iconv.decodeStream(encoding)).pipe(parser); }) diff --git a/package.json b/package.json index 39c47bd6..4b45193d 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,6 @@ "socket.io": "^4.1.2" }, "_moduleAliases": { - "fetcher_helper": "js/fetcher_helper.js", "node_helper": "js/node_helper.js", "logger": "js/logger.js" }, From dcec778e02d20dea25706d90de424e95a3c024e5 Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 24 Apr 2021 10:02:45 +0200 Subject: [PATCH 05/12] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b2690b7..2b6f02db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ Special thanks to the following contributors: @B1gG, @codac, @ezeholz, @khassel, - Moved some files into better suited directories - Update dependencies in package.json, require node >= v12, remove `rrule-alt` and `rrule` - Update dependencies in package.json and migrate husky to v6 +- Cleaned up error handling in newsfeed and calendar modules ### Removed From e9de961a23d1822ed0953610bf72f4c558b9d0dc Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 24 Apr 2021 21:59:16 +0200 Subject: [PATCH 06/12] Cleanup prohibited words filter code and test data --- modules/default/newsfeed/newsfeed.js | 4 +- .../configs/data/feed_test_rodrigoramirez.xml | 420 +++++++++--------- 2 files changed, 212 insertions(+), 212 deletions(-) diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 3946a9dd..00b07b81 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -186,9 +186,9 @@ Module.register("newsfeed", { } if (this.config.prohibitedWords.length > 0) { - newsItems = newsItems.filter(function (value) { + newsItems = newsItems.filter(function (item) { for (let word of this.config.prohibitedWords) { - if (value["title"].toLowerCase().indexOf(word.toLowerCase()) > -1) { + if (item.title.toLowerCase().indexOf(word.toLowerCase()) > -1) { return false; } } diff --git a/tests/configs/data/feed_test_rodrigoramirez.xml b/tests/configs/data/feed_test_rodrigoramirez.xml index dbce18e9..b781a8a8 100644 --- a/tests/configs/data/feed_test_rodrigoramirez.xml +++ b/tests/configs/data/feed_test_rodrigoramirez.xml @@ -1,44 +1,44 @@ - + + + + Rodrigo Ramírez Norambuena + + https://rodrigoramirez.com + Temas sobre Linux, VoIP, Open Source, tecnología y lo relacionado. + Fri, 21 Oct 2016 21:30:22 +0000 + es-ES + hourly + 1 + https://wordpress.org/?v=4.7.3 + + QPanel 0.13.0 + https://rodrigoramirez.com/qpanel-0-13-0/ + https://rodrigoramirez.com/qpanel-0-13-0/#comments + Tue, 20 Sep 2016 11:16:08 +0000 + + + + + + + + + + + - - Rodrigo Ramírez Norambuena - - https://rodrigoramirez.com - Temas sobre Linux, VoIP, Open Source, tecnología y lo relacionado. - Fri, 21 Oct 2016 21:30:22 +0000 - es-ES - hourly - 1 - https://wordpress.org/?v=4.7.3 - - QPanel 0.13.0 - https://rodrigoramirez.com/qpanel-0-13-0/ - https://rodrigoramirez.com/qpanel-0-13-0/#comments - Tue, 20 Sep 2016 11:16:08 +0000 - - - - - - - - - - - - - https://rodrigoramirez.com/?p=1299 - Ya está disponible la versión 0.13.0 de QPanel Para instalar esta nueva versión, la debes descargar de https://github.com/roramirez/qpanel/tree/0.13.0 En al README.md puedes encontrar las instrucciones para hacer que funcione en tu sistema. En esta nueva versión cuenta con los siguientes cambios: Se establece un limite para el reciclado del tiempo de conexión a la base […]

+ https://rodrigoramirez.com/?p=1299 + Ya está disponible la versión 0.13.0 de QPanel Para instalar esta nueva versión, la debes descargar de https://github.com/roramirez/qpanel/tree/0.13.0 En al README.md puedes encontrar las instrucciones para hacer que funcione en tu sistema. En esta nueva versión cuenta con los siguientes cambios: Se establece un limite para el reciclado del tiempo de conexión a la base […]

La entrada QPanel 0.13.0 aparece primero en Rodrigo Ramírez Norambuena.

]]>
- Panel monitor callcenter | Qpanel Monitor ColasYa está disponible la versión 0.13.0 de QPanel

+ Panel monitor callcenter | Qpanel Monitor ColasYa está disponible la versión 0.13.0 de QPanel

Para instalar esta nueva versión, la debes descargar de

  • https://github.com/roramirez/qpanel/tree/0.13.0
  • @@ -57,25 +57,25 @@

     

    La entrada QPanel 0.13.0 aparece primero en Rodrigo Ramírez Norambuena.

    ]]> - https://rodrigoramirez.com/qpanel-0-13-0/feed/ - 3 - - - Problema VirtualBox “starting virtual machine” … - https://rodrigoramirez.com/problema-virtualbox-starting-virtual-machine/ - https://rodrigoramirez.com/problema-virtualbox-starting-virtual-machine/#respond - Sat, 10 Sep 2016 22:50:13 +0000 - - - - - + https://rodrigoramirez.com/qpanel-0-13-0/feed/ + 3 + + + Problema VirtualBox “starting virtual machine” … + https://rodrigoramirez.com/problema-virtualbox-starting-virtual-machine/ + https://rodrigoramirez.com/problema-virtualbox-starting-virtual-machine/#respond + Sat, 10 Sep 2016 22:50:13 +0000 + + + + + - https://rodrigoramirez.com/?p=1284 - Después de una actualización de Debian, de la rama stretch/sid, tuve un problema con VirtualBox.  La versión que se actualizó fue a la virtualbox 5.1.4-dfsg-1+b1. El gran problema era que ninguna maquina virtual quería arrancar, se quedaba en un largo limbo con el mensaje “starting virtual machine”, como el de la imagen de a continuación. […]

    + https://rodrigoramirez.com/?p=1284 + Después de una actualización de Debian, de la rama stretch/sid, tuve un problema con VirtualBox.  La versión que se actualizó fue a la virtualbox 5.1.4-dfsg-1+b1. El gran problema era que ninguna maquina virtual quería arrancar, se quedaba en un largo limbo con el mensaje “starting virtual machine”, como el de la imagen de a continuación. […]

    La entrada Problema VirtualBox “starting virtual machine” … aparece primero en Rodrigo Ramírez Norambuena.

    ]]>
    - Después de una actualización de Debian, de la rama stretch/sid, tuve un problema con VirtualBox.  La versión que se actualizó fue a la virtualbox 5.1.4-dfsg-1+b1. El gran problema era que ninguna maquina virtual quería arrancar, se quedaba en un largo limbo con el mensaje “starting virtual machine”, como el de la imagen de a continuación.

    + Después de una actualización de Debian, de la rama stretch/sid, tuve un problema con VirtualBox.  La versión que se actualizó fue a la virtualbox 5.1.4-dfsg-1+b1. El gran problema era que ninguna maquina virtual quería arrancar, se quedaba en un largo limbo con el mensaje “starting virtual machine”, como el de la imagen de a continuación.

    Starting virtual machine ... VirtualBox

    Ninguna, pero ninguna maquina arrancó, se quedaban en ese mensaje. Fue de esos instantes en que sudas helado … 😉

    Con un poco de investigación fue a parar al archivo ~/.VirtualBox/VBoxSVC.log que indicaba

    @@ -85,7 +85,7 @@

     

    Fui… algo de donde agarrarse. Mirando un poco mas se trataba de problemas con los permisos al vboxdrvu, mirando indicaba que tenía 0600.

     

    -
    $ ls -lh /dev/vboxdrvu 
    +
    $ ls -lh /dev/vboxdrvu
      crw------- 1 root root 10, 56 Sep 10 12:47 /dev/vboxdrvu

     

    El tema es que deben estar en 0666,  le cambias los permisos y eso soluciona el problema 🙂

    @@ -95,24 +95,24 @@ $ ls -lh /dev/vboxdrvu crw-rw-rw- 1 root root 10, 56 Sep 10 12:47 /dev/vboxdrvu

    La entrada Problema VirtualBox “starting virtual machine” … aparece primero en Rodrigo Ramírez Norambuena.

    ]]>
    - https://rodrigoramirez.com/problema-virtualbox-starting-virtual-machine/feed/ - 0 -
    - - Mejorando la consola interactiva de Python - https://rodrigoramirez.com/mejorando-la-consola-interactiva-python/ - https://rodrigoramirez.com/mejorando-la-consola-interactiva-python/#comments - Tue, 06 Sep 2016 04:24:43 +0000 - - - - + https://rodrigoramirez.com/problema-virtualbox-starting-virtual-machine/feed/ + 0 + + + Mejorando la consola interactiva de Python + https://rodrigoramirez.com/mejorando-la-consola-interactiva-python/ + https://rodrigoramirez.com/mejorando-la-consola-interactiva-python/#comments + Tue, 06 Sep 2016 04:24:43 +0000 + + + + - https://rodrigoramirez.com/?p=1247 - Cuando estás desarrollando en Python es muy cool estar utilizando la consola interactiva para ir probando cosas antes de ponerlas dentro del archivo de código fuente. La consola de Python funciona y cumple su cometido. Solo al tipear  python  te permite entrar en modo interactivo e ir probando cosas. El punto es que a veces […]

    + https://rodrigoramirez.com/?p=1247 + Cuando estás desarrollando en Python es muy cool estar utilizando la consola interactiva para ir probando cosas antes de ponerlas dentro del archivo de código fuente. La consola de Python funciona y cumple su cometido. Solo al tipear  python  te permite entrar en modo interactivo e ir probando cosas. El punto es que a veces […]

    La entrada Mejorando la consola interactiva de Python aparece primero en Rodrigo Ramírez Norambuena.

    ]]>
    - Cuando estás desarrollando en Python es muy cool estar utilizando la consola interactiva para ir probando cosas antes de ponerlas dentro del archivo de código fuente.

    + Cuando estás desarrollando en Python es muy cool estar utilizando la consola interactiva para ir probando cosas antes de ponerlas dentro del archivo de código fuente.

    La consola de Python funciona y cumple su cometido. Solo al tipear  python  te permite entrar en modo interactivo e ir probando cosas.

    El punto es que a veces uno necesita ir un poco más allá. Como autocomentado de código o resaltado de sintaxis, para eso tengo dos truco que utilizo generalmente.

    Truco a)

    @@ -139,31 +139,31 @@ $ ls -lh /dev/vboxdrvu

    O lo agregas a un bashrc, zshrc o la shell que ocupes.

    La entrada Mejorando la consola interactiva de Python aparece primero en Rodrigo Ramírez Norambuena.

    ]]>
    - https://rodrigoramirez.com/mejorando-la-consola-interactiva-python/feed/ - 4 -
    - - QPanel 0.12.0 con estadísticas - https://rodrigoramirez.com/qpanel-0-12-0-estadisticas/ - https://rodrigoramirez.com/qpanel-0-12-0-estadisticas/#respond - Mon, 22 Aug 2016 04:19:03 +0000 - - - - - - - - - - - + https://rodrigoramirez.com/mejorando-la-consola-interactiva-python/feed/ + 4 + + + QPanel 0.12.0 con estadísticas + https://rodrigoramirez.com/qpanel-0-12-0-estadisticas/ + https://rodrigoramirez.com/qpanel-0-12-0-estadisticas/#respond + Mon, 22 Aug 2016 04:19:03 +0000 + + + + + + + + + + + - https://rodrigoramirez.com/?p=1268 - Ya está disponible una nueva versión de QPanel, esta es la 0.12.0 Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.12.0 En esta nueva versión las funcionalidades agregadas son: Permite remover los agentes de las cola Posibilidad de cancelar llamadas que están en espera de atención Estadísticas por rango de fecha obtenidas desde […]

    + https://rodrigoramirez.com/?p=1268 + Ya está disponible una nueva versión de QPanel, esta es la 0.12.0 Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.12.0 En esta nueva versión las funcionalidades agregadas son: Permite remover los agentes de las cola Posibilidad de cancelar llamadas que están en espera de atención Estadísticas por rango de fecha obtenidas desde […]

    La entrada QPanel 0.12.0 con estadísticas aparece primero en Rodrigo Ramírez Norambuena.

    ]]>
    - Panel monitor callcenter | Qpanel Monitor ColasYa está disponible una nueva versión de QPanel, esta es la 0.12.0

    + Panel monitor callcenter | Qpanel Monitor ColasYa está disponible una nueva versión de QPanel, esta es la 0.12.0

    Para instalar esta nueva versión, debes visitar la siguiente URL

    • https://github.com/roramirez/qpanel/tree/0.12.0
    • @@ -178,31 +178,31 @@ $ ls -lh /dev/vboxdrvu

      Si deseas colaborar con el proyecto puedes agregar nuevas sugerencias mediante un issue ó colaborar mediante mediante un Pull Request

      La entrada QPanel 0.12.0 con estadísticas aparece primero en Rodrigo Ramírez Norambuena.

      ]]> - https://rodrigoramirez.com/qpanel-0-12-0-estadisticas/feed/ - 0 - - - QPanel 0.11.0 con Spy, Whisper y mas - https://rodrigoramirez.com/qpanel-spy-supervisor/ - https://rodrigoramirez.com/qpanel-spy-supervisor/#comments - Thu, 21 Jul 2016 01:53:21 +0000 - - - - - - - - - - - + https://rodrigoramirez.com/qpanel-0-12-0-estadisticas/feed/ + 0 + + + QPanel 0.11.0 con Spy, Whisper y mas + https://rodrigoramirez.com/qpanel-spy-supervisor/ + https://rodrigoramirez.com/qpanel-spy-supervisor/#comments + Thu, 21 Jul 2016 01:53:21 +0000 + + + + + + + + + + + - https://rodrigoramirez.com/?p=1245 - Ya está disponible una nueva versión de QPanel, esta es la 0.11.0 Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.11.0 Esta versión hemos agregado  algunas funcionalidades que los usuarios  han ido solicitando. Para esta versión es posible realizar Spy, Whisper o Barge a un canal para la supervisión de los miembros que […]

      + https://rodrigoramirez.com/?p=1245 + Ya está disponible una nueva versión de QPanel, esta es la 0.11.0 Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.11.0 Esta versión hemos agregado  algunas funcionalidades que los usuarios  han ido solicitando. Para esta versión es posible realizar Spy, Whisper o Barge a un canal para la supervisión de los miembros que […]

      La entrada QPanel 0.11.0 con Spy, Whisper y mas aparece primero en Rodrigo Ramírez Norambuena.

      ]]>
      - Panel monitor callcenter | Qpanel Monitor ColasYa está disponible una nueva versión de QPanel, esta es la 0.11.0

      + Panel monitor callcenter | Qpanel Monitor ColasYa está disponible una nueva versión de QPanel, esta es la 0.11.0

      Para instalar esta nueva versión, debes visitar la siguiente URL

      • https://github.com/roramirez/qpanel/tree/0.11.0
      • @@ -216,22 +216,22 @@ $ ls -lh /dev/vboxdrvu

        El proyecto siempre está abierto a nuevas sugerencias las cuales puedes agregar mediante un issue.

        La entrada QPanel 0.11.0 con Spy, Whisper y mas aparece primero en Rodrigo Ramírez Norambuena.

        ]]> - https://rodrigoramirez.com/qpanel-spy-supervisor/feed/ - 4 - - - Añadir Swap a un sistema - https://rodrigoramirez.com/crear-swap/ - https://rodrigoramirez.com/crear-swap/#respond - Fri, 15 Jul 2016 05:07:43 +0000 - - + https://rodrigoramirez.com/qpanel-spy-supervisor/feed/ + 4 + + + Añadir Swap a un sistema + https://rodrigoramirez.com/crear-swap/ + https://rodrigoramirez.com/crear-swap/#respond + Fri, 15 Jul 2016 05:07:43 +0000 + + - https://rodrigoramirez.com/?p=1234 - Algo que me toma generalmente hacer es cuando trabajo con maquina virtuales es asignar una cantidad determinada de Swap. La  memoria swap es un espacio de intercambio en disco para cuando el sistema ya no puede utilizar más memoria RAM. El problema para mi es que algunos sistemas de maquinas virtuales no asignan por defecto […]

        + https://rodrigoramirez.com/?p=1234 + Algo que me toma generalmente hacer es cuando trabajo con maquina virtuales es asignar una cantidad determinada de Swap. La  memoria swap es un espacio de intercambio en disco para cuando el sistema ya no puede utilizar más memoria RAM. El problema para mi es que algunos sistemas de maquinas virtuales no asignan por defecto […]

        La entrada Añadir Swap a un sistema aparece primero en Rodrigo Ramírez Norambuena.

        ]]>
        - Algo que me toma generalmente hacer es cuando trabajo con maquina virtuales es asignar una cantidad determinada de Swap.

        + Algo que me toma generalmente hacer es cuando trabajo con maquina virtuales es asignar una cantidad determinada de Swap.

        La  memoria swap es un espacio de intercambio en disco para cuando el sistema ya no puede utilizar más memoria RAM.

        El problema para mi es que algunos sistemas de maquinas virtuales no asignan por defecto un espacio para la Swap, lo que te lleva a que el sistema pueda tener crash durante la ejecución.

        Para comprobar la asignación de memoria, al ejecutar el comando free nos debería mostrar como algo similar a lo siguiente

        @@ -271,27 +271,27 @@ Swap:         3071          0       3071

         

        La entrada Añadir Swap a un sistema aparece primero en Rodrigo Ramírez Norambuena.

        ]]>
        - https://rodrigoramirez.com/crear-swap/feed/ - 0 -
        - - QPanel 0.10.0 con vista consolidada - https://rodrigoramirez.com/qpanel-0-10-0-vista-consolidada/ - https://rodrigoramirez.com/qpanel-0-10-0-vista-consolidada/#respond - Mon, 20 Jun 2016 19:32:55 +0000 - - - - - - - + https://rodrigoramirez.com/crear-swap/feed/ + 0 + + + QPanel 0.10.0 con vista consolidada + https://rodrigoramirez.com/qpanel-0-10-0-vista-consolidada/ + https://rodrigoramirez.com/qpanel-0-10-0-vista-consolidada/#respond + Mon, 20 Jun 2016 19:32:55 +0000 + + + + + + + - https://rodrigoramirez.com/?p=1227 - Ya con la release numero 28 la nueva versión 0.10.0 de QPanel ya está disponible. Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.10.0 Esta versión versión nos preocupamos de realizar mejoras, refactorizaciones y agregamos una nueva funcionalidad. La nueva funcionalidad incluida es  que ahora es posible contar con una vista consolidada para […]

        + https://rodrigoramirez.com/?p=1227 + Ya con la release numero 28 la nueva versión 0.10.0 de QPanel ya está disponible. Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.10.0 Esta versión versión nos preocupamos de realizar mejoras, refactorizaciones y agregamos una nueva funcionalidad. La nueva funcionalidad incluida es  que ahora es posible contar con una vista consolidada para […]

        La entrada QPanel 0.10.0 con vista consolidada aparece primero en Rodrigo Ramírez Norambuena.

        ]]>
        - Panel monitor callcenter | Qpanel Monitor ColasYa con la release numero 28 la nueva versión 0.10.0 de QPanel ya está disponible.

        + Panel monitor callcenter | Qpanel Monitor ColasYa con la release numero 28 la nueva versión 0.10.0 de QPanel ya está disponible.

        Para instalar esta nueva versión, debes visitar la siguiente URL

        • https://github.com/roramirez/qpanel/tree/0.10.0
        • @@ -301,29 +301,29 @@ Swap:         3071          0       3071

          El proyecto siempre está abierto a nuevas sugerencias las cuales puedes agregar mediante un issue.

          La entrada QPanel 0.10.0 con vista consolidada aparece primero en Rodrigo Ramírez Norambuena.

          ]]> - https://rodrigoramirez.com/qpanel-0-10-0-vista-consolidada/feed/ - 0 - - - Nerdearla 2016, WebRTC Glue - https://rodrigoramirez.com/nerdearla-2016/ - https://rodrigoramirez.com/nerdearla-2016/#respond - Wed, 15 Jun 2016 17:55:41 +0000 - - - - - - - - - + https://rodrigoramirez.com/qpanel-0-10-0-vista-consolidada/feed/ + 0 + + + Nerdearla 2016, WebRTC Glue + https://rodrigoramirez.com/nerdearla-2016/ + https://rodrigoramirez.com/nerdearla-2016/#respond + Wed, 15 Jun 2016 17:55:41 +0000 + + + + + + + + + - https://rodrigoramirez.com/?p=1218 - Días atrás estuve participando en el evento llamado Nerdearla en Buenos Aires.  El ambiente era genial si eres de esas personas que desde niño sintio curiosidad por ver como funcionan las cosas, donde desarmabas para volver armar lo juguetes. Habían muchas cosas interesantes tanto en las presentaciones, co-working y workshop que se hubieron. Si te […]

          + https://rodrigoramirez.com/?p=1218 + Días atrás estuve participando en el evento llamado Nerdearla en Buenos Aires.  El ambiente era genial si eres de esas personas que desde niño sintio curiosidad por ver como funcionan las cosas, donde desarmabas para volver armar lo juguetes. Habían muchas cosas interesantes tanto en las presentaciones, co-working y workshop que se hubieron. Si te […]

          La entrada Nerdearla 2016, WebRTC Glue aparece primero en Rodrigo Ramírez Norambuena.

          ]]>
          - Días atrás estuve participando en el evento llamado Nerdearla en Buenos Aires.  El ambiente era genial si eres de esas personas que desde niño sintio curiosidad por ver como funcionan las cosas, donde desarmabas para volver armar lo juguetes.

          + Días atrás estuve participando en el evento llamado Nerdearla en Buenos Aires.  El ambiente era genial si eres de esas personas que desde niño sintio curiosidad por ver como funcionan las cosas, donde desarmabas para volver armar lo juguetes.

          Habían muchas cosas interesantes tanto en las presentaciones, co-working y workshop que se hubieron. Si te lo perdiste te recomiendo que estés pendiente para el proximo año.

           

          Te podias encontrar con una nuestra como estaKaypro II

          @@ -338,30 +338,30 @@ Swap:         3071          0       3071  

          La entrada Nerdearla 2016, WebRTC Glue aparece primero en Rodrigo Ramírez Norambuena.

          ]]>
          - https://rodrigoramirez.com/nerdearla-2016/feed/ - 0 -
          - - QPanel 0.9.0 - https://rodrigoramirez.com/qpanel-0-9-0/ - https://rodrigoramirez.com/qpanel-0-9-0/#respond - Mon, 09 May 2016 18:40:23 +0000 - - - - - - - - - - + https://rodrigoramirez.com/nerdearla-2016/feed/ + 0 + + + QPanel 0.9.0 + https://rodrigoramirez.com/qpanel-0-9-0/ + https://rodrigoramirez.com/qpanel-0-9-0/#respond + Mon, 09 May 2016 18:40:23 +0000 + + + + + + + + + + - https://rodrigoramirez.com/?p=1206 - El Panel monitor callcenter para colas de Asterisk ya cuenta con una nueva versión, la 0.9.0 Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.9.0 Esta versión versión nos preocupamos de realizar mejoras y refactorizaciones en el codigo para dar un mejor rendimiento, como también de la compatibilidad con la versión 11 de […]

          + https://rodrigoramirez.com/?p=1206 + El Panel monitor callcenter para colas de Asterisk ya cuenta con una nueva versión, la 0.9.0 Para instalar esta nueva versión, debes visitar la siguiente URL https://github.com/roramirez/qpanel/tree/0.9.0 Esta versión versión nos preocupamos de realizar mejoras y refactorizaciones en el codigo para dar un mejor rendimiento, como también de la compatibilidad con la versión 11 de […]

          La entrada QPanel 0.9.0 aparece primero en Rodrigo Ramírez Norambuena.

          ]]>
          - Panel monitor callcenter | Qpanel Monitor ColasEl Panel monitor callcenter para colas de Asterisk ya cuenta con una nueva versión, la 0.9.0

          + Panel monitor callcenter | Qpanel Monitor ColasEl Panel monitor callcenter para colas de Asterisk ya cuenta con una nueva versión, la 0.9.0

          Para instalar esta nueva versión, debes visitar la siguiente URL

          • https://github.com/roramirez/qpanel/tree/0.9.0
          • @@ -376,35 +376,35 @@ Swap:         3071          0       3071

            El proyecto siempre está abierto a nuevas sugerencias las cuales puedes agregar mediante un issue.

            La entrada QPanel 0.9.0 aparece primero en Rodrigo Ramírez Norambuena.

            ]]> - https://rodrigoramirez.com/qpanel-0-9-0/feed/ - 0 - - - Mandar un email desde la shell - https://rodrigoramirez.com/mandar-un-email-desde-la-shell/ - https://rodrigoramirez.com/mandar-un-email-desde-la-shell/#comments - Wed, 13 Apr 2016 13:05:13 +0000 - - - - - - - - - + https://rodrigoramirez.com/qpanel-0-9-0/feed/ + 0 + + + Mandar un email desde la shell + https://rodrigoramirez.com/mandar-un-email-desde-la-shell/ + https://rodrigoramirez.com/mandar-un-email-desde-la-shell/#comments + Wed, 13 Apr 2016 13:05:13 +0000 + + + + + + + + + - https://rodrigoramirez.com/?p=1172 - Dejo esto por acá ya que es algo que siempre me olvido como es. El tema es enviar un email mediante el comando mail en un servidor con Linux. Si usas mail a secas te va pidiendo los datos para crear el correo, principalmente el body del correo. Para automatizar esto a través de un […]

            + https://rodrigoramirez.com/?p=1172 + Dejo esto por acá ya que es algo que siempre me olvido como es. El tema es enviar un email mediante el comando mail en un servidor con Linux. Si usas mail a secas te va pidiendo los datos para crear el correo, principalmente el body del correo. Para automatizar esto a través de un […]

            La entrada Mandar un email desde la shell aparece primero en Rodrigo Ramírez Norambuena.

            ]]>
            - Dejo esto por acá ya que es algo que siempre me olvido como es. El tema es enviar un email mediante el comando mail en un servidor con Linux.

            + Dejo esto por acá ya que es algo que siempre me olvido como es. El tema es enviar un email mediante el comando mail en un servidor con Linux.

            Si usas mail a secas te va pidiendo los datos para crear el correo, principalmente el body del correo. Para automatizar esto a través de un echo le pasas por pipe a mail

            echo "Cuerpo del mensaje" | mail -s Asunto a@rodrigoramirez.com

            La entrada Mandar un email desde la shell aparece primero en Rodrigo Ramírez Norambuena.

            ]]>
            - https://rodrigoramirez.com/mandar-un-email-desde-la-shell/feed/ - 4 -
            - + https://rodrigoramirez.com/mandar-un-email-desde-la-shell/feed/ + 4 + + From aeefe28710504a729516e8108fc540e05427532f Mon Sep 17 00:00:00 2001 From: rejas Date: Tue, 27 Apr 2021 14:13:27 +0200 Subject: [PATCH 07/12] Update jsdoc --- modules/default/alert/notificationFx.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/default/alert/notificationFx.js b/modules/default/alert/notificationFx.js index 9589edcf..0aa2a5c3 100644 --- a/modules/default/alert/notificationFx.js +++ b/modules/default/alert/notificationFx.js @@ -122,6 +122,8 @@ /** * Dismiss the notification + * + * @param close */ NotificationFx.prototype.dismiss = function (close = true) { this.active = false; From d43a57af36b4b375772da1e4661bb74182836b7c Mon Sep 17 00:00:00 2001 From: veeck Date: Sun, 2 May 2021 10:24:22 +0200 Subject: [PATCH 08/12] Refaktor newsfeed error once again for better messaging to the user --- js/node_helper.js | 8 ++++++++ modules/default/newsfeed/newsfeed.js | 7 ++----- modules/default/newsfeed/newsfeedfetcher.js | 2 +- modules/default/newsfeed/node_helper.js | 11 ++++++----- translations/en.json | 3 +++ 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/js/node_helper.js b/js/node_helper.js index 415ae658..3ecca4ce 100644 --- a/js/node_helper.js +++ b/js/node_helper.js @@ -122,6 +122,14 @@ NodeHelper.checkFetchStatus = function (response) { } }; +NodeHelper.checkFetchError = function (error) { + let error_type = "MODULE_ERROR_UNSPECIFIED"; + if (error.code === "EAI_AGAIN") { + error_type = "MODULE_ERROR_NO_CONNECTION"; + } + return error_type; +}; + NodeHelper.create = function (moduleDefinition) { return NodeHelper.extend(moduleDefinition); }; diff --git a/modules/default/newsfeed/newsfeed.js b/modules/default/newsfeed/newsfeed.js index 00b07b81..bc033a19 100644 --- a/modules/default/newsfeed/newsfeed.js +++ b/modules/default/newsfeed/newsfeed.js @@ -89,11 +89,8 @@ Module.register("newsfeed", { this.loaded = true; this.error = null; - } else if (notification === "FETCH_ERROR") { - this.error = `${payload.error}`; - this.scheduleUpdateInterval(); - } else if (notification === "INCORRECT_URL") { - this.error = `Incorrect url: ${payload.url}`; + } else if (notification === "NEWSFEED_ERROR") { + this.error = this.translate(payload.error_type); this.scheduleUpdateInterval(); } }, diff --git a/modules/default/newsfeed/newsfeedfetcher.js b/modules/default/newsfeed/newsfeedfetcher.js index bbfda9e1..6dd8683a 100644 --- a/modules/default/newsfeed/newsfeedfetcher.js +++ b/modules/default/newsfeed/newsfeedfetcher.js @@ -90,7 +90,7 @@ const NewsfeedFetcher = function (url, reloadInterval, encoding, logFeedWarnings response.body.pipe(iconv.decodeStream(encoding)).pipe(parser); }) .catch((error) => { - fetchFailedCallback(this, error.message); + fetchFailedCallback(this, error); scheduleTimer(); }); }; diff --git a/modules/default/newsfeed/node_helper.js b/modules/default/newsfeed/node_helper.js index 926b9d3d..55f403db 100644 --- a/modules/default/newsfeed/node_helper.js +++ b/modules/default/newsfeed/node_helper.js @@ -38,7 +38,8 @@ module.exports = NodeHelper.create({ try { new URL(url); } catch (error) { - this.sendSocketNotification("INCORRECT_URL", { url: url }); + Log.error("Newsfeed Error. Malformed newsfeed url: ", url, error); + this.sendSocketNotification("NEWSFEED_ERROR", { error_type: "MODULE_ERROR_MALFORMED_URL" }); return; } @@ -52,10 +53,10 @@ module.exports = NodeHelper.create({ }); fetcher.onError((fetcher, error) => { - Log.error("Newsfeed Error. Could not fetch newsfeed: ", fetcher.url(), error); - this.sendSocketNotification("FETCH_ERROR", { - url: fetcher.url(), - error: error + Log.error("Newsfeed Error. Could not fetch newsfeed: ", url, error); + let error_type = NodeHelper.checkFetchError(error); + this.sendSocketNotification("NEWSFEED_ERROR", { + error_type }); }); diff --git a/translations/en.json b/translations/en.json index 9710d781..82748e6b 100644 --- a/translations/en.json +++ b/translations/en.json @@ -30,6 +30,9 @@ "MODULE_CONFIG_CHANGED": "The configuration options for the {MODULE_NAME} module have changed.\nPlease check the documentation.", "MODULE_CONFIG_ERROR": "Error in the {MODULE_NAME} module. {ERROR}", + "MODULE_ERROR_MALFORMED_URL": "Malformed url.", + "MODULE_ERROR_NO_CONNECTION": "No internet connection.", + "MODULE_ERROR_UNSPECIFIED": "Check logs for more details.", "UPDATE_NOTIFICATION": "MagicMirror² update available.", "UPDATE_NOTIFICATION_MODULE": "Update available for {MODULE_NAME} module.", From 06b3f9296309707a82164f27035c477f4c12ca13 Mon Sep 17 00:00:00 2001 From: veeck Date: Sun, 2 May 2021 10:28:11 +0200 Subject: [PATCH 09/12] Refaktor calendar error once again for better messaging to the user --- modules/default/calendar/calendar.js | 5 +---- modules/default/calendar/calendarfetcher.js | 4 ++-- modules/default/calendar/node_helper.js | 10 +++++----- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 726d659b..1b356ac4 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -146,12 +146,9 @@ Module.register("calendar", { this.broadcastEvents(); } } - } else if (notification === "FETCH_ERROR") { + } else if (notification === "CALENDAR_ERROR") { this.error = this.translate("MODULE_CONFIG_ERROR", { MODULE_NAME: this.name, ERROR: payload.error }); this.loaded = true; - } else if (notification === "INCORRECT_URL") { - this.error = `Incorrect url: ${payload.url}`; - this.loaded = true; } this.updateDom(this.config.animationSpeed); diff --git a/modules/default/calendar/calendarfetcher.js b/modules/default/calendar/calendarfetcher.js index 02778fd5..805e080b 100644 --- a/modules/default/calendar/calendarfetcher.js +++ b/modules/default/calendar/calendarfetcher.js @@ -78,7 +78,7 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn maximumNumberOfDays }); } catch (error) { - fetchFailedCallback(this, error.message); + fetchFailedCallback(this, error); scheduleTimer(); return; } @@ -86,7 +86,7 @@ const CalendarFetcher = function (url, reloadInterval, excludedEvents, maximumEn scheduleTimer(); }) .catch((error) => { - fetchFailedCallback(this, error.message); + fetchFailedCallback(this, error); scheduleTimer(); }); }; diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index a280ddff..c74b165e 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -40,7 +40,8 @@ module.exports = NodeHelper.create({ try { new URL(url); } catch (error) { - this.sendSocketNotification("INCORRECT_URL", { id: identifier, url: url }); + Log.error("Calendar Error. Malformed calendar url: ", url, error); + this.sendSocketNotification("CALENDAR_ERROR", { error_type: "MODULE_ERROR_MALFORMED_URL" }); return; } @@ -55,10 +56,9 @@ module.exports = NodeHelper.create({ fetcher.onError((fetcher, error) => { Log.error("Calendar Error. Could not fetch calendar: ", fetcher.url(), error); - this.sendSocketNotification("FETCH_ERROR", { - id: identifier, - url: fetcher.url(), - error: error + let error_type = NodeHelper.checkFetchError(error); + this.sendSocketNotification("CALENDAR_ERROR", { + error_type }); }); From 4c8508b0a9320f247052c481df9d5ac631e6c25e Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 2 May 2021 13:09:13 +0200 Subject: [PATCH 10/12] Fix newsfeed test --- tests/e2e/modules/newsfeed_spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/modules/newsfeed_spec.js b/tests/e2e/modules/newsfeed_spec.js index 0a8f505f..fc8c7122 100644 --- a/tests/e2e/modules/newsfeed_spec.js +++ b/tests/e2e/modules/newsfeed_spec.js @@ -66,8 +66,8 @@ describe("Newsfeed module", function () { process.env.MM_CONFIG_FILE = "tests/configs/modules/newsfeed/incorrect_url.js"; }); - it("should show invalid url warning", function () { - return app.client.waitUntilTextExists(".newsfeed .small", "Error in the Newsfeed module. Incorrect url:", 10000); + it("should show malformed url warning", function () { + return app.client.waitUntilTextExists(".newsfeed .small", "Error in the Newsfeed module. Malformed url.", 10000); }); }); }); From bdfd6e5e9f9087e835e4cfc160c935e6d9756584 Mon Sep 17 00:00:00 2001 From: rejas Date: Sun, 2 May 2021 14:43:12 +0200 Subject: [PATCH 11/12] Fix calendar test --- js/node_helper.js | 2 ++ modules/default/calendar/calendar.js | 3 ++- modules/default/calendar/node_helper.js | 1 + tests/e2e/modules/calendar_spec.js | 2 +- translations/en.json | 1 + 5 files changed, 7 insertions(+), 2 deletions(-) diff --git a/js/node_helper.js b/js/node_helper.js index 3ecca4ce..45bd03dd 100644 --- a/js/node_helper.js +++ b/js/node_helper.js @@ -126,6 +126,8 @@ NodeHelper.checkFetchError = function (error) { let error_type = "MODULE_ERROR_UNSPECIFIED"; if (error.code === "EAI_AGAIN") { error_type = "MODULE_ERROR_NO_CONNECTION"; + } else if (error.message === "Unauthorized") { + error_type = "MODULE_ERROR_UNAUTHORIZED"; } return error_type; }; diff --git a/modules/default/calendar/calendar.js b/modules/default/calendar/calendar.js index 1b356ac4..40e43ad2 100755 --- a/modules/default/calendar/calendar.js +++ b/modules/default/calendar/calendar.js @@ -147,7 +147,8 @@ Module.register("calendar", { } } } else if (notification === "CALENDAR_ERROR") { - this.error = this.translate("MODULE_CONFIG_ERROR", { MODULE_NAME: this.name, ERROR: payload.error }); + let error_message = this.translate(payload.error_type); + this.error = this.translate("MODULE_CONFIG_ERROR", { MODULE_NAME: this.name, ERROR: error_message }); this.loaded = true; } diff --git a/modules/default/calendar/node_helper.js b/modules/default/calendar/node_helper.js index c74b165e..5b1a8bad 100644 --- a/modules/default/calendar/node_helper.js +++ b/modules/default/calendar/node_helper.js @@ -58,6 +58,7 @@ module.exports = NodeHelper.create({ Log.error("Calendar Error. Could not fetch calendar: ", fetcher.url(), error); let error_type = NodeHelper.checkFetchError(error); this.sendSocketNotification("CALENDAR_ERROR", { + id: identifier, error_type }); }); diff --git a/tests/e2e/modules/calendar_spec.js b/tests/e2e/modules/calendar_spec.js index edecf4fa..097ce220 100644 --- a/tests/e2e/modules/calendar_spec.js +++ b/tests/e2e/modules/calendar_spec.js @@ -150,7 +150,7 @@ describe("Calendar module", function () { }); it("should show Unauthorized error", function () { - return app.client.waitUntilTextExists(".calendar", "Error in the calendar module. Unauthorized", 10000); + return app.client.waitUntilTextExists(".calendar", "Error in the calendar module. Authorization failed", 10000); }); }); }); diff --git a/translations/en.json b/translations/en.json index 82748e6b..5959fc82 100644 --- a/translations/en.json +++ b/translations/en.json @@ -32,6 +32,7 @@ "MODULE_CONFIG_ERROR": "Error in the {MODULE_NAME} module. {ERROR}", "MODULE_ERROR_MALFORMED_URL": "Malformed url.", "MODULE_ERROR_NO_CONNECTION": "No internet connection.", + "MODULE_ERROR_UNAUTHORIZED": "Authorization failed.", "MODULE_ERROR_UNSPECIFIED": "Check logs for more details.", "UPDATE_NOTIFICATION": "MagicMirror² update available.", From 4b1c7da171ebf3dfa8529be7e7d55f44e815608d Mon Sep 17 00:00:00 2001 From: rejas Date: Sat, 15 May 2021 14:49:04 +0200 Subject: [PATCH 12/12] Update jsdoc --- js/node_helper.js | 7 ++++++ modules/default/alert/notificationFx.js | 2 +- modules/default/calendar/calendarutils.js | 26 ++++++++++++++-------- modules/default/compliments/compliments.js | 2 +- modules/default/newsfeed/node_helper.js | 4 ++-- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/js/node_helper.js b/js/node_helper.js index 45bd03dd..86ad3aa4 100644 --- a/js/node_helper.js +++ b/js/node_helper.js @@ -122,6 +122,13 @@ NodeHelper.checkFetchStatus = function (response) { } }; +/** + * Look at the specified error and return an appropriate error type, that + * can be translated to a detailed error message + * + * @param {Error} error the error from fetching something + * @returns {string} the string of the detailed error message in the translations + */ NodeHelper.checkFetchError = function (error) { let error_type = "MODULE_ERROR_UNSPECIFIED"; if (error.code === "EAI_AGAIN") { diff --git a/modules/default/alert/notificationFx.js b/modules/default/alert/notificationFx.js index 0aa2a5c3..317fa75a 100644 --- a/modules/default/alert/notificationFx.js +++ b/modules/default/alert/notificationFx.js @@ -123,7 +123,7 @@ /** * Dismiss the notification * - * @param close + * @param {boolean} [close] call the onClose callback at the end */ NotificationFx.prototype.dismiss = function (close = true) { this.active = false; diff --git a/modules/default/calendar/calendarutils.js b/modules/default/calendar/calendarutils.js index 223dfb26..7f0b14b8 100644 --- a/modules/default/calendar/calendarutils.js +++ b/modules/default/calendar/calendarutils.js @@ -18,8 +18,8 @@ const CalendarUtils = { * Calculate the time correction, either dst/std or full day in cases where * utc time is day before plus offset * - * @param {object} event - * @param {Date} date + * @param {object} event the event which needs adjustement + * @param {Date} date the date on which this event happens * @returns {number} the necessary adjustment in hours */ calculateTimezoneAdjustment: function (event, date) { @@ -117,6 +117,13 @@ const CalendarUtils = { return adjustHours; }, + /** + * Filter the events from ical according to the given config + * + * @param {object} data the calendar data from ical + * @param {object} config The configuration object + * @returns {string[]} the filtered events + */ filterEvents: function (data, config) { const newEvents = []; @@ -500,8 +507,8 @@ const CalendarUtils = { /** * Lookup iana tz from windows * - * @param msTZName - * @returns {*|null} + * @param {string} msTZName the timezone name to lookup + * @returns {string|null} the iana name or null of none is found */ getIanaTZFromMS: function (msTZName) { // Get hash entry @@ -571,12 +578,13 @@ const CalendarUtils = { }, /** + * Determines if the user defined title filter should apply * - * @param title - * @param filter - * @param useRegex - * @param regexFlags - * @returns {boolean|*} + * @param {string} title the title of the event + * @param {string} filter the string to look for, can be a regex also + * @param {boolean} useRegex true if a regex should be used, otherwise it just looks for the filter as a string + * @param {string} regexFlags flags that should be applied to the regex + * @returns {boolean} True if the title should be filtered out, false otherwise */ titleFilterApplies: function (title, filter, useRegex, regexFlags) { if (useRegex) { diff --git a/modules/default/compliments/compliments.js b/modules/default/compliments/compliments.js index fc90527f..054a409f 100644 --- a/modules/default/compliments/compliments.js +++ b/modules/default/compliments/compliments.js @@ -55,7 +55,7 @@ Module.register("compliments", { /** * Generate a random index for a list of compliments. * - * @param {string[]} compliments Array with compliments. + * @param {string[]} compliments Array with compliments. * @returns {number} a random index of given array */ randomIndex: function (compliments) { diff --git a/modules/default/newsfeed/node_helper.js b/modules/default/newsfeed/node_helper.js index 55f403db..32656a9f 100644 --- a/modules/default/newsfeed/node_helper.js +++ b/modules/default/newsfeed/node_helper.js @@ -27,8 +27,8 @@ module.exports = NodeHelper.create({ * Creates a fetcher for a new feed if it doesn't exist yet. * Otherwise it reuses the existing one. * - * @param {object} feed The feed object. - * @param {object} config The configuration object. + * @param {object} feed The feed object + * @param {object} config The configuration object */ createFetcher: function (feed, config) { const url = feed.url || "";