Andreas Rozek
[ Impressum ]   [ Datenschutzerklärung ]   [ Kontakt ]   [ ]

Liste aller Dateien

Bangle.js Liste aller Dateien

Die Bangle.js verfügt über ein einfaches internes Dateisystem für Anwendungen und zugehörige Dateien mit folgenden Eigenschaften:

  • Dateinamen dürfen max. 8 Zeichen lang sein
    (Dateien variabler Größe nutzen das letzte Zeichen des Dateinamens für interne Zwecke, dadurch reduziert sich dessen maximale Länge auf 7)
  • das erste Zeichen hat vereinbarungsgemäß eine Sonderbedeutung für Anwendungen und zugehörige Dateien (siehe Github)
    • +xxx enthält den Deskriptor für die Anwendung "xxx"
    • *xxx enthält ein Icon für die Anwendung "xxx"
    • -xxx enthält den Quelltext der Anwendung "xxx"
    • =xxx enthält Quelltext, der gleich nach einem Neustart laufen soll
  • Ordner werden nicht unterstützt, das Dateisystem ist also "flach"

Eine Liste aller Dateien auf einer angeschlossenen Uhr erhalten Sie von der IDE aus mittels

const Storage = require('Storage');

print('compacting internal Storage...');
Storage.compact();
print('internal Storage report:');
print('-',Storage.getFree(),'bytes free');
print('- list of stored files');
let FileList = Storage.list();
for (let i = 0, l = FileList.length; i < l; i++) {
print(' -',FileList[i].replace(/[\x00-\x1F\x7F-\x9F]/g, function (Match) {
let CharCode = Match.charCodeAt(0);
return '\\x' + (CharCode < 16 ? '0' : '') + CharCode.toString(16);
}));
}
print('done');
auf Uhr ausführen

Das interne Dateisystem wird vom Emulator derzeit nicht unterstützt.

Die im oben gezeigten Beispiel auf den ersten Blick seltsam erscheinende replace-Operation auf den gelieferten Dateinamen ist der Tatsache geschuldet, dass Bangle.js den Namen von Dateien variabler Länge am Ende ein Zeichen zur Kennung des jeweiligen Dateisegmentes anhängt, und dieses Zeichen auch nicht-druckbar sein kann.

Falls Sie nur an den Namen der "logischen" Dateien interessiert sind, ist folgendes Skript angebrachter:

const Storage = require('Storage');

print('compacting internal Storage...');
Storage.compact();
print('internal Storage report:');
print('-',Storage.getFree(),'bytes free');
print('- list of stored files');
let FileList = Storage.list();

let segmentedFileSet = Object.create(null);
for (let i = 0, l = FileList.length; i < l; i++) {
let FileName = FileList[i];
if (/\x01$/.test(FileName)) {
segmentedFileSet[FileName.replace(/.$/,'')] = true;
}
}

for (let i = FileList.length-1; i >= 0; i--) {
let FileName = FileList[i];
if (FileName.slice(0,FileName.length-1) in segmentedFileSet) {
FileList.splice(i,1);
}
}
for (let FileName in segmentedFileSet) {
FileList.push(FileName);
}

for (let i = 0, l = FileList.length; i < l; i++) {
print(' -',FileList[i].replace(/[\x00-\x1F\x7F-\x9F]/g, function (Match) {
let CharCode = Match.charCodeAt(0);
return '\\x' + (CharCode < 16 ? '0' : '') + CharCode.toString(16);
}));
}
print('done');