incyclist-services 1.1.89 → 1.1.91
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/__tests__/utils/loadFile.js +1 -1
- package/lib/base/cardlist/index.d.ts +0 -1
- package/lib/base/types/index.d.ts +1 -0
- package/lib/base/types/index.js +1 -0
- package/lib/base/types/lists.d.ts +14 -0
- package/lib/base/types/lists.js +21 -0
- package/lib/routes/base/api/index.js +0 -1
- package/lib/routes/base/api/types.d.ts +4 -2
- package/lib/routes/base/parsers/gpx.js +2 -1
- package/lib/routes/base/parsers/xml.js +14 -3
- package/lib/routes/base/utils/localization.js +7 -1
- package/lib/routes/base/utils/route.d.ts +1 -0
- package/lib/routes/base/utils/route.js +17 -1
- package/lib/routes/list/cards/RouteCard.js +4 -2
- package/lib/routes/list/cards/base.d.ts +0 -1
- package/lib/routes/list/cards/base.js +0 -3
- package/lib/routes/list/loaders/db.js +23 -1
- package/lib/routes/list/service.js +13 -21
- package/lib/src/activities/service.d.ts +0 -0
- package/lib/src/activities/service.js +0 -0
- package/lib/src/api/appInfo/index.d.ts +13 -0
- package/lib/src/api/appInfo/index.js +2 -0
- package/lib/src/api/bindings/index.d.ts +16 -0
- package/lib/src/api/bindings/index.js +62 -0
- package/lib/src/api/download/index.d.ts +12 -0
- package/lib/src/api/download/index.js +2 -0
- package/lib/src/api/fs/index.d.ts +10 -0
- package/lib/src/api/fs/index.js +2 -0
- package/lib/src/api/index.d.ts +2 -0
- package/lib/src/api/index.js +2 -0
- package/lib/src/api/overpass/index.d.ts +10 -0
- package/lib/src/api/overpass/index.js +110 -0
- package/lib/src/api/repository/json/index.d.ts +3 -5
- package/lib/src/api/repository/json/index.js +12 -12
- package/lib/src/api/repository/types.d.ts +2 -0
- package/lib/src/api/video/index.d.ts +4 -2
- package/lib/src/base/cardlist/index.d.ts +5 -1
- package/lib/src/base/cardlist/index.js +4 -2
- package/lib/src/base/service.d.ts +3 -3
- package/lib/src/base/types/index.d.ts +1 -0
- package/lib/src/base/types/index.js +1 -0
- package/lib/src/base/types/lists.d.ts +14 -0
- package/lib/src/base/types/lists.js +21 -0
- package/lib/src/base/types/observer.d.ts +5 -0
- package/lib/src/base/types/observer.js +35 -8
- package/lib/src/base/types/singleton.d.ts +1 -1
- package/lib/src/base/types/singleton.js +3 -2
- package/lib/src/coaches/coach.d.ts +30 -0
- package/lib/src/coaches/coach.js +108 -0
- package/lib/src/coaches/index.d.ts +3 -0
- package/lib/src/coaches/index.js +19 -0
- package/lib/src/coaches/service.d.ts +32 -0
- package/lib/src/coaches/service.js +246 -0
- package/lib/src/coaches/types.d.ts +24 -0
- package/lib/src/coaches/types.js +2 -0
- package/lib/src/devices/configuration/service.js +4 -2
- package/lib/src/devices/pairing/service.js +13 -2
- package/lib/src/devices/ride/service.js +4 -3
- package/lib/src/i18n/countries/countries.json +255 -0
- package/lib/src/i18n/countries/index.d.ts +17 -0
- package/lib/src/i18n/countries/index.js +137 -0
- package/lib/src/i18n/countries/model.d.ts +18 -0
- package/lib/src/i18n/countries/model.js +2 -0
- package/lib/src/index.d.ts +1 -0
- package/lib/src/index.js +1 -0
- package/lib/src/routes/base/api/index.d.ts +1 -0
- package/lib/src/routes/base/api/index.js +12 -0
- package/lib/src/routes/base/api/types.d.ts +9 -2
- package/lib/src/routes/base/model/route.d.ts +9 -1
- package/lib/src/routes/base/model/route.js +41 -2
- package/lib/src/routes/base/parsers/bikelab.d.ts +12 -0
- package/lib/src/routes/base/parsers/bikelab.js +117 -0
- package/lib/src/routes/base/parsers/epm.d.ts +23 -0
- package/lib/src/routes/base/parsers/epm.js +241 -0
- package/lib/src/routes/base/parsers/factory.d.ts +2 -1
- package/lib/src/routes/base/parsers/factory.js +12 -1
- package/lib/src/routes/base/parsers/gpx.d.ts +13 -6
- package/lib/src/routes/base/parsers/gpx.js +58 -21
- package/lib/src/routes/base/parsers/incyclist.d.ts +7 -0
- package/lib/src/routes/base/parsers/incyclist.js +74 -0
- package/lib/src/routes/base/parsers/index.d.ts +6 -0
- package/lib/src/routes/base/parsers/index.js +41 -3
- package/lib/src/routes/base/parsers/multixml.d.ts +5 -4
- package/lib/src/routes/base/parsers/multixml.js +17 -4
- package/lib/src/routes/base/parsers/utils.d.ts +18 -3
- package/lib/src/routes/base/parsers/utils.js +69 -34
- package/lib/src/routes/base/parsers/xml.d.ts +5 -3
- package/lib/src/routes/base/parsers/xml.js +83 -14
- package/lib/src/routes/base/types/index.d.ts +46 -6
- package/lib/src/routes/base/utils/localization.js +1 -1
- package/lib/src/routes/base/utils/route.d.ts +26 -1
- package/lib/src/routes/base/utils/route.js +217 -6
- package/lib/src/routes/download/service.d.ts +18 -0
- package/lib/src/routes/download/service.js +116 -0
- package/lib/src/routes/download/types.d.ts +8 -0
- package/lib/src/routes/download/types.js +18 -0
- package/lib/src/routes/list/RouteListObserver.d.ts +13 -0
- package/lib/src/routes/list/RouteListObserver.js +21 -0
- package/lib/src/routes/list/cards/ActiveImportCard.d.ts +28 -0
- package/lib/src/routes/list/cards/ActiveImportCard.js +66 -0
- package/lib/src/routes/list/cards/FreeRideCard.d.ts +42 -0
- package/lib/src/routes/list/cards/FreeRideCard.js +119 -0
- package/lib/src/routes/list/cards/RouteCard.d.ts +116 -0
- package/lib/src/routes/list/cards/RouteCard.js +557 -0
- package/lib/src/routes/list/cards/RouteImportCard.d.ts +19 -0
- package/lib/src/routes/list/cards/RouteImportCard.js +40 -0
- package/lib/src/routes/list/cards/base.d.ts +20 -0
- package/lib/src/routes/list/cards/base.js +63 -0
- package/lib/src/routes/list/cards/types.d.ts +19 -0
- package/lib/src/routes/list/cards/types.js +10 -0
- package/lib/src/routes/list/lists/alternatives.d.ts +5 -0
- package/lib/src/routes/list/lists/alternatives.js +28 -0
- package/lib/src/routes/list/lists/myroutes.d.ts +10 -0
- package/lib/src/routes/list/lists/myroutes.js +58 -0
- package/lib/src/routes/list/lists/selected.d.ts +5 -0
- package/lib/src/routes/list/lists/selected.js +32 -0
- package/lib/src/routes/list/loaders/DBLoader.d.ts +21 -0
- package/lib/src/routes/list/loaders/DBLoader.js +65 -0
- package/lib/src/routes/list/loaders/LegacyDB.d.ts +17 -0
- package/lib/src/routes/list/loaders/LegacyDB.js +158 -0
- package/lib/src/routes/list/loaders/api.d.ts +25 -0
- package/lib/src/routes/list/loaders/api.js +179 -0
- package/lib/src/routes/list/loaders/db.d.ts +41 -0
- package/lib/src/routes/list/loaders/db.js +319 -0
- package/lib/src/routes/list/loaders/types.d.ts +43 -0
- package/lib/src/routes/list/loaders/types.js +126 -0
- package/lib/src/routes/list/service.d.ts +69 -34
- package/lib/src/routes/list/service.js +555 -109
- package/lib/src/routes/list/types.d.ts +22 -4
- package/lib/src/settings/user/service.d.ts +8 -0
- package/lib/src/settings/user/service.js +19 -3
- package/lib/src/utils/geo.d.ts +1 -0
- package/lib/src/utils/geo.js +18 -1
- package/lib/src/utils/index.d.ts +1 -0
- package/lib/src/utils/index.js +1 -0
- package/lib/src/utils/nextTick.d.ts +1 -0
- package/lib/src/utils/nextTick.js +14 -0
- package/lib/src/workouts/base/api/consts.d.ts +9 -0
- package/lib/src/workouts/base/api/consts.js +13 -0
- package/lib/src/workouts/base/api/index.d.ts +15 -0
- package/lib/src/workouts/base/api/index.js +132 -0
- package/lib/src/workouts/base/model/Segment.d.ts +18 -0
- package/lib/src/workouts/base/model/Segment.js +139 -0
- package/lib/src/workouts/base/model/Step.d.ts +35 -0
- package/lib/src/workouts/base/model/Step.js +158 -0
- package/lib/src/workouts/base/model/Workout.d.ts +24 -0
- package/lib/src/workouts/base/model/Workout.js +84 -0
- package/lib/src/workouts/base/model/types.d.ts +60 -0
- package/lib/src/workouts/base/model/types.js +2 -0
- package/lib/src/workouts/base/parsers/Json.d.ts +12 -0
- package/lib/src/workouts/base/parsers/Json.js +70 -0
- package/lib/src/workouts/base/parsers/factory.d.ts +11 -0
- package/lib/src/workouts/base/parsers/factory.js +92 -0
- package/lib/src/workouts/base/parsers/index.d.ts +5 -0
- package/lib/src/workouts/base/parsers/index.js +51 -0
- package/lib/src/workouts/base/parsers/types.d.ts +8 -0
- package/lib/src/workouts/base/parsers/types.js +2 -0
- package/lib/src/workouts/base/parsers/zwo.d.ts +32 -0
- package/lib/src/workouts/base/parsers/zwo.js +249 -0
- package/lib/src/workouts/base/parsers/zwo.unit.test_.d.ts +1 -0
- package/lib/src/workouts/base/parsers/zwo.unit.test_.js +326 -0
- package/lib/src/workouts/list/cards/WorkoutCard.d.ts +31 -0
- package/lib/src/workouts/list/cards/WorkoutCard.js +91 -0
- package/lib/src/workouts/list/cards/WorkoutImportCard.d.ts +19 -0
- package/lib/src/workouts/list/cards/WorkoutImportCard.js +40 -0
- package/lib/src/workouts/list/cards/base.d.ts +19 -0
- package/lib/src/workouts/list/cards/base.js +51 -0
- package/lib/src/workouts/list/cards/types.d.ts +19 -0
- package/lib/src/workouts/list/cards/types.js +8 -0
- package/lib/src/workouts/list/loaders/api.d.ts +11 -0
- package/lib/src/workouts/list/loaders/api.js +60 -0
- package/lib/src/workouts/list/loaders/db.d.ts +21 -0
- package/lib/src/workouts/list/loaders/db.js +139 -0
- package/lib/src/workouts/list/loaders/db.unit.test_.d.ts +0 -0
- package/lib/src/workouts/list/loaders/db.unit.test_.js +0 -0
- package/lib/src/workouts/list/loaders/loader.d.ts +10 -0
- package/lib/src/workouts/list/loaders/loader.js +19 -0
- package/lib/src/workouts/list/service.d.ts +33 -0
- package/lib/src/workouts/list/service.js +218 -0
- package/lib/src/workouts/list/types.d.ts +0 -0
- package/lib/src/workouts/list/types.js +0 -0
- package/lib/workouts/base/api/consts.d.ts +9 -0
- package/lib/workouts/base/api/consts.js +13 -0
- package/lib/workouts/base/api/index.d.ts +15 -0
- package/lib/workouts/base/api/index.js +132 -0
- package/lib/workouts/base/model/Workout.d.ts +17 -3
- package/lib/workouts/base/model/Workout.js +44 -2
- package/lib/workouts/base/model/types.d.ts +17 -1
- package/lib/workouts/base/parsers/Json.d.ts +1 -1
- package/lib/workouts/base/parsers/Json.js +3 -6
- package/lib/workouts/base/parsers/index.d.ts +1 -1
- package/lib/workouts/base/parsers/types.d.ts +1 -1
- package/lib/workouts/base/parsers/zwo.d.ts +1 -1
- package/lib/workouts/base/parsers/zwo.js +2 -2
- package/lib/workouts/list/cards/WorkoutCard.d.ts +31 -0
- package/lib/workouts/list/cards/WorkoutCard.js +91 -0
- package/lib/workouts/list/cards/WorkoutImportCard.d.ts +2 -2
- package/lib/workouts/list/cards/WorkoutImportCard.js +3 -3
- package/lib/workouts/list/cards/base.d.ts +1 -2
- package/lib/workouts/list/cards/base.js +0 -3
- package/lib/workouts/list/loaders/api.d.ts +11 -0
- package/lib/workouts/list/loaders/api.js +60 -0
- package/lib/workouts/list/loaders/db.d.ts +21 -0
- package/lib/workouts/list/loaders/db.js +139 -0
- package/lib/workouts/list/loaders/db.unit.test_.d.ts +0 -0
- package/lib/workouts/list/loaders/db.unit.test_.js +0 -0
- package/lib/workouts/list/loaders/loader.d.ts +10 -0
- package/lib/workouts/list/loaders/loader.js +19 -0
- package/lib/workouts/list/service.d.ts +30 -1
- package/lib/workouts/list/service.js +152 -0
- package/lib/workouts/list/types.d.ts +0 -0
- package/lib/workouts/list/types.js +0 -0
- package/package.json +2 -2
|
@@ -17,7 +17,7 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
17
17
|
function loadFile(type, fileName) {
|
|
18
18
|
return __awaiter(this, void 0, void 0, function* () {
|
|
19
19
|
return new Promise((resolve, reject) => {
|
|
20
|
-
fs_1.default.readFile(fileName, type, (err, data) => {
|
|
20
|
+
fs_1.default.readFile(fileName, { encoding: type }, (err, data) => {
|
|
21
21
|
if (err)
|
|
22
22
|
return reject(err);
|
|
23
23
|
return resolve(data);
|
package/lib/base/types/index.js
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CardList } from "../cardlist";
|
|
2
|
+
import { Observer } from "./observer";
|
|
3
|
+
export interface IListService<T> {
|
|
4
|
+
close(): void;
|
|
5
|
+
getLists(): Array<CardList<T>>;
|
|
6
|
+
}
|
|
7
|
+
export type ListEvent = 'started' | 'stopped' | 'loaded' | 'updated' | 'selected';
|
|
8
|
+
export declare class ListObserver<T> extends Observer {
|
|
9
|
+
protected service: IListService<T>;
|
|
10
|
+
constructor(service: IListService<T>);
|
|
11
|
+
stop(): void;
|
|
12
|
+
emit(event: ListEvent, ...payload: any[]): void;
|
|
13
|
+
getLists(): Array<CardList<T>>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ListObserver = void 0;
|
|
4
|
+
const observer_1 = require("./observer");
|
|
5
|
+
class ListObserver 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.ListObserver = ListObserver;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DaumEpp, LocalizedText, RouteBase, RouteCategory, RouteInfoText, RoutePoint, RouteProvider, RouteType, VideoDescription } from "../types";
|
|
1
|
+
import { DaumEpp, LocalizedText, RouteBase, RouteCategory, RouteInfoText, RoutePoint, RouteProvider, RouteSegment, RouteType, VideoDescription } from "../types";
|
|
2
2
|
export type RouteDescriptionQuery = {
|
|
3
3
|
category?: string;
|
|
4
4
|
categories?: Array<string>;
|
|
@@ -24,6 +24,7 @@ export interface RouteApiDescription extends RouteBase {
|
|
|
24
24
|
localizedTitle?: LocalizedText;
|
|
25
25
|
previewUrl?: string;
|
|
26
26
|
isDeleted?: boolean;
|
|
27
|
+
selectableSegments?: Array<RouteSegment>;
|
|
27
28
|
}
|
|
28
29
|
export type LegacyRouteGpxRepoDescription = {
|
|
29
30
|
id: string;
|
|
@@ -63,9 +64,10 @@ export type RouteApiDetail = {
|
|
|
63
64
|
video?: VideoDescription;
|
|
64
65
|
epp?: DaumEpp;
|
|
65
66
|
infoTexts?: Array<RouteInfoText>;
|
|
66
|
-
localizedTitle?: LocalizedText;
|
|
67
|
+
localizedTitle?: LocalizedText | string;
|
|
67
68
|
previewUrl?: string;
|
|
68
69
|
previewUrlLocal?: string;
|
|
69
70
|
description?: LocalizedText;
|
|
70
71
|
next?: string;
|
|
72
|
+
selectableSegments?: Array<RouteSegment>;
|
|
71
73
|
};
|
|
@@ -138,10 +138,11 @@ class GPXParser extends xml_1.XMLParser {
|
|
|
138
138
|
if (!route.id)
|
|
139
139
|
route.id = route.routeHash;
|
|
140
140
|
const isLoop = (0, route_1.checkIsLoop)(route.points);
|
|
141
|
+
const localizedTitle = typeof (route.localizedTitle) === 'string' ? { en: route.localizedTitle } : route.localizedTitle;
|
|
141
142
|
const info = {
|
|
142
143
|
id: route.id,
|
|
143
144
|
title: route.title,
|
|
144
|
-
localizedTitle
|
|
145
|
+
localizedTitle,
|
|
145
146
|
country: route.country,
|
|
146
147
|
distance: route.distance,
|
|
147
148
|
elevation: route.elevation,
|
|
@@ -67,13 +67,16 @@ class XMLParser {
|
|
|
67
67
|
name = name.substring(3);
|
|
68
68
|
country = country || countryPrefix;
|
|
69
69
|
}
|
|
70
|
+
let previewUrl = data['previewURL'];
|
|
71
|
+
if (previewUrl === null || previewUrl === void 0 ? void 0 : previewUrl.startsWith('https://www.reallifevideo.de/rlv.php'))
|
|
72
|
+
previewUrl = undefined;
|
|
70
73
|
context.route = {
|
|
71
74
|
title: name,
|
|
72
75
|
originalName,
|
|
73
76
|
localizedTitle: data['title'] || name,
|
|
74
77
|
country: country,
|
|
75
78
|
id: data['id'],
|
|
76
|
-
previewUrl
|
|
79
|
+
previewUrl,
|
|
77
80
|
previewUrlLocal: data['preview'],
|
|
78
81
|
distance: 0,
|
|
79
82
|
elevation: 0,
|
|
@@ -128,11 +131,12 @@ class XMLParser {
|
|
|
128
131
|
if (!route.id)
|
|
129
132
|
route.id = (0, route_1.getRouteHash)(route);
|
|
130
133
|
route.routeHash = (0, route_1.getRouteHash)(route);
|
|
134
|
+
const localizedTitle = typeof (route.localizedTitle) === 'string' ? { en: route.localizedTitle } : route.localizedTitle;
|
|
131
135
|
const info = {
|
|
132
136
|
id: route.id,
|
|
133
137
|
originalName: route.originalName,
|
|
134
138
|
title: route.title,
|
|
135
|
-
localizedTitle
|
|
139
|
+
localizedTitle,
|
|
136
140
|
category: route.category,
|
|
137
141
|
country: route.country,
|
|
138
142
|
distance: route.distance,
|
|
@@ -291,7 +295,14 @@ const getVideoUrl = (info, route) => {
|
|
|
291
295
|
};
|
|
292
296
|
const getPreviewUrl = (info, route) => {
|
|
293
297
|
const url = route === null || route === void 0 ? void 0 : route.previewUrl;
|
|
294
|
-
|
|
298
|
+
let file = route === null || route === void 0 ? void 0 : route.previewUrlLocal;
|
|
299
|
+
if (file) {
|
|
300
|
+
const path = (0, api_1.getBindings)().path;
|
|
301
|
+
const fs = (0, api_1.getBindings)().fs;
|
|
302
|
+
const filename = file.startsWith(info.ext) || file.match(/[A-Za-z]:.*/) ? file : path.join(info.dir, file);
|
|
303
|
+
if (!fs.existsSync(filename))
|
|
304
|
+
file = undefined;
|
|
305
|
+
}
|
|
295
306
|
return (0, utils_1.getReferencedFileInfo)(info, { file, url }, 'file');
|
|
296
307
|
};
|
|
297
308
|
function createPoint(pos, altitude, prevDistance) {
|
|
@@ -3,7 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getLocalizedData = void 0;
|
|
4
4
|
const getLocalizedData = (data, language = 'en') => {
|
|
5
5
|
const updated = Object.assign({}, data);
|
|
6
|
-
|
|
6
|
+
let keys = [];
|
|
7
|
+
try {
|
|
8
|
+
keys = Object.keys(data.localizedTitle);
|
|
9
|
+
}
|
|
10
|
+
catch (_a) {
|
|
11
|
+
}
|
|
12
|
+
if (language && data.localizedTitle && keys.length > 0) {
|
|
7
13
|
updated.title = data.localizedTitle[language];
|
|
8
14
|
delete updated.localizedTitle;
|
|
9
15
|
}
|
|
@@ -6,6 +6,7 @@ export declare const checkIsLoop: (_route: Route | Array<RoutePoint>) => boolean
|
|
|
6
6
|
export declare const updateSlopes: (points: Array<RoutePoint>) => void;
|
|
7
7
|
export declare const getSegments: (route: Route) => Array<RouteSegment>;
|
|
8
8
|
export declare const validateRoute: (route: RouteApiDetail) => void;
|
|
9
|
+
export declare const validateDistance: (points: Array<RoutePoint>) => void;
|
|
9
10
|
export declare const getTotalElevation: (route: RouteApiDetail) => number;
|
|
10
11
|
export declare const getTotalDistance: (route: RouteApiDetail) => number;
|
|
11
12
|
export declare const getRouteHash: (route: RouteApiDetail) => string;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getPosition = exports.getNextPosition = exports.getRouteHash = exports.getTotalDistance = exports.getTotalElevation = exports.validateRoute = exports.getSegments = exports.updateSlopes = exports.checkIsLoop = void 0;
|
|
6
|
+
exports.getPosition = exports.getNextPosition = exports.getRouteHash = exports.getTotalDistance = exports.getTotalElevation = exports.validateDistance = exports.validateRoute = exports.getSegments = exports.updateSlopes = exports.checkIsLoop = void 0;
|
|
7
7
|
const utils_1 = require("../../../utils");
|
|
8
8
|
const geo_1 = require("../../../utils/geo");
|
|
9
9
|
const valid_1 = require("../../../utils/valid");
|
|
@@ -100,9 +100,25 @@ const validateRoute = (route) => {
|
|
|
100
100
|
var _a;
|
|
101
101
|
if (!((_a = route === null || route === void 0 ? void 0 : route.points) === null || _a === void 0 ? void 0 : _a.length))
|
|
102
102
|
return;
|
|
103
|
+
(0, exports.validateDistance)(route.points);
|
|
103
104
|
(0, exports.updateSlopes)(route.points);
|
|
104
105
|
};
|
|
105
106
|
exports.validateRoute = validateRoute;
|
|
107
|
+
const validateDistance = (points) => {
|
|
108
|
+
let prev = undefined;
|
|
109
|
+
points.forEach((p, idx) => {
|
|
110
|
+
if (!p.routeDistance) {
|
|
111
|
+
if (idx == 0) {
|
|
112
|
+
p.routeDistance = 0;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
p.routeDistance = ((prev === null || prev === void 0 ? void 0 : prev.distance) || 0) + ((prev === null || prev === void 0 ? void 0 : prev.routeDistance) || 0);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
prev = p;
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
exports.validateDistance = validateDistance;
|
|
106
122
|
const getTotalElevation = (route) => {
|
|
107
123
|
var _a;
|
|
108
124
|
if (!((_a = route === null || route === void 0 ? void 0 : route.points) === null || _a === void 0 ? void 0 : _a.length))
|
|
@@ -152,6 +152,10 @@ class RouteCard extends base_1.BaseCard {
|
|
|
152
152
|
getDisplayProperties() {
|
|
153
153
|
try {
|
|
154
154
|
const descr = this.getRouteDescription();
|
|
155
|
+
if (typeof (descr.localizedTitle) === 'string') {
|
|
156
|
+
descr.localizedTitle = { en: descr.localizedTitle };
|
|
157
|
+
this.save();
|
|
158
|
+
}
|
|
155
159
|
let { points } = descr;
|
|
156
160
|
if (points && !Array.isArray(points)) {
|
|
157
161
|
points = undefined;
|
|
@@ -199,7 +203,6 @@ class RouteCard extends base_1.BaseCard {
|
|
|
199
203
|
if (!route || (route.description.requiresDownload && !route.description.isDownloaded)) {
|
|
200
204
|
showNextOverwrite = false;
|
|
201
205
|
}
|
|
202
|
-
console.log('~~~ NEXT', route);
|
|
203
206
|
}
|
|
204
207
|
}
|
|
205
208
|
catch (err) {
|
|
@@ -286,7 +289,6 @@ class RouteCard extends base_1.BaseCard {
|
|
|
286
289
|
start() {
|
|
287
290
|
try {
|
|
288
291
|
const service = (0, service_1.getRouteList)();
|
|
289
|
-
console.log('~~~ start', this.startSettings);
|
|
290
292
|
service.select(this.route);
|
|
291
293
|
service.setStartSettings(Object.assign({ type: this.getCardType() }, this.startSettings));
|
|
292
294
|
this.route.description.tsLastStart = Date.now();
|
|
@@ -54,6 +54,7 @@ const observer_1 = require("../../../base/types/observer");
|
|
|
54
54
|
const LegacyDB_1 = require("./LegacyDB");
|
|
55
55
|
const DBLoader_1 = require("./DBLoader");
|
|
56
56
|
const utils_1 = require("../../../utils");
|
|
57
|
+
const route_1 = require("../../base/utils/route");
|
|
57
58
|
let RoutesDbLoader = (() => {
|
|
58
59
|
let _classDecorators = [types_1.Singleton];
|
|
59
60
|
let _classDescriptor;
|
|
@@ -192,6 +193,7 @@ let RoutesDbLoader = (() => {
|
|
|
192
193
|
return cleaned;
|
|
193
194
|
}
|
|
194
195
|
loadDetailRecord(target) {
|
|
196
|
+
var _a;
|
|
195
197
|
return __awaiter(this, void 0, void 0, function* () {
|
|
196
198
|
const description = (target.description || target);
|
|
197
199
|
const repo = (description === null || description === void 0 ? void 0 : description.hasVideo) ? this.getVideosRepo() : this.getRoutesRepo();
|
|
@@ -200,9 +202,21 @@ let RoutesDbLoader = (() => {
|
|
|
200
202
|
const id = description.legacyId || description.id;
|
|
201
203
|
details = (yield repo.read(id));
|
|
202
204
|
description.originalName = details.title;
|
|
205
|
+
if (description.hasVideo) {
|
|
206
|
+
description.segments = ((_a = details.video) === null || _a === void 0 ? void 0 : _a.selectableSegments) || (details === null || details === void 0 ? void 0 : details.selectableSegments);
|
|
207
|
+
}
|
|
203
208
|
}
|
|
204
209
|
catch (err) {
|
|
205
|
-
this.logger.logEvent({ message: 'could not load route details', id: (description === null || description === void 0 ? void 0 : description.legacyId) || (description === null || description === void 0 ? void 0 : description.id), reason: err.message, stack: err.stack });
|
|
210
|
+
this.logger.logEvent({ message: 'could not load route details', id: (description === null || description === void 0 ? void 0 : description.legacyId) || (description === null || description === void 0 ? void 0 : description.id), title: description === null || description === void 0 ? void 0 : description.title, reason: err.message, stack: err.stack });
|
|
211
|
+
if (description.id && description.legacyId !== description.id) {
|
|
212
|
+
try {
|
|
213
|
+
details = (yield repo.read(description.id));
|
|
214
|
+
description.originalName = details.title;
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
this.logger.logEvent({ message: 'could not load route details', id: (description === null || description === void 0 ? void 0 : description.legacyId) || (description === null || description === void 0 ? void 0 : description.id), title: description === null || description === void 0 ? void 0 : description.title, reason: err.message, stack: err.stack });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
206
220
|
}
|
|
207
221
|
if (!details) {
|
|
208
222
|
return;
|
|
@@ -211,6 +225,14 @@ let RoutesDbLoader = (() => {
|
|
|
211
225
|
details.points = details.decoded;
|
|
212
226
|
delete details.decoded;
|
|
213
227
|
}
|
|
228
|
+
if (details.localizedTitle && typeof (details.localizedTitle) === 'string') {
|
|
229
|
+
details.localizedTitle = { en: details.localizedTitle };
|
|
230
|
+
}
|
|
231
|
+
(0, route_1.validateDistance)(details.points);
|
|
232
|
+
(0, route_1.updateSlopes)(details.points);
|
|
233
|
+
if (!description.elevation) {
|
|
234
|
+
description.elevation = (0, route_1.getTotalElevation)(details);
|
|
235
|
+
}
|
|
214
236
|
return details;
|
|
215
237
|
});
|
|
216
238
|
}
|
|
@@ -310,6 +310,10 @@ let RouteListService = (() => {
|
|
|
310
310
|
if (route.details)
|
|
311
311
|
return route.details;
|
|
312
312
|
route.details = yield this.db.getDetails(id);
|
|
313
|
+
if (!route.details.video.selectableSegments && route.details.selectableSegments) {
|
|
314
|
+
route.details.video.selectableSegments = route.details.selectableSegments;
|
|
315
|
+
delete route.details.selectableSegments;
|
|
316
|
+
}
|
|
313
317
|
return route.details;
|
|
314
318
|
}
|
|
315
319
|
}
|
|
@@ -361,32 +365,19 @@ let RouteListService = (() => {
|
|
|
361
365
|
try {
|
|
362
366
|
const { data, details } = yield parsers_1.RouteParser.parse(file);
|
|
363
367
|
const route = new route_1.Route(data, details);
|
|
368
|
+
route.description.tsImported = Date.now();
|
|
364
369
|
const existing = this.findCard(route);
|
|
365
|
-
let card;
|
|
366
370
|
if (existing) {
|
|
367
|
-
|
|
368
|
-
card = existing.card;
|
|
369
|
-
card.updateRoute(route);
|
|
370
|
-
route.description.tsImported = Date.now();
|
|
371
|
-
}
|
|
372
|
-
else {
|
|
373
|
-
existing.list.remove(existing.card);
|
|
374
|
-
card = new RouteCard_1.RouteCard(route, { list: this.myRoutes });
|
|
375
|
-
card.verify();
|
|
376
|
-
card.save();
|
|
377
|
-
card.enableDelete();
|
|
378
|
-
this.myRoutes.add(card, true);
|
|
379
|
-
}
|
|
371
|
+
existing.list.remove(existing.card);
|
|
380
372
|
}
|
|
381
373
|
else {
|
|
382
|
-
route.description.tsImported = Date.now();
|
|
383
|
-
card = new RouteCard_1.RouteCard(route, { list: this.myRoutes });
|
|
384
|
-
card.verify();
|
|
385
|
-
card.save();
|
|
386
|
-
card.enableDelete();
|
|
387
|
-
this.myRoutes.add(card, true);
|
|
388
374
|
this.routes.push(route);
|
|
389
375
|
}
|
|
376
|
+
const card = new RouteCard_1.RouteCard(route, { list: this.myRoutes });
|
|
377
|
+
card.verify();
|
|
378
|
+
card.save();
|
|
379
|
+
card.enableDelete();
|
|
380
|
+
this.myRoutes.add(card, true);
|
|
390
381
|
this.myRoutes.remove(importCard);
|
|
391
382
|
card.enableDelete(true);
|
|
392
383
|
this.emitLists('updated');
|
|
@@ -556,9 +547,10 @@ let RouteListService = (() => {
|
|
|
556
547
|
descr.previewUrl = previewUrl;
|
|
557
548
|
return;
|
|
558
549
|
}
|
|
550
|
+
this.logEvent({ message: 'preview not found', title: descr.originalName || descr.title, id: descr.id });
|
|
559
551
|
}
|
|
560
552
|
catch (err) {
|
|
561
|
-
|
|
553
|
+
this.logError(err, 'createPreview');
|
|
562
554
|
}
|
|
563
555
|
return new Promise(done => {
|
|
564
556
|
this.createPreviewQueue.push({ descr, done });
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type OSInfo = {
|
|
2
|
+
platform: string;
|
|
3
|
+
arch: string;
|
|
4
|
+
release: string;
|
|
5
|
+
};
|
|
6
|
+
export interface IAppInfo {
|
|
7
|
+
getOS(): OSInfo;
|
|
8
|
+
getAppVersion(): string;
|
|
9
|
+
getAppDir(): string;
|
|
10
|
+
getSourceDir(): string;
|
|
11
|
+
getTempDir(): string;
|
|
12
|
+
isApp(): boolean;
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IAppInfo } from '../appInfo';
|
|
2
|
+
import { IDownloadManager } from '../download';
|
|
3
|
+
import { IFileSystem } from '../fs';
|
|
4
|
+
import { IPathBinding } from '../path';
|
|
5
|
+
import { IFileLoader, IJsonRepositoryBinding } from '../repository';
|
|
6
|
+
import { IVideoProcessor } from '../video';
|
|
7
|
+
export declare class IncyclistBindings {
|
|
8
|
+
path?: IPathBinding;
|
|
9
|
+
db: IJsonRepositoryBinding;
|
|
10
|
+
loader?: IFileLoader;
|
|
11
|
+
video?: IVideoProcessor;
|
|
12
|
+
appInfo?: IAppInfo;
|
|
13
|
+
fs?: IFileSystem;
|
|
14
|
+
downloadManager?: IDownloadManager;
|
|
15
|
+
}
|
|
16
|
+
export declare const getBindings: () => IncyclistBindings;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
3
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
4
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
5
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
6
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
7
|
+
var _, done = false;
|
|
8
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
9
|
+
var context = {};
|
|
10
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
11
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
12
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
13
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
14
|
+
if (kind === "accessor") {
|
|
15
|
+
if (result === void 0) continue;
|
|
16
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
17
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
18
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
19
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
20
|
+
}
|
|
21
|
+
else if (_ = accept(result)) {
|
|
22
|
+
if (kind === "field") initializers.unshift(_);
|
|
23
|
+
else descriptor[key] = _;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
27
|
+
done = true;
|
|
28
|
+
};
|
|
29
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
30
|
+
var useValue = arguments.length > 2;
|
|
31
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
32
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
33
|
+
}
|
|
34
|
+
return useValue ? value : void 0;
|
|
35
|
+
};
|
|
36
|
+
var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
|
|
37
|
+
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
|
|
38
|
+
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.getBindings = exports.IncyclistBindings = void 0;
|
|
42
|
+
const types_1 = require("../../base/types");
|
|
43
|
+
let IncyclistBindings = (() => {
|
|
44
|
+
let _classDecorators = [types_1.Singleton];
|
|
45
|
+
let _classDescriptor;
|
|
46
|
+
let _classExtraInitializers = [];
|
|
47
|
+
let _classThis;
|
|
48
|
+
var IncyclistBindings = _classThis = class {
|
|
49
|
+
};
|
|
50
|
+
__setFunctionName(_classThis, "IncyclistBindings");
|
|
51
|
+
(() => {
|
|
52
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
53
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
54
|
+
IncyclistBindings = _classThis = _classDescriptor.value;
|
|
55
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
56
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
57
|
+
})();
|
|
58
|
+
return IncyclistBindings = _classThis;
|
|
59
|
+
})();
|
|
60
|
+
exports.IncyclistBindings = IncyclistBindings;
|
|
61
|
+
const getBindings = () => new IncyclistBindings();
|
|
62
|
+
exports.getBindings = getBindings;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import EventEmitter from "events";
|
|
3
|
+
export type DownloadProps = {
|
|
4
|
+
i?: string;
|
|
5
|
+
};
|
|
6
|
+
export interface IDownloadSession extends EventEmitter {
|
|
7
|
+
start(): any;
|
|
8
|
+
stop(): any;
|
|
9
|
+
}
|
|
10
|
+
export interface IDownloadManager {
|
|
11
|
+
createSession(url: string, fileName: string, props?: DownloadProps): IDownloadSession;
|
|
12
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface IFileSystem {
|
|
2
|
+
writeFile(...args: any[]): any;
|
|
3
|
+
readFile(...args: any[]): any;
|
|
4
|
+
appendFile(...args: any[]): any;
|
|
5
|
+
deleteFile(path: any): any;
|
|
6
|
+
createWriteStream(...args: any[]): any;
|
|
7
|
+
createReadStream(...args: any[]): any;
|
|
8
|
+
existsSync(path: string): boolean;
|
|
9
|
+
checkDir(path: string): void;
|
|
10
|
+
}
|
package/lib/src/api/index.d.ts
CHANGED
package/lib/src/api/index.js
CHANGED
|
@@ -22,5 +22,7 @@ __exportStar(require("./rest/index"), exports);
|
|
|
22
22
|
__exportStar(require("./rest/types"), exports);
|
|
23
23
|
__exportStar(require("./repository"), exports);
|
|
24
24
|
__exportStar(require("./path"), exports);
|
|
25
|
+
__exportStar(require("./bindings"), exports);
|
|
26
|
+
__exportStar(require("./overpass"), exports);
|
|
25
27
|
const path_1 = __importDefault(require("./path"));
|
|
26
28
|
exports.path = path_1.default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const OVERPASS_URL_DEFAULT: string;
|
|
2
|
+
export declare class OverpassApi {
|
|
3
|
+
protected url: string;
|
|
4
|
+
constructor(props?: any);
|
|
5
|
+
bulkQuery(queryOL: string): Promise<JSON | string>;
|
|
6
|
+
singleQuery(queryOL: string): Promise<JSON | string>;
|
|
7
|
+
rotateUrl(): void;
|
|
8
|
+
query(queryOL: string): Promise<JSON | string>;
|
|
9
|
+
}
|
|
10
|
+
export declare const useOverpassApi: () => OverpassApi;
|