Skip to content

Instantly share code, notes, and snippets.

@Sillium
Last active March 1, 2023 13:41
Show Gist options
  • Star 21 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save Sillium/313164aec3d835c076ebfcd330f1be14 to your computer and use it in GitHub Desktop.
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
Copy link

chimcen commented Nov 20, 2020

Perfekt, danke 🤩

@Sillium
Copy link
Author

Sillium commented Nov 20, 2020

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

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

@xILuigi
Copy link

xILuigi commented Nov 20, 2020

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
Copy link
Author

Sillium commented Nov 20, 2020

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.

Copy link

ghost commented Nov 20, 2020

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
Copy link
Author

Sillium commented Nov 20, 2020

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

IMG_0770

Copy link

ghost commented Nov 20, 2020

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

@Sillium
Copy link
Author

Sillium commented Nov 20, 2020

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.

Copy link

ghost commented Nov 20, 2020

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

@Sillium
Copy link
Author

Sillium commented Nov 20, 2020

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
Copy link

nicoh88 commented Nov 27, 2020

@Sillium

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

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

@xILuigi
Copy link

xILuigi commented Nov 28, 2020

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
Copy link

nicoh88 commented Nov 29, 2020

@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

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
Copy link
Author

Sillium commented Dec 7, 2020

@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

Copy link

ghost commented Dec 23, 2020

@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

@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
Copy link

mahony85 commented Jan 5, 2021

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

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

@toddy1986
Copy link

toddy1986 commented Jul 29, 2021

Erhalte Fehlermeldung

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

@20CCAA07
Copy link

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

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
Copy link

cars11 commented Oct 2, 2021

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
Copy link

Piwio commented May 16, 2022

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

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

@Piwio
Copy link

Piwio commented May 21, 2022

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

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
Copy link

hstoerk commented Jun 24, 2022

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

das klappt leider auch nicht

@Funterrain
Copy link

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
Copy link
Author

Sillium commented Jul 5, 2022

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