Skip to content

Instantly share code, notes, and snippets.

@Sillium
Last active March 1, 2023 13:41
Show Gist options
  • Select an option

  • Save Sillium/313164aec3d835c076ebfcd330f1be14 to your computer and use it in GitHub Desktop.

Select an option

Save Sillium/313164aec3d835c076ebfcd330f1be14 to your computer and use it in GitHub Desktop.
Telekom Data Usage - iOS 14 Widget for Scriptable app
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: pink; icon-glyph: exchange-alt;
const DEBUG = false
const log = DEBUG ? console.log.bind(console) : function () { };
// configure the library
const libraryInfo = {
name: 'TelekomDataUsageLibrary',
version: '1.0.3',
gitlabProject: 'https://gitlab.com/sillium-scriptable-projects/universal-scriptable-widget-libraries',
forceDownload: DEBUG
}
// download and import library
let library = importModule(await downloadLibrary(libraryInfo))
// create the widget
const params = {
widgetParameter: args.widgetParameter,
debug: DEBUG
}
const widget = await library.createWidget(params)
// preview the widget
if (!config.runsInWidget) {
await widget.presentSmall()
}
Script.setWidget(widget)
Script.complete()
/**
* - creates directory for library if not existing
* - downloads library file if not existing or forced
* - returns relative path to library module
* @param {{name: string, version: string, gitlabProject: string, forceDownload: bool}} library
*/
async function downloadLibrary(library) {
let fm = FileManager.local()
let scriptPath = module.filename
let libraryDir = scriptPath.replace(fm.fileName(scriptPath, true), fm.fileName(scriptPath, false))
if (fm.fileExists(libraryDir) && !fm.isDirectory(libraryDir)) {
fm.remove(libraryDir)
}
if (!fm.fileExists(libraryDir)) {
fm.createDirectory(libraryDir)
}
let libraryFilename = library.name + '_' + library.version + '.js'
let path = fm.joinPath(libraryDir, libraryFilename)
let forceDownload = (library.forceDownload) ? library.forceDownload : false
if (fm.fileExists(path) && !forceDownload) {
log("Not downloading library file")
} else {
let r = Math.random().toString(36).substring(7);
let libraryUrl = library.gitlabProject + '/-/raw/' + library.version + '/' + library.name + '.js?random=' + r
log("Downloading library file '" + libraryUrl + "' to '" + path + "'")
const req = new Request(libraryUrl)
let libraryFile = await req.load()
fm.write(path, libraryFile)
}
return fm.fileName(scriptPath, false) + '/' + libraryFilename
}
@chimcen

chimcen commented Nov 20, 2020

Copy link
Copy Markdown

Perfekt, danke 🤩

@Sillium

Sillium commented Nov 20, 2020

Copy link
Copy Markdown
Author

Kannst du mal bitte ein Video machen und zeigen wie das geht mit Congstar wäre nett

https://photos.app.goo.gl/Vj2VM3MBzTWcPmdu6

@xILuigi

xILuigi commented Nov 20, 2020

Copy link
Copy Markdown

Jetzt geht es echt aufwändig sowas oder?😅 Und ich danke dir dafür echt! Danke für deine Zeit das du sowas machst echt korrekt! Bleib Gesund

@Sillium

Sillium commented Nov 20, 2020

Copy link
Copy Markdown
Author

Es war noch ein Fehler mit der Anzeige bei "Verbraucht"/"Verfügbar" drin, der jetzt behoben ist. Im Script in Scriptable in Zeile 7 (hier oben im Gist Zeile 10) einmal die Version auf 1.0.3 ändern, einmal ohne WLAN ausführen und danach sollte es funktionieren.

ghost commented Nov 20, 2020

Copy link
Copy Markdown

Ich weiss nicht wo dieses:

Enter parameter in this format: language;whatToShow;look

language: de or en
whatToShow: used or available
look: telekom, congstar, fraenk, black, gray or white
Examples: de;used;telekom or en;available;gray

Hier eingesetzt werden kann:

**_// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: pink; icon-glyph: exchange-alt;
const DEBUG = false
const log = DEBUG ? console.log.bind(console) : function () { };

// configure the library
const libraryInfo = {
name: 'TelekomDataUsageLibrary',
version: '1.0.2',
gitlabProject: 'https://gitlab.com/sillium-scriptable-projects/universal-scriptable-widget-libraries',
forceDownload: DEBUG
}

// download and import library
let library = importModule(await downloadLibrary(libraryInfo))

// create the widget
const params = {
widgetParameter: args.widgetParameter,
debug: DEBUG
}
const widget = await library.createWidget(params)

// preview the widget
if (!config.runsInWidget) {
await widget.presentSmall()
}

Script.setWidget(widget)
Script.complete()

/**

    • creates directory for library if not existing
    • downloads library file if not existing or forced
    • returns relative path to library module
  • @param {{name: string, version: string, gitlabProject: string, forceDownload: bool}} library
    */
    async function downloadLibrary(library) {
    let fm = FileManager.local()

    let scriptPath = module.filename
    let libraryDir = scriptPath.replace(fm.fileName(scriptPath, true), fm.fileName(scriptPath, false))

    if (fm.fileExists(libraryDir) && !fm.isDirectory(libraryDir)) {
    fm.remove(libraryDir)
    }
    if (!fm.fileExists(libraryDir)) {
    fm.createDirectory(libraryDir)
    }
    let libraryFilename = library.name + '_' + library.version + '.js'
    let path = fm.joinPath(libraryDir, libraryFilename)

    let forceDownload = (library.forceDownload) ? library.forceDownload : false
    if (fm.fileExists(path) && !forceDownload) {
    log("Not downloading library file")
    } else {
    let r = Math.random().toString(36).substring(7);
    let libraryUrl = library.gitlabProject + '/-/raw/' + library.version + '/' + library.name + '.js?random=' + r
    log("Downloading library file '" + libraryUrl + "' to '" + path + "'")
    const req = new Request(libraryUrl)
    let libraryFile = await req.load()
    fm.write(path, libraryFile)
    }

    return fm.fileName(scriptPath, false) + '/' + libraryFilename
    }_**

@Sillium

Sillium commented Nov 20, 2020

Copy link
Copy Markdown
Author

Nicht im Code, sondern in der Konfiguration des Widgets. Siehe allerletzter Screenshot hier:

IMG_0770

ghost commented Nov 20, 2020

Copy link
Copy Markdown

Sorry- aber jetzt habe ich es auch kapiert... Vielen vielen Dank für die Mühen...

@Sillium

Sillium commented Nov 20, 2020

Copy link
Copy Markdown
Author

Sorry- aber jetzt habe ich es auch kapiert... Vielen vielen Dank für die Mühen...

👍

Am besten in Zeile 7 (jetzt tatsächlich im Code) mal die Version ändern von 1.0.2 auf 1.0.3.

ghost commented Nov 20, 2020

Copy link
Copy Markdown

Was ändert sich durch die Änderung der Version wenn ich das editiere?

@Sillium

Sillium commented Nov 20, 2020

Copy link
Copy Markdown
Author

In 1.0.2 war evtl. ein Fehler drin, der dafür sorgt, dass immer 0,94 GB angezeigt wird bei "verfügbar"/"verbraucht". Wenn bei Dir alle Zahlen stimmen, brauchst Du nichts ändern.

@nicoh88

nicoh88 commented Nov 27, 2020

Copy link
Copy Markdown

@Sillium

Vielen Dank dafür!
Machst du es Design- und Logo-Technisch noch für Klarmobil.de? 🤩

EDA126ED-056B-4D5F-A318-1FFC340B6581

@xILuigi

xILuigi commented Nov 28, 2020

Copy link
Copy Markdown

Bei mir steht jetzt API offline? Ist das schlimm? Und wenn der Monat vorbei ist. Geht es dann wieder im Dezember oder ist da ein Fehler?

@nicoh88

nicoh88 commented Nov 29, 2020

Copy link
Copy Markdown

@xILuigi

Wenn du dich im WLAN befindest ist das Normal. Da im WLAN nicht der Datenverbrauch der SIM-Karte abgerufen werden kann. Solange du dich im WLAN befindest, werden die Werte aus dem Cache gezeigt.

Viele Grüße

@frankreckt

Copy link
Copy Markdown

Was noch cool wäre: Wenn das Widget mit unlimited Daten umgehen könnte. Im Inland hab ich ne Datenflat, so dass das Widget eigentlich nicht interessant ist, aber im Ausland (54GB) schon. Es wäre schön, wenn dann im Inland anstelle von NaN etwas sinnvolles stehen würde

@Sillium

Sillium commented Dec 7, 2020

Copy link
Copy Markdown
Author

@Sillium

Vielen Dank dafür!
Machst du es Design- und Logo-Technisch noch für Klarmobil.de? 🤩

EDA126ED-056B-4D5F-A318-1FFC340B6581

Gucke ich mir bei Gelegenheit an, ja

ghost commented Dec 23, 2020

Copy link
Copy Markdown

@Sillium

Erstmal vielen Dank für die tolle Arbeit. Leider aktualisiert sich das Widget nicht selbstständig im Mobilfunknetz. Hab für 15 min WLAN abgeschaltet aber das Widget bleibt ausgegraut. Hast du eine Idee voran es liegen könnte?

@powershot1

Copy link
Copy Markdown

@xILuigi

Wenn du dich im WLAN befindest ist das Normal. Da im WLAN nicht der Datenverbrauch der SIM-Karte abgerufen werden kann. Solange du dich im WLAN befindest, werden die Werte aus dem Cache gezeigt.

Viele Grüße

Aber das Congstar eigene Widget zeigt den aktuellen Verbrauch auch im WLAN an. Kann man da nicht irgendwo die Daten abgreifen?

@mahony85

mahony85 commented Jan 5, 2021

Copy link
Copy Markdown

Hallo zusammen
Erstmal Danke für das tolle widget Beschreibungen und Erklärungen. Kann jemand vielleicht das gleiche widget für Minuten statt datenvolumen einrichten zB für auslands telefonate
Vieleb dank im Voraus

@19Domingo87

Copy link
Copy Markdown

Hallo,
vielen Dank für das geniale Widget.
Woher bzw. wie wird das Telekom-Logo erzeugt?
Gruß

@toddy1986

toddy1986 commented Jul 29, 2021

Copy link
Copy Markdown

Erhalte Fehlermeldung

457AFDCA-3047-460F-9B8F-3DCBD3BAA08E

@20CCAA07

Copy link
Copy Markdown

Erhalte Fehlermeldung

Diese Fehlermeldung hatte ich seit gestern auch. Ich habe dann den Ordner "TelekomDataUsage" im iCloud Drive gelöscht und das Widget in Scriptable noch mal neu ausgeführt. Seitdem ist alles wieder in Ordnung.

@toddy1986

Copy link
Copy Markdown

Erhalte Fehlermeldung

Diese Fehlermeldung hatte ich seit gestern auch. Ich habe dann den Ordner "TelekomDataUsage" im iCloud Drive gelöscht und das Widget in Scriptable noch mal neu ausgeführt. Seitdem ist alles wieder in Ordnung.

Danke, das hat geholfen.

@cars11

cars11 commented Oct 2, 2021

Copy link
Copy Markdown

Statt dass mit wlan an api offline angezeigt wird, was ja nicht stimmt, wäre besser das wlan mit ausrufezeichen symbok anzuzeigen. Das andere telekom Skript kann das. Außerdem aktualisert es bei mir nicht mehr wenn ich aus wlan raus bin :(
Sonst aber top!
0458644B-432A-4B58-A2CE-54633AA92081

@Piwio

Piwio commented May 16, 2022

Copy link
Copy Markdown

E7712C7D-B672-4CA9-83A5-7B737D25281E

Bekomme seit ein paar Tagen folgenden Fehler.
Schon bekannt? Kann man da was machen?
Danke und Lg!

@Piwio

Piwio commented May 21, 2022

Copy link
Copy Markdown

Erhalte Fehlermeldung

Diese Fehlermeldung hatte ich seit gestern auch. Ich habe dann den Ordner "TelekomDataUsage" im iCloud Drive gelöscht und das Widget in Scriptable noch mal neu ausgeführt. Seitdem ist alles wieder in Ordnung.

Danke, das hat geholfen.

Hilft bei mir leider nur kurzfristig…
Scheint irgendwas anderes fehlerhaft zu sein :-/

@Funterrain

Copy link
Copy Markdown

Seit ein paar Tagen bekomme ich folgende Meldung:
2022-06-23 09:05:39: Error on line 16:27: No file to import at Telekom/TelekomDataUsageLibrary_1.0.3.

Was kann ich tun?

@hstoerk

hstoerk commented Jun 24, 2022

Copy link
Copy Markdown

Ich habe nicht wirklich Zeit, mich drum zu kümmern, aber beim Fehler "Error on line 16:27: No file to import at Telekom/TelekomDataUsageLibrary_1.0.3." probiert mal bitte, die Zeile 12 zu ändern von forceDownload: DEBUG nach forceDownload: true.

@Funterrain

Copy link
Copy Markdown

das klappt leider auch nicht

@Funterrain

Copy link
Copy Markdown

2022-06-26 16:18:05: telekom.png is stored in iCloud but the file have not been downloaded. Use downloadFileFromiCloud(filePath) on a FileManager to download the file before accessing it.
2022-06-26 16:18:05: Error on line 191:44: Expected value of type Image but got value of type null.

@Sillium

Sillium commented Jul 5, 2022

Copy link
Copy Markdown
Author

Ich habe nicht wirklich Zeit, aber hier ist eine neue Version, die ein paar Fehler beheben sollte: https://gist.github.com/Sillium/235dc9fd873b25e321b3299da64c9c38

Bitte unbedingt einmal den Folder iCloud Drive --> Scriptable --> löschen, oder wie auch immer ihr das Script bei euch genannt habt.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment