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.
- package/lib/api/repository/json/index.d.ts +1 -0
- package/lib/api/repository/json/index.js +5 -0
- package/lib/base/cardlist/index.d.ts +2 -0
- package/lib/base/types/observer.d.ts +1 -0
- package/lib/base/types/observer.js +12 -4
- package/lib/i18n/countries/index.d.ts +2 -1
- package/lib/i18n/countries/index.js +12 -4
- package/lib/routes/base/parsers/gpx.d.ts +1 -0
- package/lib/routes/base/parsers/gpx.js +27 -2
- package/lib/routes/base/parsers/utils.js +7 -2
- package/lib/routes/base/parsers/xml.js +3 -0
- package/lib/routes/base/types/index.d.ts +6 -0
- package/lib/routes/base/utils/route.js +1 -1
- package/lib/routes/list/RouteListObserver.d.ts +13 -0
- package/lib/routes/list/RouteListObserver.js +21 -0
- package/lib/routes/list/cards/FreeRideCard.d.ts +5 -1
- package/lib/routes/list/cards/FreeRideCard.js +10 -2
- package/lib/routes/list/cards/RouteCard.d.ts +13 -3
- package/lib/routes/list/cards/RouteCard.js +86 -10
- package/lib/routes/list/cards/RouteCardType.d.ts +15 -0
- package/lib/routes/list/cards/RouteCardType.js +10 -0
- package/lib/routes/list/cards/RouteImportCard.d.ts +18 -0
- package/lib/routes/list/cards/RouteImportCard.js +40 -0
- package/lib/routes/list/cards/base.d.ts +21 -0
- package/lib/routes/list/cards/base.js +66 -0
- package/lib/routes/list/cards/cards.d.ts +2 -17
- package/lib/routes/list/cards/cards.js +4 -36
- package/lib/routes/list/cards/types.d.ts +15 -0
- package/lib/routes/list/cards/types.js +10 -0
- package/lib/routes/list/lists/myroutes.js +4 -0
- package/lib/routes/list/loaders/LegacyDB.d.ts +1 -0
- package/lib/routes/list/loaders/LegacyDB.js +12 -3
- package/lib/routes/list/loaders/api.d.ts +8 -6
- package/lib/routes/list/loaders/api.js +74 -27
- package/lib/routes/list/loaders/db.d.ts +14 -4
- package/lib/routes/list/loaders/db.js +126 -45
- package/lib/routes/list/loaders/types.d.ts +6 -0
- package/lib/routes/list/loaders/types.js +15 -0
- package/lib/routes/list/service.d.ts +31 -28
- package/lib/routes/list/service.js +270 -171
- package/lib/routes/list/types.d.ts +18 -1
- package/lib/utils/geo.d.ts +1 -0
- package/lib/utils/geo.js +18 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +1 -0
- package/lib/utils/nextTick.d.ts +1 -0
- package/lib/utils/nextTick.js +14 -0
- 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
|
|
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
|
-
|
|
64
|
+
resolve(res);
|
|
59
65
|
})
|
|
60
|
-
.catch(err =>
|
|
61
|
-
|
|
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(
|
|
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(
|
|
82
|
+
getIsoFromCountry(country, locale) {
|
|
83
83
|
const list = this.getList(locale);
|
|
84
|
-
const
|
|
85
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
9
|
-
class FreeRideCard extends
|
|
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
|
|
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():
|
|
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
|
|
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
|
|
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
|
-
|
|
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.
|
|
121
|
-
this.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
+
}
|