incyclist-services 1.1.75 → 1.1.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/lib/api/repository/json/index.d.ts +1 -0
  2. package/lib/api/repository/json/index.js +5 -0
  3. package/lib/base/cardlist/index.d.ts +2 -0
  4. package/lib/base/types/observer.d.ts +1 -0
  5. package/lib/base/types/observer.js +12 -4
  6. package/lib/i18n/countries/index.d.ts +2 -1
  7. package/lib/i18n/countries/index.js +12 -4
  8. package/lib/routes/base/parsers/gpx.d.ts +1 -0
  9. package/lib/routes/base/parsers/gpx.js +27 -2
  10. package/lib/routes/base/parsers/utils.js +7 -2
  11. package/lib/routes/base/parsers/xml.js +3 -0
  12. package/lib/routes/base/types/index.d.ts +6 -0
  13. package/lib/routes/base/utils/route.js +1 -1
  14. package/lib/routes/list/RouteListObserver.d.ts +13 -0
  15. package/lib/routes/list/RouteListObserver.js +21 -0
  16. package/lib/routes/list/cards/FreeRideCard.d.ts +5 -1
  17. package/lib/routes/list/cards/FreeRideCard.js +10 -2
  18. package/lib/routes/list/cards/RouteCard.d.ts +13 -3
  19. package/lib/routes/list/cards/RouteCard.js +86 -10
  20. package/lib/routes/list/cards/RouteCardType.d.ts +15 -0
  21. package/lib/routes/list/cards/RouteCardType.js +10 -0
  22. package/lib/routes/list/cards/RouteImportCard.d.ts +18 -0
  23. package/lib/routes/list/cards/RouteImportCard.js +40 -0
  24. package/lib/routes/list/cards/base.d.ts +21 -0
  25. package/lib/routes/list/cards/base.js +66 -0
  26. package/lib/routes/list/cards/cards.d.ts +2 -17
  27. package/lib/routes/list/cards/cards.js +4 -36
  28. package/lib/routes/list/cards/types.d.ts +15 -0
  29. package/lib/routes/list/cards/types.js +10 -0
  30. package/lib/routes/list/lists/myroutes.js +4 -0
  31. package/lib/routes/list/loaders/LegacyDB.d.ts +1 -0
  32. package/lib/routes/list/loaders/LegacyDB.js +12 -3
  33. package/lib/routes/list/loaders/api.d.ts +8 -6
  34. package/lib/routes/list/loaders/api.js +74 -27
  35. package/lib/routes/list/loaders/db.d.ts +14 -4
  36. package/lib/routes/list/loaders/db.js +126 -45
  37. package/lib/routes/list/loaders/types.d.ts +6 -0
  38. package/lib/routes/list/loaders/types.js +15 -0
  39. package/lib/routes/list/service.d.ts +31 -28
  40. package/lib/routes/list/service.js +270 -171
  41. package/lib/routes/list/types.d.ts +18 -1
  42. package/lib/utils/geo.d.ts +1 -0
  43. package/lib/utils/geo.js +18 -1
  44. package/lib/utils/index.d.ts +1 -0
  45. package/lib/utils/index.js +1 -0
  46. package/lib/utils/nextTick.d.ts +1 -0
  47. package/lib/utils/nextTick.js +14 -0
  48. package/package.json +2 -2
@@ -13,6 +13,7 @@ export declare class JsonRepository {
13
13
  getName(): string;
14
14
  write(objectName: string, data: JSONObject): Promise<boolean>;
15
15
  read(objectName: string): Promise<JSONObject>;
16
+ delete(objectName: string): Promise<boolean>;
16
17
  protected open(): Promise<boolean>;
17
18
  protected close(): Promise<boolean>;
18
19
  }
@@ -48,6 +48,11 @@ class JsonRepository {
48
48
  }
49
49
  });
50
50
  }
51
+ delete(objectName) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ return yield this.access.delete(objectName);
54
+ });
55
+ }
51
56
  open() {
52
57
  return __awaiter(this, void 0, void 0, function* () {
53
58
  if (this.access)
@@ -1,3 +1,4 @@
1
+ import { PromiseObserver } from "../types/observer";
1
2
  export interface Card<T> {
2
3
  getId(): string;
3
4
  getState(): any;
@@ -7,6 +8,7 @@ export interface Card<T> {
7
8
  getDisplayProperties(): any;
8
9
  setInitialized(val: boolean): void;
9
10
  reset(): void;
11
+ delete(): PromiseObserver<boolean>;
10
12
  isVisible(): boolean;
11
13
  setVisible(visible: boolean): any;
12
14
  equals(card: Card<T>): boolean;
@@ -17,6 +17,7 @@ export declare class Observer implements IObserver {
17
17
  }
18
18
  export declare class PromiseObserver<T> extends Observer {
19
19
  promise: Promise<T>;
20
+ static alwaysReturning<T>(res?: T): PromiseObserver<T>;
20
21
  constructor(promise: Promise<T>);
21
22
  start(): Promise<T>;
22
23
  wait(): Promise<T>;
@@ -45,20 +45,28 @@ class Observer {
45
45
  }
46
46
  exports.Observer = Observer;
47
47
  class PromiseObserver extends Observer {
48
+ static alwaysReturning(res) {
49
+ const fn = () => __awaiter(this, void 0, void 0, function* () { return res; });
50
+ const promise = new PromiseObserver(fn());
51
+ promise.start();
52
+ return promise;
53
+ }
48
54
  constructor(promise) {
49
55
  super();
50
56
  this.promise = promise;
51
57
  }
52
58
  start() {
53
- return __awaiter(this, void 0, void 0, function* () {
59
+ return new Promise((resolve, reject) => {
54
60
  this.emitter.emit('started');
55
61
  this.promise
56
62
  .then((res) => {
57
63
  this.emitter.emit('done', res);
58
- return res;
64
+ resolve(res);
59
65
  })
60
- .catch(err => this.emitter('error', err));
61
- return this.promise;
66
+ .catch(err => {
67
+ this.emitter('error', err);
68
+ reject(err);
69
+ });
62
70
  });
63
71
  }
64
72
  wait() {
@@ -10,7 +10,8 @@ export declare class Countries extends IncyclistService {
10
10
  protected getList(locale?: string): CountryList;
11
11
  getCountryFromIso(iso: string, locale?: string): string;
12
12
  getCountiesFromIsos(iso: Array<string>, locale?: string): Array<string>;
13
- getIsoFromCountry(iso: string, locale?: string): string;
13
+ getIsoFromCountry(country: string, locale?: string): string;
14
14
  getIsosFromCountries(countries: Array<string>, locale?: string): Array<string>;
15
15
  getIsoFromLatLng(point: LatLng): Promise<string>;
16
16
  }
17
+ export declare const getCountries: () => Countries;
@@ -50,7 +50,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
50
50
  return (mod && mod.__esModule) ? mod : { "default": mod };
51
51
  };
52
52
  Object.defineProperty(exports, "__esModule", { value: true });
53
- exports.Countries = void 0;
53
+ exports.getCountries = exports.Countries = void 0;
54
54
  const service_1 = require("../../base/service");
55
55
  const types_1 = require("../../base/types");
56
56
  const countries_json_1 = __importDefault(require("./countries.json"));
@@ -79,10 +79,16 @@ let Countries = (() => {
79
79
  getCountiesFromIsos(iso, locale) {
80
80
  return iso.map(i => this.getCountryFromIso(i, locale));
81
81
  }
82
- getIsoFromCountry(iso, locale) {
82
+ getIsoFromCountry(country, locale) {
83
83
  const list = this.getList(locale);
84
- const info = list.countries[iso.toUpperCase()];
85
- return Array.isArray(info) ? info[0] : info;
84
+ const isos = Object.keys(list.countries);
85
+ const iso = isos.find(i => {
86
+ const c = list.countries[i];
87
+ if (Array.isArray(c))
88
+ return c.includes(country);
89
+ return c === country;
90
+ });
91
+ return iso;
86
92
  }
87
93
  getIsosFromCountries(countries, locale) {
88
94
  return countries.map(c => this.getIsoFromCountry(c, locale));
@@ -127,3 +133,5 @@ let Countries = (() => {
127
133
  return Countries = _classThis;
128
134
  })();
129
135
  exports.Countries = Countries;
136
+ const getCountries = () => new Countries();
137
+ exports.getCountries = getCountries;
@@ -15,6 +15,7 @@ export declare class GPXParser extends XMLParser {
15
15
  protected loadPoints(context: XmlParserContext): Promise<void>;
16
16
  protected caclulateDistance(point: RoutePoint, prev: RoutePoint): boolean;
17
17
  protected parseVideo(context: XmlParserContext): Promise<void>;
18
+ protected addHeadings(points: Array<RoutePoint>, isLoop: boolean): Promise<void>;
18
19
  protected buildInfo(context: XmlParserContext): Promise<RouteInfo>;
19
20
  }
20
21
  export {};
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.GPXParser = void 0;
13
13
  const utils_1 = require("../../../utils");
14
+ const valid_1 = require("../../../utils/valid");
14
15
  const route_1 = require("../utils/route");
15
16
  const xml_1 = require("./xml");
16
17
  const MIN_DISTANCE = 1;
@@ -62,7 +63,7 @@ class GPXParser extends xml_1.XMLParser {
62
63
  const keys = Object.keys(segment === null || segment === void 0 ? void 0 : segment.trkpt);
63
64
  points = keys.map(key => segment === null || segment === void 0 ? void 0 : segment.trkpt[key]);
64
65
  }
65
- points.forEach(gpxPt => {
66
+ points.forEach((gpxPt) => {
66
67
  const point = {
67
68
  lat: Number(gpxPt.lat),
68
69
  lng: Number(gpxPt.lon),
@@ -81,6 +82,7 @@ class GPXParser extends xml_1.XMLParser {
81
82
  return;
82
83
  }
83
84
  }
85
+ point.cnt = context.route.points.length;
84
86
  context.route.points.push(point);
85
87
  prev = point;
86
88
  });
@@ -107,6 +109,27 @@ class GPXParser extends xml_1.XMLParser {
107
109
  return __awaiter(this, void 0, void 0, function* () {
108
110
  });
109
111
  }
112
+ addHeadings(points, isLoop) {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ let prevHeading;
115
+ points.forEach((p, idx) => {
116
+ if ((0, valid_1.valid)(p.heading)) {
117
+ prevHeading = p.heading;
118
+ return;
119
+ }
120
+ let pNext;
121
+ if (idx === points.length - 1) {
122
+ pNext = isLoop ? points[0] : undefined;
123
+ }
124
+ else {
125
+ pNext = points[idx + 1];
126
+ }
127
+ const heading = utils_1.geo.calculateHeaderFromPoints(p, pNext);
128
+ p.heading = heading !== undefined ? heading : prevHeading;
129
+ prevHeading = p.heading;
130
+ });
131
+ });
132
+ }
110
133
  buildInfo(context) {
111
134
  var _a;
112
135
  return __awaiter(this, void 0, void 0, function* () {
@@ -114,6 +137,7 @@ class GPXParser extends xml_1.XMLParser {
114
137
  route.routeHash = (0, route_1.getRouteHash)(route);
115
138
  if (!route.id)
116
139
  route.id = route.routeHash;
140
+ const isLoop = (0, route_1.checkIsLoop)(route.points);
117
141
  const info = {
118
142
  id: route.id,
119
143
  title: route.title,
@@ -127,9 +151,10 @@ class GPXParser extends xml_1.XMLParser {
127
151
  hasVideo: false,
128
152
  isDemo: false,
129
153
  isLocal: true,
130
- isLoop: (0, route_1.checkIsLoop)(route.points),
154
+ isLoop,
131
155
  previewUrl: undefined
132
156
  };
157
+ this.addHeadings(route.points, isLoop);
133
158
  return info;
134
159
  });
135
160
  }
@@ -51,8 +51,13 @@ class BinaryReader {
51
51
  }
52
52
  exports.BinaryReader = BinaryReader;
53
53
  const getReferencedFileInfo = (info, referenced, scheme = 'file') => {
54
- if (info.type !== 'url')
55
- return info.url;
54
+ if (info.type !== 'url') {
55
+ if (referenced.file) {
56
+ const fileName = info.filename.replace(info.name, referenced.file);
57
+ return `file:///${fileName}`;
58
+ }
59
+ return referenced.url;
60
+ }
56
61
  const target = {};
57
62
  let fileName = referenced.file;
58
63
  if (referenced.url) {
@@ -72,6 +72,7 @@ class XMLParser {
72
72
  country: country,
73
73
  id: data['id'],
74
74
  previewUrl: data['previewURL'],
75
+ previewUrlLocal: data['preview'],
75
76
  distance: 0,
76
77
  elevation: 0,
77
78
  points: [],
@@ -170,6 +171,7 @@ class XMLParser {
170
171
  selectableSegments: data['segments'],
171
172
  };
172
173
  route.infoTexts = (0, utils_1.parseInformations)(data['informations']);
174
+ route.next = route.video.next;
173
175
  const videoUrl = getVideoUrl(fileInfo, route);
174
176
  if (videoUrl) {
175
177
  route.video.file = undefined;
@@ -265,6 +267,7 @@ class XMLParser {
265
267
  const altitude = getAltitude(altitudes, positions, i, prevAltitude);
266
268
  const elevationGain = altitude - prevAltitude;
267
269
  const pi = createPoint(pos, altitude, prevDistance);
270
+ pi.point.cnt = i;
268
271
  points.push(pi.point);
269
272
  route.distance = pi.point.routeDistance;
270
273
  if (elevationGain > 0)
@@ -55,6 +55,8 @@ export type DaumEpp = {
55
55
  programData: Array<DaumEppProgramEntry>;
56
56
  };
57
57
  export type RoutePoint = {
58
+ cnt?: number;
59
+ heading?: number;
58
60
  lat: number;
59
61
  lng: number;
60
62
  routeDistance: number;
@@ -99,6 +101,10 @@ export interface RouteInfo extends RouteBase {
99
101
  segments?: Array<RouteSegment>;
100
102
  tsImported?: number;
101
103
  tsLastStart?: number;
104
+ next?: string;
105
+ legacyId?: string;
106
+ isDownloaded?: boolean;
107
+ isDeleted?: boolean;
102
108
  }
103
109
  export type LocalizedText = {
104
110
  [index: string]: string;
@@ -47,7 +47,7 @@ const updateSlopes = (points) => {
47
47
  if (point.distance === undefined) {
48
48
  point.distance = utils_1.geo.distanceBetween(prevPoint, point);
49
49
  }
50
- point.slope = (point.elevation - prevPoint.elevation) / point.distance * 100;
50
+ prevPoint.slope = (point.elevation - prevPoint.elevation) / point.distance * 100;
51
51
  }
52
52
  if (i === points.length - 1 && points.length > 1) {
53
53
  point.slope = prevPoint.slope;
@@ -0,0 +1,13 @@
1
+ import { CardList } from "../../base/cardlist";
2
+ import { Observer } from "../../base/types/observer";
3
+ import { Route } from "../base/model/route";
4
+ import { RouteListService } from "./service";
5
+ type RouteListEvent = 'started' | 'stopped' | 'loaded' | 'updated' | 'selected';
6
+ export declare class RouteListObserver extends Observer {
7
+ protected service: RouteListService;
8
+ constructor(service: RouteListService);
9
+ stop(): void;
10
+ emit(event: RouteListEvent, ...payload: any[]): void;
11
+ getLists(): Array<CardList<Route>>;
12
+ }
13
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteListObserver = void 0;
4
+ const observer_1 = require("../../base/types/observer");
5
+ class RouteListObserver extends observer_1.Observer {
6
+ constructor(service) {
7
+ super();
8
+ this.service = service;
9
+ }
10
+ stop() {
11
+ this.service.close();
12
+ this.emit('stopped');
13
+ }
14
+ emit(event, ...payload) {
15
+ this.emitter.emit(event, ...payload);
16
+ }
17
+ getLists() {
18
+ return this.service.getLists();
19
+ }
20
+ }
21
+ exports.RouteListObserver = RouteListObserver;
@@ -1,8 +1,10 @@
1
1
  import { Card } from "../../../base/cardlist";
2
+ import { PromiseObserver } from "../../../base/types/observer";
2
3
  import { LatLng } from "../../../utils/geo";
3
4
  import { Route } from "../../base/model/route";
4
5
  import { FreeRideOption } from "../types";
5
- import { BaseCard, RouteCardType } from "./cards";
6
+ import { BaseCard } from "./base";
7
+ import { AppStatus, RouteCardType } from "./types";
6
8
  export type FreeRideSettings = {
7
9
  position?: LatLng;
8
10
  options?: any;
@@ -13,6 +15,8 @@ export interface FreeRideDisplayProps extends LatLng {
13
15
  export declare class FreeRideCard extends BaseCard implements Card<Route> {
14
16
  protected position: LatLng;
15
17
  protected options: [];
18
+ delete(): PromiseObserver<boolean>;
19
+ canStart(status: AppStatus): boolean;
16
20
  setVisible(): void;
17
21
  isVisible(): boolean;
18
22
  getId(): string;
@@ -1,12 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FreeRideCard = void 0;
4
+ const observer_1 = require("../../../base/types/observer");
4
5
  const settings_1 = require("../../../settings");
5
6
  const utils_1 = require("../../../utils");
6
7
  const route_1 = require("../../base/model/route");
7
8
  const service_1 = require("../service");
8
- const cards_1 = require("./cards");
9
- class FreeRideCard extends cards_1.BaseCard {
9
+ const base_1 = require("./base");
10
+ class FreeRideCard extends base_1.BaseCard {
11
+ delete() {
12
+ return observer_1.PromiseObserver.alwaysReturning(false);
13
+ }
14
+ canStart(status) {
15
+ const { isOnline } = status;
16
+ return isOnline;
17
+ }
10
18
  setVisible() {
11
19
  this.visible = true;
12
20
  }
@@ -1,9 +1,10 @@
1
1
  import { Card, CardList } from "../../../base/cardlist";
2
- import { Observer } from "../../../base/types/observer";
2
+ import { Observer, PromiseObserver } from "../../../base/types/observer";
3
3
  import { RouteApiDetail } from "../../base/api/types";
4
4
  import { Route } from "../../base/model/route";
5
5
  import { RouteInfo } from "../../base/types";
6
- import { BaseCard, RouteCardType } from "./cards";
6
+ import { BaseCard } from "./base";
7
+ import { AppStatus, RouteCardType } from "./types";
7
8
  import { RouteStartSettings } from "../types";
8
9
  import { RoutesDbLoader } from "../loaders/db";
9
10
  export interface SummaryCardDisplayProps extends RouteInfo {
@@ -14,6 +15,7 @@ export interface SummaryCardDisplayProps extends RouteInfo {
14
15
  canDelete: boolean;
15
16
  observer: Observer;
16
17
  initialized: boolean;
18
+ loading?: boolean;
17
19
  }
18
20
  export interface DetailCardDisplayProps {
19
21
  }
@@ -40,10 +42,12 @@ export declare class RouteCard extends BaseCard implements Card<Route> {
40
42
  protected deleteable: boolean;
41
43
  protected startSettings: RouteSettings;
42
44
  protected cardObserver: Observer;
45
+ protected deleteObserver: PromiseObserver<boolean>;
43
46
  protected ready: boolean;
44
47
  constructor(route: Route, props?: {
45
48
  list?: CardList<Route>;
46
49
  });
50
+ canStart(status: AppStatus): boolean;
47
51
  getRepo(): RoutesDbLoader;
48
52
  verify(): void;
49
53
  previewMissing(): boolean;
@@ -62,7 +66,8 @@ export declare class RouteCard extends BaseCard implements Card<Route> {
62
66
  openSettings(): RouteSettings;
63
67
  changeSettings(props: RouteSettings): void;
64
68
  save(): Promise<void>;
65
- delete(): void;
69
+ delete(): PromiseObserver<boolean>;
70
+ protected _delete(): Promise<boolean>;
66
71
  start(): void;
67
72
  cancel(): void;
68
73
  addWorkout(): void;
@@ -81,5 +86,10 @@ export declare class RouteCard extends BaseCard implements Card<Route> {
81
86
  updateRoute(route: Route): void;
82
87
  protected buildSettingsKey(): string;
83
88
  protected createPreview(): Promise<void>;
89
+ protected deleteRouteUserSettings(): void;
90
+ protected deleteFromUIList(): void;
91
+ protected markDeleted(): Promise<void>;
92
+ protected resetDownload(): Promise<void>;
93
+ protected deleteRoute(): Promise<void>;
84
94
  }
85
95
  export {};
@@ -14,10 +14,11 @@ const api_1 = require("../../../api");
14
14
  const observer_1 = require("../../../base/types/observer");
15
15
  const settings_1 = require("../../../settings");
16
16
  const sleep_1 = require("../../../utils/sleep");
17
- const cards_1 = require("./cards");
17
+ const base_1 = require("./base");
18
18
  const service_1 = require("../service");
19
19
  const db_1 = require("../loaders/db");
20
20
  const valid_1 = require("../../../utils/valid");
21
+ const utils_1 = require("../../../utils");
21
22
  class ConvertObserver extends observer_1.Observer {
22
23
  constructor() {
23
24
  super();
@@ -30,7 +31,7 @@ class ConvertObserver extends observer_1.Observer {
30
31
  this.conversion.stop();
31
32
  }
32
33
  }
33
- class RouteCard extends cards_1.BaseCard {
34
+ class RouteCard extends base_1.BaseCard {
34
35
  constructor(route, props) {
35
36
  super();
36
37
  this.cardObserver = new observer_1.Observer();
@@ -42,6 +43,15 @@ class RouteCard extends cards_1.BaseCard {
42
43
  this.ready = !descr.hasVideo || (descr.hasVideo && descr.previewUrl !== undefined);
43
44
  this.initialized = false;
44
45
  }
46
+ canStart(status) {
47
+ const { isOnline } = status;
48
+ const route = this.route.description;
49
+ if (!route.hasVideo || !route.isLocal || route.videoUrl.startsWith('http'))
50
+ return isOnline;
51
+ if (route.requiresDownload)
52
+ return route.isLocal && isOnline;
53
+ return true;
54
+ }
45
55
  getRepo() {
46
56
  return new db_1.RoutesDbLoader();
47
57
  }
@@ -85,10 +95,10 @@ class RouteCard extends cards_1.BaseCard {
85
95
  getDisplayProperties() {
86
96
  let { points } = this.route.description;
87
97
  if (points && !Array.isArray(points)) {
88
- console.log('~~~~ POINT incorrect format', this.route.description.id, this.route.description.title, points);
89
98
  points = undefined;
90
99
  }
91
- return Object.assign(Object.assign({}, this.route.description), { initialized: this.initialized, loaded: true, ready: true, state: 'loaded', visible: this.visible, canDelete: this.canDelete(), observer: this.cardObserver, points });
100
+ const loading = this.deleteObserver !== undefined;
101
+ return Object.assign(Object.assign({}, this.route.description), { initialized: this.initialized, loaded: true, ready: true, state: 'loaded', visible: this.visible, canDelete: this.canDelete(), observer: this.cardObserver, points, loading });
92
102
  }
93
103
  getId() {
94
104
  return this.route.description.id;
@@ -117,12 +127,50 @@ class RouteCard extends cards_1.BaseCard {
117
127
  });
118
128
  }
119
129
  delete() {
120
- if (this.list) {
121
- this.list.remove(this);
122
- (0, service_1.getRouteList)().emitLists('updated');
123
- }
124
- const key = this.buildSettingsKey();
125
- (0, settings_1.useUserSettings)().set(key, null);
130
+ if (this.deleteObserver)
131
+ return this.deleteObserver;
132
+ this.deleteObserver = new observer_1.PromiseObserver(this._delete());
133
+ return this.deleteObserver;
134
+ }
135
+ _delete() {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ yield (0, utils_1.waitNextTick)();
138
+ let deleted = false;
139
+ try {
140
+ this.deleteObserver.emit('started');
141
+ this.emitUpdate();
142
+ if (this.list.getId() === 'myRoutes') {
143
+ const route = this.getRouteDescription();
144
+ if (route.isDownloaded) {
145
+ yield this.resetDownload();
146
+ }
147
+ else if (!route.isLocal) {
148
+ yield this.markDeleted();
149
+ }
150
+ else {
151
+ yield this.deleteRoute();
152
+ }
153
+ }
154
+ else {
155
+ yield this.markDeleted();
156
+ }
157
+ this.deleteFromUIList();
158
+ this.deleteRouteUserSettings();
159
+ (0, service_1.getRouteList)().emitLists('updated');
160
+ deleted = true;
161
+ }
162
+ catch (err) {
163
+ deleted = false;
164
+ }
165
+ finally {
166
+ this.deleteObserver.emit('done', deleted);
167
+ (0, utils_1.waitNextTick)().then(() => {
168
+ delete this.deleteObserver;
169
+ this.emitUpdate();
170
+ });
171
+ }
172
+ return deleted;
173
+ });
126
174
  }
127
175
  start() {
128
176
  const service = (0, service_1.getRouteList)();
@@ -229,5 +277,33 @@ class RouteCard extends cards_1.BaseCard {
229
277
  this.updateRoute(this.route);
230
278
  });
231
279
  }
280
+ deleteRouteUserSettings() {
281
+ const key = this.buildSettingsKey();
282
+ (0, settings_1.useUserSettings)().set(key, null);
283
+ }
284
+ deleteFromUIList() {
285
+ if (this.list) {
286
+ this.list.remove(this);
287
+ }
288
+ }
289
+ markDeleted() {
290
+ return __awaiter(this, void 0, void 0, function* () {
291
+ const descr = this.getRouteDescription();
292
+ descr.isDeleted = true;
293
+ yield this.save();
294
+ });
295
+ }
296
+ resetDownload() {
297
+ return __awaiter(this, void 0, void 0, function* () {
298
+ const descr = this.getRouteDescription();
299
+ descr.isDownloaded = true;
300
+ yield this.save();
301
+ });
302
+ }
303
+ deleteRoute() {
304
+ return __awaiter(this, void 0, void 0, function* () {
305
+ yield this.getRepo().delete(this.route);
306
+ });
307
+ }
232
308
  }
233
309
  exports.RouteCard = RouteCard;
@@ -0,0 +1,15 @@
1
+ import { ImportFilter } from "../../../base/cardlist/types";
2
+ export type RouteCardType = 'Import' | 'Route' | 'Free-Ride';
3
+ export declare const DEFAULT_TITLE = "Import Route";
4
+ export declare const DEFAULT_FILTERS: {
5
+ name: string;
6
+ extensions: string[];
7
+ }[];
8
+ export interface RouteImportProps {
9
+ title: string;
10
+ filters: Array<ImportFilter>;
11
+ visible: boolean;
12
+ }
13
+ export interface AppStatus {
14
+ isOnline?: boolean;
15
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_FILTERS = exports.DEFAULT_TITLE = void 0;
4
+ exports.DEFAULT_TITLE = 'Import Route';
5
+ exports.DEFAULT_FILTERS = [
6
+ { name: 'Routes', extensions: ['gpx', 'epm', 'xml'] },
7
+ { name: 'Tracks', extensions: ['gpx'] },
8
+ { name: 'RLV: ErgoPlanet', extensions: ['epm'] },
9
+ { name: 'RLV: Incyclist, KWT, Rouvy,Virtualtrainer ', extensions: ['xml'] },
10
+ ];
@@ -0,0 +1,18 @@
1
+ import { Card } from "../../../base/cardlist";
2
+ import { ImportFilter } from "../../../base/cardlist/types";
3
+ import { PromiseObserver } from "../../../base/types/observer";
4
+ import { Route } from "../../base/model/route";
5
+ import { BaseCard } from "./base";
6
+ import { AppStatus, RouteCardType, RouteImportProps } from "./types";
7
+ export declare class RouteImportCard extends BaseCard implements Card<Route> {
8
+ setVisible(): void;
9
+ canStart(status: AppStatus): boolean;
10
+ delete(): PromiseObserver<boolean>;
11
+ setData(): void;
12
+ getData(): any;
13
+ getCardType(): RouteCardType;
14
+ getId(): RouteCardType;
15
+ getFilters(): Array<ImportFilter>;
16
+ getTitle(): string;
17
+ getDisplayProperties(): RouteImportProps;
18
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteImportCard = void 0;
4
+ const observer_1 = require("../../../base/types/observer");
5
+ const base_1 = require("./base");
6
+ const types_1 = require("./types");
7
+ class RouteImportCard extends base_1.BaseCard {
8
+ setVisible() {
9
+ this.visible = true;
10
+ }
11
+ canStart(status) {
12
+ return false;
13
+ }
14
+ delete() {
15
+ return observer_1.PromiseObserver.alwaysReturning(false);
16
+ }
17
+ setData() {
18
+ }
19
+ getData() {
20
+ return undefined;
21
+ }
22
+ getCardType() {
23
+ return 'Import';
24
+ }
25
+ getId() {
26
+ return 'Import';
27
+ }
28
+ getFilters() {
29
+ return types_1.DEFAULT_FILTERS;
30
+ }
31
+ getTitle() {
32
+ return types_1.DEFAULT_TITLE;
33
+ }
34
+ getDisplayProperties() {
35
+ const title = this.getTitle();
36
+ const filters = this.getFilters();
37
+ return { title, filters, visible: true };
38
+ }
39
+ }
40
+ exports.RouteImportCard = RouteImportCard;
@@ -0,0 +1,21 @@
1
+ import { Card } from "../../../base/cardlist";
2
+ import { PromiseObserver } from "../../../base/types/observer";
3
+ import { Route } from "../../base/model/route";
4
+ export declare class BaseCard implements Card<Route> {
5
+ protected visible: boolean;
6
+ protected initialized: any;
7
+ setInitialized(val: boolean): void;
8
+ reset(): void;
9
+ delete(): PromiseObserver<boolean>;
10
+ getId(): string;
11
+ getState(): void;
12
+ getData(): Route;
13
+ setData(_data: Route): void;
14
+ getCardType(): void;
15
+ getDisplayProperties(): void;
16
+ isVisible(): boolean;
17
+ setVisible(visible: boolean): void;
18
+ equals(card: Card<Route>): boolean;
19
+ onMounted(): void;
20
+ protected getUserSetting(key: string, defValue?: any): any;
21
+ }