70 lines
1.6 KiB
JavaScript
70 lines
1.6 KiB
JavaScript
import Service from '@ember/service';
|
|
import RemoteStorage from 'remotestoragejs';
|
|
import Places from '@remotestorage/module-places';
|
|
import Widget from 'remotestorage-widget';
|
|
import { tracked } from '@glimmer/tracking';
|
|
|
|
export default class StorageService extends Service {
|
|
rs;
|
|
@tracked savedPlaces = [];
|
|
@tracked version = 0; // Shared version tracker for bookmarks
|
|
|
|
constructor() {
|
|
super(...arguments);
|
|
console.log('ohai');
|
|
|
|
this.rs = new RemoteStorage({
|
|
modules: [Places],
|
|
});
|
|
|
|
this.rs.access.claim('places', 'rw');
|
|
this.rs.caching.enable('/places/');
|
|
|
|
window.remoteStorage = this.rs;
|
|
|
|
// const widget = new Widget(this.rs);
|
|
// widget.attach();
|
|
|
|
this.rs.on('ready', () => {
|
|
this.loadAllPlaces();
|
|
});
|
|
|
|
this.rs.scope('/places/').on('change', () => {
|
|
this.loadAllPlaces();
|
|
});
|
|
}
|
|
|
|
get places() {
|
|
return this.rs.places;
|
|
}
|
|
|
|
notifyChange() {
|
|
this.version++;
|
|
this.loadAllPlaces();
|
|
}
|
|
|
|
async loadAllPlaces() {
|
|
try {
|
|
const places = await this.rs.places.listAll();
|
|
if (places && Array.isArray(places)) {
|
|
this.savedPlaces = places;
|
|
} else {
|
|
this.savedPlaces = [];
|
|
}
|
|
console.log('Loaded saved places:', this.savedPlaces.length);
|
|
} catch (e) {
|
|
console.error('Failed to load places:', e);
|
|
}
|
|
}
|
|
|
|
findPlaceById(id) {
|
|
// Search by internal ID first
|
|
let place = this.savedPlaces.find((p) => p.id === id);
|
|
if (place) return place;
|
|
|
|
// Then search by OSM ID
|
|
place = this.savedPlaces.find((p) => p.osmId === id);
|
|
return place;
|
|
}
|
|
}
|