57 lines
No EOL
2.5 KiB
TypeScript
57 lines
No EOL
2.5 KiB
TypeScript
import LayoutConfig from "../Customizations/JSON/LayoutConfig";
|
|
import {OsmPreferences} from "./Osm/OsmPreferences";
|
|
import {UIEventSource} from "./UIEventSource";
|
|
import {OsmConnection} from "./Osm/OsmConnection";
|
|
|
|
export default class InstalledThemes {
|
|
|
|
private static DeleteInvalid(osmConnection: OsmConnection, invalidThemes: any[]){
|
|
// for (const invalid of invalidThemes) {
|
|
// console.error("Attempting to remove ", invalid)
|
|
// osmConnection.GetLongPreference(
|
|
// "installed-theme-" + invalid
|
|
// ).setData(null);
|
|
// }
|
|
}
|
|
|
|
static InstalledThemes(osmConnection: OsmConnection) : UIEventSource<{ layout: LayoutConfig; definition: string }[]>{
|
|
return osmConnection.preferencesHandler.preferences.map<{ layout: LayoutConfig, definition: string }[]>(allPreferences => {
|
|
const installedThemes: { layout: LayoutConfig, definition: string }[] = [];
|
|
if (allPreferences === undefined) {
|
|
console.log("All prefs is undefined");
|
|
return installedThemes;
|
|
}
|
|
const invalidThemes = []
|
|
for (var allPreferencesKey in allPreferences) {
|
|
const themename = allPreferencesKey.match(/^mapcomplete-installed-theme-(.*)-combined-length$/);
|
|
if (themename && themename[1] !== "") {
|
|
const customLayout = osmConnection.GetLongPreference("installed-theme-" + themename[1]);
|
|
if (customLayout.data === undefined) {
|
|
console.log("No data defined for ", themename[1]);
|
|
continue;
|
|
}
|
|
try {
|
|
var json = atob(customLayout.data);
|
|
console.log("Found a theme:",json);
|
|
const layout = new LayoutConfig(
|
|
JSON.parse(json));
|
|
installedThemes.push({
|
|
layout: layout,
|
|
definition: customLayout.data
|
|
});
|
|
} catch (e) {
|
|
console.warn("Could not parse custom layout from preferences - deleting: ", allPreferencesKey, e, customLayout.data);
|
|
invalidThemes.push(themename[1])
|
|
}
|
|
}
|
|
}
|
|
|
|
InstalledThemes.DeleteInvalid(osmConnection, invalidThemes);
|
|
|
|
return installedThemes;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
} |