forked from MapComplete/MapComplete
		
	Merge branch 'develop'
This commit is contained in:
		
						commit
						56c53df1dc
					
				
					 3 changed files with 63 additions and 41 deletions
				
			
		
							
								
								
									
										60
									
								
								Logic/InstalledThemes.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Logic/InstalledThemes.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| 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 }[] = []; | ||||
|             console.log("UPdating the installed themes") | ||||
|             console.log("All preferences are ",allPreferences) | ||||
|             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$/); | ||||
|                 console.log("Preference key match:",themename," for key ",allPreferencesKey); | ||||
|                 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(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; | ||||
| 
 | ||||
|         }); | ||||
| 
 | ||||
|     } | ||||
|      | ||||
| } | ||||
							
								
								
									
										43
									
								
								State.ts
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								State.ts
									
										
									
									
									
								
							|  | @ -14,6 +14,7 @@ import {BaseLayer} from "./Logic/BaseLayer"; | |||
| import LayoutConfig from "./Customizations/JSON/LayoutConfig"; | ||||
| import Hash from "./Logic/Web/Hash"; | ||||
| import {MangroveIdentity} from "./Logic/Web/MangroveReviews"; | ||||
| import InstalledThemes from "./Logic/InstalledThemes"; | ||||
| 
 | ||||
| /** | ||||
|  * Contains the global state: a bunch of UI-event sources | ||||
|  | @ -233,47 +234,7 @@ export default class State { | |||
|         }) | ||||
| 
 | ||||
| 
 | ||||
|         this.installedThemes = this.osmConnection.preferencesHandler.preferences.map<{ layout: LayoutConfig, definition: string }[]>(allPreferences => { | ||||
|             const installedThemes: { layout: LayoutConfig, definition: string }[] = []; | ||||
|             if (allPreferences === undefined) { | ||||
|                 return installedThemes; | ||||
|             } | ||||
|             const invalidThemes = [] | ||||
|             for (const allPreferencesKey in allPreferences) { | ||||
|                 const themename = allPreferencesKey.match(/^mapcomplete-installed-theme-(.*)-combined-length$/); | ||||
|                 if (themename && themename[1] !== "") { | ||||
|                     const customLayout = self.osmConnection.GetLongPreference("installed-theme-" + themename[1]); | ||||
|                     if (customLayout.data === undefined) { | ||||
|                         console.log("No data defined for ", themename[1]); | ||||
|                         continue; | ||||
|                     } | ||||
|                     try { | ||||
|                         const json = btoa(customLayout.data); | ||||
|                         console.log(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]) | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             for (const invalid of invalidThemes) { | ||||
|                 console.error("Attempting to remove ", invalid) | ||||
|                 this.osmConnection.GetLongPreference( | ||||
|                     "installed-theme-" + invalid | ||||
|                 ).setData(null); | ||||
|             } | ||||
| 
 | ||||
|             return installedThemes; | ||||
| 
 | ||||
|         }); | ||||
| 
 | ||||
|         this.installedThemes = InstalledThemes.InstalledThemes(this.osmConnection ); | ||||
| 
 | ||||
|         // IMportant: the favourite layers are initiliazed _after_ the installed themes, as these might contain an installedTheme
 | ||||
|         this.favouriteLayers = this.osmConnection.GetLongPreference("favouriteLayers").map( | ||||
|  |  | |||
|  | @ -100,6 +100,7 @@ export class MoreScreen extends UIElement { | |||
| 
 | ||||
| 
 | ||||
|         const customThemesNames = State.state.installedThemes.data ?? []; | ||||
|          | ||||
|         if (customThemesNames.length > 0) { | ||||
|             els.push(Translations.t.general.customThemeIntro) | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue