track-list.localstorage.js (3099B)
1 import './track-list'; 2 import L from 'leaflet'; 3 import {parseNktkSequence} from './lib/parsers/nktk'; 4 import safeLocalStorage from '~/lib/safe-localstorage'; 5 import * as logging from '~/lib/logging'; 6 7 L.Control.TrackList.include({ 8 maxLocalStorageSessions: 5, 9 10 saveTracksToStorage: function() { 11 var tracks = this.tracks(), 12 serialized = [], 13 maxKey = -1, 14 i, track, s, key, m, 15 keys = []; 16 17 for (i = 0; i < safeLocalStorage.length; i++) { 18 key = safeLocalStorage.key(i); 19 m = key.match(/^trackList_(\d+)$/u); 20 if (m && m[1] !== undefined) { 21 if (Number(m[1]) > maxKey) { 22 maxKey = Number(m[1]); 23 } 24 } 25 } 26 key = 'trackList_' + (maxKey + 1); 27 28 if (tracks.length === 0) { 29 safeLocalStorage.setItem(key, ''); 30 return; 31 } 32 for (i = 0; i < tracks.length; i++) { 33 track = tracks[i]; 34 s = this.trackToString(track); 35 serialized.push(s); 36 } 37 if (serialized.length === 0) { 38 return; 39 } 40 s = '#nktk=' + serialized.join('/'); 41 42 safeLocalStorage.setItem(key, s); 43 44 // cleanup stale records 45 for (i = 0; i < safeLocalStorage.length; i++) { 46 key = safeLocalStorage.key(i); 47 m = key.match(/^trackList_(\d+)$/u); 48 if (m && m[1] !== undefined) { 49 keys.push(Number(m[1])); 50 } 51 } 52 if (keys.length > this.maxLocalStorageSessions) { 53 keys.sort(function(a, b) { 54 return a - b; 55 } 56 ); 57 for (i = 0; i < keys.length - this.maxLocalStorageSessions; i++) { 58 key = 'trackList_' + keys[i]; 59 safeLocalStorage.removeItem(key); 60 } 61 } 62 }, 63 64 loadTracksFromStorage: function() { 65 var i, key, m, s, 66 geodata, 67 maxKey = -1; 68 69 for (i = 0; i < safeLocalStorage.length; i++) { 70 key = safeLocalStorage.key(i); 71 m = key.match(/^trackList_(\d+)$/u); 72 if (m && m[1] !== undefined) { 73 if (Number(m[1]) > maxKey) { 74 maxKey = Number(m[1]); 75 } 76 } 77 } 78 if (maxKey > -1) { 79 key = 'trackList_' + maxKey; 80 s = safeLocalStorage.getItem(key); 81 safeLocalStorage.removeItem(key); 82 if (s) { 83 logging.captureBreadcrumb('load track from localStorage'); 84 s = s.slice(6); // remove "#nktk=" prefix 85 geodata = parseNktkSequence(s); 86 this.addTracksFromGeodataArray(geodata); 87 } 88 } 89 } 90 } 91 );