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.
Files changed (213) hide show
  1. package/lib/__tests__/utils/loadFile.js +1 -1
  2. package/lib/base/cardlist/index.d.ts +0 -1
  3. package/lib/base/types/index.d.ts +1 -0
  4. package/lib/base/types/index.js +1 -0
  5. package/lib/base/types/lists.d.ts +14 -0
  6. package/lib/base/types/lists.js +21 -0
  7. package/lib/routes/base/api/index.js +0 -1
  8. package/lib/routes/base/api/types.d.ts +4 -2
  9. package/lib/routes/base/parsers/gpx.js +2 -1
  10. package/lib/routes/base/parsers/xml.js +14 -3
  11. package/lib/routes/base/utils/localization.js +7 -1
  12. package/lib/routes/base/utils/route.d.ts +1 -0
  13. package/lib/routes/base/utils/route.js +17 -1
  14. package/lib/routes/list/cards/RouteCard.js +4 -2
  15. package/lib/routes/list/cards/base.d.ts +0 -1
  16. package/lib/routes/list/cards/base.js +0 -3
  17. package/lib/routes/list/loaders/db.js +23 -1
  18. package/lib/routes/list/service.js +13 -21
  19. package/lib/src/activities/service.d.ts +0 -0
  20. package/lib/src/activities/service.js +0 -0
  21. package/lib/src/api/appInfo/index.d.ts +13 -0
  22. package/lib/src/api/appInfo/index.js +2 -0
  23. package/lib/src/api/bindings/index.d.ts +16 -0
  24. package/lib/src/api/bindings/index.js +62 -0
  25. package/lib/src/api/download/index.d.ts +12 -0
  26. package/lib/src/api/download/index.js +2 -0
  27. package/lib/src/api/fs/index.d.ts +10 -0
  28. package/lib/src/api/fs/index.js +2 -0
  29. package/lib/src/api/index.d.ts +2 -0
  30. package/lib/src/api/index.js +2 -0
  31. package/lib/src/api/overpass/index.d.ts +10 -0
  32. package/lib/src/api/overpass/index.js +110 -0
  33. package/lib/src/api/repository/json/index.d.ts +3 -5
  34. package/lib/src/api/repository/json/index.js +12 -12
  35. package/lib/src/api/repository/types.d.ts +2 -0
  36. package/lib/src/api/video/index.d.ts +4 -2
  37. package/lib/src/base/cardlist/index.d.ts +5 -1
  38. package/lib/src/base/cardlist/index.js +4 -2
  39. package/lib/src/base/service.d.ts +3 -3
  40. package/lib/src/base/types/index.d.ts +1 -0
  41. package/lib/src/base/types/index.js +1 -0
  42. package/lib/src/base/types/lists.d.ts +14 -0
  43. package/lib/src/base/types/lists.js +21 -0
  44. package/lib/src/base/types/observer.d.ts +5 -0
  45. package/lib/src/base/types/observer.js +35 -8
  46. package/lib/src/base/types/singleton.d.ts +1 -1
  47. package/lib/src/base/types/singleton.js +3 -2
  48. package/lib/src/coaches/coach.d.ts +30 -0
  49. package/lib/src/coaches/coach.js +108 -0
  50. package/lib/src/coaches/index.d.ts +3 -0
  51. package/lib/src/coaches/index.js +19 -0
  52. package/lib/src/coaches/service.d.ts +32 -0
  53. package/lib/src/coaches/service.js +246 -0
  54. package/lib/src/coaches/types.d.ts +24 -0
  55. package/lib/src/coaches/types.js +2 -0
  56. package/lib/src/devices/configuration/service.js +4 -2
  57. package/lib/src/devices/pairing/service.js +13 -2
  58. package/lib/src/devices/ride/service.js +4 -3
  59. package/lib/src/i18n/countries/countries.json +255 -0
  60. package/lib/src/i18n/countries/index.d.ts +17 -0
  61. package/lib/src/i18n/countries/index.js +137 -0
  62. package/lib/src/i18n/countries/model.d.ts +18 -0
  63. package/lib/src/i18n/countries/model.js +2 -0
  64. package/lib/src/index.d.ts +1 -0
  65. package/lib/src/index.js +1 -0
  66. package/lib/src/routes/base/api/index.d.ts +1 -0
  67. package/lib/src/routes/base/api/index.js +12 -0
  68. package/lib/src/routes/base/api/types.d.ts +9 -2
  69. package/lib/src/routes/base/model/route.d.ts +9 -1
  70. package/lib/src/routes/base/model/route.js +41 -2
  71. package/lib/src/routes/base/parsers/bikelab.d.ts +12 -0
  72. package/lib/src/routes/base/parsers/bikelab.js +117 -0
  73. package/lib/src/routes/base/parsers/epm.d.ts +23 -0
  74. package/lib/src/routes/base/parsers/epm.js +241 -0
  75. package/lib/src/routes/base/parsers/factory.d.ts +2 -1
  76. package/lib/src/routes/base/parsers/factory.js +12 -1
  77. package/lib/src/routes/base/parsers/gpx.d.ts +13 -6
  78. package/lib/src/routes/base/parsers/gpx.js +58 -21
  79. package/lib/src/routes/base/parsers/incyclist.d.ts +7 -0
  80. package/lib/src/routes/base/parsers/incyclist.js +74 -0
  81. package/lib/src/routes/base/parsers/index.d.ts +6 -0
  82. package/lib/src/routes/base/parsers/index.js +41 -3
  83. package/lib/src/routes/base/parsers/multixml.d.ts +5 -4
  84. package/lib/src/routes/base/parsers/multixml.js +17 -4
  85. package/lib/src/routes/base/parsers/utils.d.ts +18 -3
  86. package/lib/src/routes/base/parsers/utils.js +69 -34
  87. package/lib/src/routes/base/parsers/xml.d.ts +5 -3
  88. package/lib/src/routes/base/parsers/xml.js +83 -14
  89. package/lib/src/routes/base/types/index.d.ts +46 -6
  90. package/lib/src/routes/base/utils/localization.js +1 -1
  91. package/lib/src/routes/base/utils/route.d.ts +26 -1
  92. package/lib/src/routes/base/utils/route.js +217 -6
  93. package/lib/src/routes/download/service.d.ts +18 -0
  94. package/lib/src/routes/download/service.js +116 -0
  95. package/lib/src/routes/download/types.d.ts +8 -0
  96. package/lib/src/routes/download/types.js +18 -0
  97. package/lib/src/routes/list/RouteListObserver.d.ts +13 -0
  98. package/lib/src/routes/list/RouteListObserver.js +21 -0
  99. package/lib/src/routes/list/cards/ActiveImportCard.d.ts +28 -0
  100. package/lib/src/routes/list/cards/ActiveImportCard.js +66 -0
  101. package/lib/src/routes/list/cards/FreeRideCard.d.ts +42 -0
  102. package/lib/src/routes/list/cards/FreeRideCard.js +119 -0
  103. package/lib/src/routes/list/cards/RouteCard.d.ts +116 -0
  104. package/lib/src/routes/list/cards/RouteCard.js +557 -0
  105. package/lib/src/routes/list/cards/RouteImportCard.d.ts +19 -0
  106. package/lib/src/routes/list/cards/RouteImportCard.js +40 -0
  107. package/lib/src/routes/list/cards/base.d.ts +20 -0
  108. package/lib/src/routes/list/cards/base.js +63 -0
  109. package/lib/src/routes/list/cards/types.d.ts +19 -0
  110. package/lib/src/routes/list/cards/types.js +10 -0
  111. package/lib/src/routes/list/lists/alternatives.d.ts +5 -0
  112. package/lib/src/routes/list/lists/alternatives.js +28 -0
  113. package/lib/src/routes/list/lists/myroutes.d.ts +10 -0
  114. package/lib/src/routes/list/lists/myroutes.js +58 -0
  115. package/lib/src/routes/list/lists/selected.d.ts +5 -0
  116. package/lib/src/routes/list/lists/selected.js +32 -0
  117. package/lib/src/routes/list/loaders/DBLoader.d.ts +21 -0
  118. package/lib/src/routes/list/loaders/DBLoader.js +65 -0
  119. package/lib/src/routes/list/loaders/LegacyDB.d.ts +17 -0
  120. package/lib/src/routes/list/loaders/LegacyDB.js +158 -0
  121. package/lib/src/routes/list/loaders/api.d.ts +25 -0
  122. package/lib/src/routes/list/loaders/api.js +179 -0
  123. package/lib/src/routes/list/loaders/db.d.ts +41 -0
  124. package/lib/src/routes/list/loaders/db.js +319 -0
  125. package/lib/src/routes/list/loaders/types.d.ts +43 -0
  126. package/lib/src/routes/list/loaders/types.js +126 -0
  127. package/lib/src/routes/list/service.d.ts +69 -34
  128. package/lib/src/routes/list/service.js +555 -109
  129. package/lib/src/routes/list/types.d.ts +22 -4
  130. package/lib/src/settings/user/service.d.ts +8 -0
  131. package/lib/src/settings/user/service.js +19 -3
  132. package/lib/src/utils/geo.d.ts +1 -0
  133. package/lib/src/utils/geo.js +18 -1
  134. package/lib/src/utils/index.d.ts +1 -0
  135. package/lib/src/utils/index.js +1 -0
  136. package/lib/src/utils/nextTick.d.ts +1 -0
  137. package/lib/src/utils/nextTick.js +14 -0
  138. package/lib/src/workouts/base/api/consts.d.ts +9 -0
  139. package/lib/src/workouts/base/api/consts.js +13 -0
  140. package/lib/src/workouts/base/api/index.d.ts +15 -0
  141. package/lib/src/workouts/base/api/index.js +132 -0
  142. package/lib/src/workouts/base/model/Segment.d.ts +18 -0
  143. package/lib/src/workouts/base/model/Segment.js +139 -0
  144. package/lib/src/workouts/base/model/Step.d.ts +35 -0
  145. package/lib/src/workouts/base/model/Step.js +158 -0
  146. package/lib/src/workouts/base/model/Workout.d.ts +24 -0
  147. package/lib/src/workouts/base/model/Workout.js +84 -0
  148. package/lib/src/workouts/base/model/types.d.ts +60 -0
  149. package/lib/src/workouts/base/model/types.js +2 -0
  150. package/lib/src/workouts/base/parsers/Json.d.ts +12 -0
  151. package/lib/src/workouts/base/parsers/Json.js +70 -0
  152. package/lib/src/workouts/base/parsers/factory.d.ts +11 -0
  153. package/lib/src/workouts/base/parsers/factory.js +92 -0
  154. package/lib/src/workouts/base/parsers/index.d.ts +5 -0
  155. package/lib/src/workouts/base/parsers/index.js +51 -0
  156. package/lib/src/workouts/base/parsers/types.d.ts +8 -0
  157. package/lib/src/workouts/base/parsers/types.js +2 -0
  158. package/lib/src/workouts/base/parsers/zwo.d.ts +32 -0
  159. package/lib/src/workouts/base/parsers/zwo.js +249 -0
  160. package/lib/src/workouts/base/parsers/zwo.unit.test_.d.ts +1 -0
  161. package/lib/src/workouts/base/parsers/zwo.unit.test_.js +326 -0
  162. package/lib/src/workouts/list/cards/WorkoutCard.d.ts +31 -0
  163. package/lib/src/workouts/list/cards/WorkoutCard.js +91 -0
  164. package/lib/src/workouts/list/cards/WorkoutImportCard.d.ts +19 -0
  165. package/lib/src/workouts/list/cards/WorkoutImportCard.js +40 -0
  166. package/lib/src/workouts/list/cards/base.d.ts +19 -0
  167. package/lib/src/workouts/list/cards/base.js +51 -0
  168. package/lib/src/workouts/list/cards/types.d.ts +19 -0
  169. package/lib/src/workouts/list/cards/types.js +8 -0
  170. package/lib/src/workouts/list/loaders/api.d.ts +11 -0
  171. package/lib/src/workouts/list/loaders/api.js +60 -0
  172. package/lib/src/workouts/list/loaders/db.d.ts +21 -0
  173. package/lib/src/workouts/list/loaders/db.js +139 -0
  174. package/lib/src/workouts/list/loaders/db.unit.test_.d.ts +0 -0
  175. package/lib/src/workouts/list/loaders/db.unit.test_.js +0 -0
  176. package/lib/src/workouts/list/loaders/loader.d.ts +10 -0
  177. package/lib/src/workouts/list/loaders/loader.js +19 -0
  178. package/lib/src/workouts/list/service.d.ts +33 -0
  179. package/lib/src/workouts/list/service.js +218 -0
  180. package/lib/src/workouts/list/types.d.ts +0 -0
  181. package/lib/src/workouts/list/types.js +0 -0
  182. package/lib/workouts/base/api/consts.d.ts +9 -0
  183. package/lib/workouts/base/api/consts.js +13 -0
  184. package/lib/workouts/base/api/index.d.ts +15 -0
  185. package/lib/workouts/base/api/index.js +132 -0
  186. package/lib/workouts/base/model/Workout.d.ts +17 -3
  187. package/lib/workouts/base/model/Workout.js +44 -2
  188. package/lib/workouts/base/model/types.d.ts +17 -1
  189. package/lib/workouts/base/parsers/Json.d.ts +1 -1
  190. package/lib/workouts/base/parsers/Json.js +3 -6
  191. package/lib/workouts/base/parsers/index.d.ts +1 -1
  192. package/lib/workouts/base/parsers/types.d.ts +1 -1
  193. package/lib/workouts/base/parsers/zwo.d.ts +1 -1
  194. package/lib/workouts/base/parsers/zwo.js +2 -2
  195. package/lib/workouts/list/cards/WorkoutCard.d.ts +31 -0
  196. package/lib/workouts/list/cards/WorkoutCard.js +91 -0
  197. package/lib/workouts/list/cards/WorkoutImportCard.d.ts +2 -2
  198. package/lib/workouts/list/cards/WorkoutImportCard.js +3 -3
  199. package/lib/workouts/list/cards/base.d.ts +1 -2
  200. package/lib/workouts/list/cards/base.js +0 -3
  201. package/lib/workouts/list/loaders/api.d.ts +11 -0
  202. package/lib/workouts/list/loaders/api.js +60 -0
  203. package/lib/workouts/list/loaders/db.d.ts +21 -0
  204. package/lib/workouts/list/loaders/db.js +139 -0
  205. package/lib/workouts/list/loaders/db.unit.test_.d.ts +0 -0
  206. package/lib/workouts/list/loaders/db.unit.test_.js +0 -0
  207. package/lib/workouts/list/loaders/loader.d.ts +10 -0
  208. package/lib/workouts/list/loaders/loader.js +19 -0
  209. package/lib/workouts/list/service.d.ts +30 -1
  210. package/lib/workouts/list/service.js +152 -0
  211. package/lib/workouts/list/types.d.ts +0 -0
  212. package/lib/workouts/list/types.js +0 -0
  213. 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);
@@ -1,7 +1,6 @@
1
1
  import { PromiseObserver } from "../types/observer";
2
2
  export interface Card<T> {
3
3
  getId(): string;
4
- getState(): any;
5
4
  getData(): T;
6
5
  setData(data: T): any;
7
6
  getCardType(): any;
@@ -1 +1,2 @@
1
1
  export * from "./singleton";
2
+ export * from './lists';
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./singleton"), exports);
18
+ __exportStar(require("./lists"), exports);
@@ -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;
@@ -88,7 +88,6 @@ class IncyclistRoutesApi {
88
88
  return (_a = res.data) === null || _a === void 0 ? void 0 : _a.url;
89
89
  }
90
90
  catch (err) {
91
- this.logger.logEvent({ message: 'preview not found', routeId });
92
91
  return undefined;
93
92
  }
94
93
  });
@@ -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: route.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: data['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: route.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
- const file = route === null || route === void 0 ? void 0 : route.previewUrlLocal;
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
- if (language && data.localizedTitle) {
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();
@@ -8,7 +8,6 @@ export declare class BaseCard implements Card<Route> {
8
8
  reset(): void;
9
9
  delete(): PromiseObserver<boolean>;
10
10
  getId(): string;
11
- getState(): void;
12
11
  getData(): Route;
13
12
  setData(_data: Route): void;
14
13
  getCardType(): void;
@@ -19,9 +19,6 @@ class BaseCard {
19
19
  getId() {
20
20
  throw new Error("Method not implemented.");
21
21
  }
22
- getState() {
23
- throw new Error("Method not implemented.");
24
- }
25
22
  getData() {
26
23
  throw new Error("Method not implemented.");
27
24
  }
@@ -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
- if (existing.list.getId() === this.myRoutes.getId()) {
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
- console.log('~~~ ERR', err);
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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -2,5 +2,7 @@ export * from './rest/index';
2
2
  export * from './rest/types';
3
3
  export * from './repository';
4
4
  export * from './path';
5
+ export * from './bindings';
6
+ export * from './overpass';
5
7
  import path from './path';
6
8
  export { path };
@@ -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;