incyclist-services 1.3.51 → 1.3.53

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 (64) hide show
  1. package/lib/activities/base/index.d.ts +1 -1
  2. package/lib/activities/base/index.js +1 -1
  3. package/lib/activities/base/model/index.d.ts +10 -5
  4. package/lib/activities/base/model/index.js +2 -0
  5. package/lib/activities/base/repo/db.d.ts +5 -1
  6. package/lib/activities/base/repo/db.js +89 -1
  7. package/lib/activities/base/repo/migration/factory.d.ts +7 -0
  8. package/lib/activities/base/repo/migration/factory.js +25 -0
  9. package/lib/activities/base/repo/migration/folder.d.ts +0 -0
  10. package/lib/activities/base/repo/migration/folder.js +0 -0
  11. package/lib/activities/base/repo/migration/types.d.ts +15 -0
  12. package/lib/activities/base/repo/migration/types.js +17 -0
  13. package/lib/activities/base/repo/migration/v0 copy.d.ts +5 -0
  14. package/lib/activities/base/repo/migration/v0 copy.js +20 -0
  15. package/lib/activities/base/repo/migration/v0.d.ts +5 -0
  16. package/lib/activities/base/repo/migration/v0.js +18 -0
  17. package/lib/activities/base/repo/migration/v1 copy.d.ts +5 -0
  18. package/lib/activities/base/repo/migration/v1 copy.js +21 -0
  19. package/lib/activities/base/repo/migration/v1.d.ts +5 -0
  20. package/lib/activities/base/repo/migration/v1.js +19 -0
  21. package/lib/activities/base/repo/migration/v2.d.ts +5 -0
  22. package/lib/activities/base/repo/migration/v2.js +11 -0
  23. package/lib/activities/base/repo/migration/v3.d.ts +5 -0
  24. package/lib/activities/base/repo/migration/v3.js +27 -0
  25. package/lib/activities/base/utils/activity.d.ts +32 -0
  26. package/lib/activities/base/utils/activity.js +178 -0
  27. package/lib/activities/base/utils/helpers.d.ts +4 -0
  28. package/lib/activities/base/utils/helpers.js +66 -0
  29. package/lib/activities/base/utils/index.d.ts +2 -2
  30. package/lib/activities/base/utils/index.js +15 -21
  31. package/lib/activities/list/service.d.ts +16 -10
  32. package/lib/activities/list/service.js +69 -5
  33. package/lib/activities/list/types.d.ts +40 -0
  34. package/lib/activities/ride/service.js +6 -3
  35. package/lib/activities/upload/factory.d.ts +1 -0
  36. package/lib/activities/upload/factory.js +7 -0
  37. package/lib/activities/upload/strava.d.ts +1 -0
  38. package/lib/activities/upload/strava.js +16 -0
  39. package/lib/activities/upload/types.d.ts +2 -0
  40. package/lib/activities/upload/velohero.d.ts +6 -3
  41. package/lib/activities/upload/velohero.js +86 -37
  42. package/lib/api/repository/json/index.js +8 -0
  43. package/lib/apps/base/api/index.d.ts +1 -0
  44. package/lib/apps/base/api/index.js +1 -0
  45. package/lib/apps/base/api/velohero/api.d.ts +2 -2
  46. package/lib/apps/base/api/velohero/api.js +1 -1
  47. package/lib/apps/base/api/velohero/types.d.ts +2 -0
  48. package/lib/apps/base/index.d.ts +1 -0
  49. package/lib/apps/base/index.js +17 -0
  50. package/lib/apps/index.d.ts +2 -0
  51. package/lib/apps/index.js +18 -0
  52. package/lib/apps/service.d.ts +10 -0
  53. package/lib/apps/service.js +93 -0
  54. package/lib/apps/types.d.ts +6 -0
  55. package/lib/apps/types.js +2 -0
  56. package/lib/base/service.d.ts +3 -0
  57. package/lib/base/service.js +10 -1
  58. package/lib/base/types/singleton.js +9 -1
  59. package/lib/routes/base/parsers/incyclist.js +10 -2
  60. package/lib/routes/list/service.d.ts +1 -0
  61. package/lib/routes/list/service.js +9 -0
  62. package/lib/settings/user/service.d.ts +4 -0
  63. package/lib/settings/user/service.js +32 -25
  64. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  export * from './repo';
2
2
  export * from './model';
3
- export * from './utils';
4
3
  export * from './convert';
5
4
  export * from './api/fitconvert';
5
+ export * from './utils';
@@ -16,6 +16,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./repo"), exports);
18
18
  __exportStar(require("./model"), exports);
19
- __exportStar(require("./utils"), exports);
20
19
  __exportStar(require("./convert"), exports);
21
20
  __exportStar(require("./api/fitconvert"), exports);
21
+ __exportStar(require("./utils"), exports);
@@ -1,4 +1,5 @@
1
1
  import { RoutePoint } from "../../../routes/base/types";
2
+ export declare const DEFAULT_ACTIVITY_TITLE = "Incyclist Ride";
2
3
  export type ActivityUser = {
3
4
  uuid?: string;
4
5
  weight: number;
@@ -8,6 +9,7 @@ export type ActivityRoute = {
8
9
  id?: string;
9
10
  hash: string;
10
11
  name: string;
12
+ title?: string;
11
13
  };
12
14
  export type ActivityStatsRecord = {
13
15
  min: number;
@@ -26,12 +28,14 @@ export type ActivityStats = {
26
28
  power: ActivityStatsRecord;
27
29
  powerCurve?: Record<string, number>;
28
30
  };
29
- export type StravaAppLink = {
30
- upload_id: number;
31
- activity_id: number;
32
- };
31
+ export interface ActivityAppLink {
32
+ error?: string;
33
+ activity_id?: string;
34
+ url?: string;
35
+ }
33
36
  export type ActivityAppLinks = {
34
- strava?: StravaAppLink;
37
+ strava?: ActivityAppLink;
38
+ velohero?: ActivityAppLink;
35
39
  };
36
40
  export type ScreenShotInfo = {
37
41
  fileName: string;
@@ -63,6 +67,7 @@ export type ActivitySummary = {
63
67
  endPos?: number;
64
68
  segment?: string;
65
69
  realityFactor: number;
70
+ totalElevation: number;
66
71
  uploadStatus: Array<UploadInfo>;
67
72
  isCompleted?: boolean;
68
73
  isSaved?: boolean;
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_ACTIVITY_TITLE = void 0;
4
+ exports.DEFAULT_ACTIVITY_TITLE = 'Incyclist Ride';
@@ -3,7 +3,7 @@ import { JsonRepository } from "../../../api";
3
3
  import { Observer, PromiseObserver } from "../../../base/types/observer";
4
4
  import { ActivityDetails, ActivityInfo } from "../model";
5
5
  import { ActivitySearchCriteria } from "./types";
6
- export declare const DB_VERSION = "3";
6
+ export declare const DB_VERSION = "4";
7
7
  export declare const DB_NAME = "db";
8
8
  export declare class ActivitiesRepository {
9
9
  protected repo: JsonRepository;
@@ -18,6 +18,8 @@ export declare class ActivitiesRepository {
18
18
  load(): Observer;
19
19
  stopLoad(): void;
20
20
  save(activity: ActivityInfo, writeDetails?: boolean): Promise<void>;
21
+ migrate(activity: ActivityInfo, writeSummary?: boolean): ActivityDetails;
22
+ migrateDB(): Promise<void>;
21
23
  getFilename(activityName: string): string;
22
24
  delete(activity: ActivityInfo | string): Promise<void>;
23
25
  get(id: string): ActivityInfo;
@@ -43,6 +45,7 @@ export declare class ActivitiesRepository {
43
45
  protected listActivities(): Promise<Array<string>>;
44
46
  protected fixMissingHash(): Promise<void>;
45
47
  protected loadDetailsByName(name: string): Promise<ActivityDetails>;
48
+ protected loadDetailsById(id: string): Promise<ActivityDetails>;
46
49
  protected loadDetails(name: string, id?: string): Promise<void>;
47
50
  protected bulkAddActivities(names: Array<string>): Promise<void>;
48
51
  protected writeDetails(activity: ActivityInfo): Promise<void>;
@@ -51,4 +54,5 @@ export declare class ActivitiesRepository {
51
54
  protected getActivity(id: string): ActivityInfo;
52
55
  protected logError(err: Error, fn: string, logProps?: any): void;
53
56
  protected getRepo(): JsonRepository;
57
+ protected getRouteList(): import("../../../routes").RouteListService;
54
58
  }
@@ -54,7 +54,9 @@ const types_1 = require("../../../base/types");
54
54
  const observer_1 = require("../../../base/types/observer");
55
55
  const utils_1 = require("../../../utils");
56
56
  const utils_2 = require("../utils");
57
- exports.DB_VERSION = '3';
57
+ const routes_1 = require("../../../routes");
58
+ const factory_1 = require("./migration/factory");
59
+ exports.DB_VERSION = '4';
58
60
  exports.DB_NAME = 'db';
59
61
  let ActivitiesRepository = (() => {
60
62
  let _classDecorators = [types_1.Singleton];
@@ -100,6 +102,73 @@ let ActivitiesRepository = (() => {
100
102
  }
101
103
  });
102
104
  }
105
+ migrate(activity, writeSummary = true) {
106
+ try {
107
+ const { details } = activity !== null && activity !== void 0 ? activity : {};
108
+ if (!details)
109
+ return;
110
+ let summaryChanged = false;
111
+ let detailsChanged = false;
112
+ const { version } = details;
113
+ if (version === exports.DB_VERSION)
114
+ return details;
115
+ const verNo = version === undefined ? 0 : Number(version);
116
+ const currentVerNo = Number(exports.DB_VERSION);
117
+ factory_1.ActivitiesDBMigratorFactory.inject('repo', this);
118
+ factory_1.ActivitiesDBMigratorFactory.inject('routeList', this.getRouteList());
119
+ for (let i = 1; i <= currentVerNo; i++) {
120
+ if (verNo < i) {
121
+ const migrater = factory_1.ActivitiesDBMigratorFactory.create(i - 1);
122
+ if (migrater) {
123
+ const res = migrater.migrate(activity);
124
+ summaryChanged = summaryChanged || (res === null || res === void 0 ? void 0 : res.summaryChanged);
125
+ detailsChanged = detailsChanged || (res === null || res === void 0 ? void 0 : res.detailsChanged);
126
+ }
127
+ }
128
+ }
129
+ details.version = exports.DB_VERSION;
130
+ this.writeDetails(activity);
131
+ if (summaryChanged && writeSummary) {
132
+ this.writeRepo();
133
+ }
134
+ return details;
135
+ }
136
+ catch (err) {
137
+ this.logError(err, 'migrate', { activity });
138
+ }
139
+ }
140
+ migrateDB() {
141
+ return __awaiter(this, void 0, void 0, function* () {
142
+ let deleted = [];
143
+ try {
144
+ const promises = [];
145
+ this.activities.forEach(activity => {
146
+ if (activity.details) {
147
+ const details = this.migrate(activity);
148
+ activity.summary = (0, utils_2.buildSummary)(details !== null && details !== void 0 ? details : activity.details);
149
+ }
150
+ else
151
+ promises.push(this.loadDetailsById(activity.summary.id).then((details) => {
152
+ if (!details) {
153
+ deleted.push(activity.summary.id);
154
+ return;
155
+ }
156
+ const updated = Object.assign(Object.assign({}, activity), { details });
157
+ const updatedDetails = this.migrate(updated, false);
158
+ activity.summary = (0, utils_2.buildSummary)(updatedDetails !== null && updatedDetails !== void 0 ? updatedDetails : details);
159
+ }));
160
+ });
161
+ yield Promise.allSettled(promises);
162
+ if (deleted.length) {
163
+ this.activities = this.activities.filter(ai => !deleted.includes(ai.summary.id));
164
+ }
165
+ yield this.writeRepo();
166
+ }
167
+ catch (err) {
168
+ this.logError(err, 'migrateDB');
169
+ }
170
+ });
171
+ }
103
172
  getFilename(activityName) {
104
173
  const baseDir = this.getRepo().getPath();
105
174
  const path = (0, api_1.getBindings)().path;
@@ -302,6 +371,16 @@ let ActivitiesRepository = (() => {
302
371
  this.write(true);
303
372
  }
304
373
  yield this.fixMissingHash();
374
+ if (dbData.version !== exports.DB_VERSION) {
375
+ this.logger.logEvent({ message: 'migrating activities database', from: exports.DB_VERSION, to: exports.DB_VERSION });
376
+ try {
377
+ yield this.migrateDB();
378
+ this.logger.logEvent({ message: 'finished migrating activities database', from: exports.DB_VERSION, to: exports.DB_VERSION });
379
+ }
380
+ catch (err) {
381
+ this.logError(err, 'loadSummaries');
382
+ }
383
+ }
305
384
  return;
306
385
  }
307
386
  yield this.buildFromLegacy();
@@ -354,6 +433,12 @@ let ActivitiesRepository = (() => {
354
433
  return details;
355
434
  });
356
435
  }
436
+ loadDetailsById(id) {
437
+ return __awaiter(this, void 0, void 0, function* () {
438
+ const activity = this.getActivity(id);
439
+ return yield this.loadDetailsByName(activity.summary.name);
440
+ });
441
+ }
357
442
  loadDetails(name, id) {
358
443
  return __awaiter(this, void 0, void 0, function* () {
359
444
  const details = yield this.loadDetailsByName(name);
@@ -431,6 +516,9 @@ let ActivitiesRepository = (() => {
431
516
  this.repo = api_1.JsonRepository.create('activities');
432
517
  return this.repo;
433
518
  }
519
+ getRouteList() {
520
+ return (0, routes_1.useRouteList)();
521
+ }
434
522
  };
435
523
  __setFunctionName(_classThis, "ActivitiesRepository");
436
524
  (() => {
@@ -0,0 +1,7 @@
1
+ import { ActivitiesDBMigrator, IActivityDBMigrator } from "./types";
2
+ export declare class ActivitiesDBMigratorFactory {
3
+ static readonly migrators: Array<typeof ActivitiesDBMigrator>;
4
+ static readonly injected: Record<string, any>;
5
+ static inject(string: any, value: any): void;
6
+ static create(version: number): IActivityDBMigrator;
7
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActivitiesDBMigratorFactory = void 0;
4
+ const v0_1 = require("./v0");
5
+ const v1_1 = require("./v1");
6
+ const v2_1 = require("./v2");
7
+ const v3_1 = require("./v3");
8
+ class ActivitiesDBMigratorFactory {
9
+ static inject(string, value) {
10
+ this.injected[string] = value;
11
+ }
12
+ static create(version) {
13
+ const Migrator = this.migrators[version];
14
+ if (Migrator)
15
+ return new Migrator(this.injected);
16
+ }
17
+ }
18
+ exports.ActivitiesDBMigratorFactory = ActivitiesDBMigratorFactory;
19
+ ActivitiesDBMigratorFactory.migrators = [
20
+ v0_1.MigrationV0,
21
+ v1_1.MigrationV1,
22
+ v2_1.MigrationV2,
23
+ v3_1.MigrationV3
24
+ ];
25
+ ActivitiesDBMigratorFactory.injected = {};
File without changes
File without changes
@@ -0,0 +1,15 @@
1
+ import { RouteListService } from "../../../../routes";
2
+ import { ActivityInfo } from "../../model";
3
+ export type MigrationResult = {
4
+ summaryChanged?: boolean;
5
+ detailsChanged?: boolean;
6
+ };
7
+ export interface IActivityDBMigrator {
8
+ migrate(activity: ActivityInfo): MigrationResult;
9
+ }
10
+ export declare class ActivitiesDBMigrator implements IActivityDBMigrator {
11
+ protected injected: Record<string, any>;
12
+ constructor(injected?: Record<string, any>);
13
+ migrate(activity: ActivityInfo): MigrationResult;
14
+ getRouteList(): RouteListService;
15
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActivitiesDBMigrator = void 0;
4
+ const routes_1 = require("../../../../routes");
5
+ class ActivitiesDBMigrator {
6
+ constructor(injected = {}) {
7
+ this.injected = injected;
8
+ }
9
+ migrate(activity) {
10
+ throw new Error("Method not implemented.");
11
+ }
12
+ getRouteList() {
13
+ var _a;
14
+ return (_a = this.injected['routeList']) !== null && _a !== void 0 ? _a : (0, routes_1.useRouteList)();
15
+ }
16
+ }
17
+ exports.ActivitiesDBMigrator = ActivitiesDBMigrator;
@@ -0,0 +1,5 @@
1
+ import { ActivityInfo } from "../../model";
2
+ import { ActivitiesDBMigrator, MigrationResult } from "./types";
3
+ export declare class MigrationV0 extends ActivitiesDBMigrator {
4
+ migrate(activity: ActivityInfo): MigrationResult;
5
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationV0 = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const types_1 = require("./types");
6
+ class MigrationV0 extends types_1.ActivitiesDBMigrator {
7
+ migrate(activity) {
8
+ if (!activity)
9
+ return {};
10
+ const { summary, details } = activity;
11
+ details.logs.forEach(log => {
12
+ log.lng = log.lon;
13
+ delete log.lon;
14
+ });
15
+ details.name = summary.name;
16
+ details.totalElevation = summary.totalElevation = (0, utils_1.getTotalElevation)(details);
17
+ return { summaryChanged: true };
18
+ }
19
+ }
20
+ exports.MigrationV0 = MigrationV0;
@@ -0,0 +1,5 @@
1
+ import { ActivityInfo } from "../../model";
2
+ import { ActivitiesDBMigrator, MigrationResult } from "./types";
3
+ export declare class MigrationV0 extends ActivitiesDBMigrator {
4
+ migrate(activity: ActivityInfo): MigrationResult;
5
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationV0 = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const types_1 = require("./types");
6
+ class MigrationV0 extends types_1.ActivitiesDBMigrator {
7
+ migrate(activity) {
8
+ const { summary, details } = activity;
9
+ details.logs.forEach(log => {
10
+ log.lng = log.lon;
11
+ delete log.lon;
12
+ });
13
+ details.name = summary.name;
14
+ details.totalElevation = summary.totalElevation = (0, utils_1.getTotalElevation)(details);
15
+ return { summaryChanged: true };
16
+ }
17
+ }
18
+ exports.MigrationV0 = MigrationV0;
@@ -0,0 +1,5 @@
1
+ import { ActivityInfo } from "../../model";
2
+ import { ActivitiesDBMigrator, MigrationResult } from "./types";
3
+ export declare class MigrationV1 extends ActivitiesDBMigrator {
4
+ migrate(activity: ActivityInfo): MigrationResult;
5
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationV1 = void 0;
4
+ const types_1 = require("./types");
5
+ class MigrationV1 extends types_1.ActivitiesDBMigrator {
6
+ migrate(activity) {
7
+ if (!activity)
8
+ return {};
9
+ const { summary, details } = activity;
10
+ let detailsChanged = false;
11
+ if (details.routeType === 'Video' && details.route) {
12
+ const route = this.getRouteList().getRouteDescription(details.route.id);
13
+ if (route.originalName) {
14
+ details.route.name = route.originalName;
15
+ detailsChanged = true;
16
+ }
17
+ }
18
+ return { detailsChanged };
19
+ }
20
+ }
21
+ exports.MigrationV1 = MigrationV1;
@@ -0,0 +1,5 @@
1
+ import { ActivityInfo } from "../../model";
2
+ import { ActivitiesDBMigrator, MigrationResult } from "./types";
3
+ export declare class MigrationV1 extends ActivitiesDBMigrator {
4
+ migrate(activity: ActivityInfo): MigrationResult;
5
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationV1 = void 0;
4
+ const types_1 = require("./types");
5
+ class MigrationV1 extends types_1.ActivitiesDBMigrator {
6
+ migrate(activity) {
7
+ const { details } = activity;
8
+ let detailsChanged = false;
9
+ if (details.routeType === 'Video' && details.route) {
10
+ const route = this.getRouteList().getRouteDescription(details.route.id);
11
+ if (route === null || route === void 0 ? void 0 : route.originalName) {
12
+ details.route.name = route.originalName;
13
+ detailsChanged = true;
14
+ }
15
+ }
16
+ return { detailsChanged };
17
+ }
18
+ }
19
+ exports.MigrationV1 = MigrationV1;
@@ -0,0 +1,5 @@
1
+ import { ActivityInfo } from "../../model";
2
+ import { ActivitiesDBMigrator, MigrationResult } from "./types";
3
+ export declare class MigrationV2 extends ActivitiesDBMigrator {
4
+ migrate(activity: ActivityInfo): MigrationResult;
5
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationV2 = void 0;
4
+ const types_1 = require("./types");
5
+ class MigrationV2 extends types_1.ActivitiesDBMigrator {
6
+ migrate(activity) {
7
+ activity.details.startTime = new Date(activity.details.startTime).toISOString();
8
+ return { detailsChanged: true };
9
+ }
10
+ }
11
+ exports.MigrationV2 = MigrationV2;
@@ -0,0 +1,5 @@
1
+ import { ActivityInfo } from "../../model";
2
+ import { ActivitiesDBMigrator, MigrationResult } from "./types";
3
+ export declare class MigrationV3 extends ActivitiesDBMigrator {
4
+ migrate(activity: ActivityInfo): MigrationResult;
5
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MigrationV3 = void 0;
4
+ const model_1 = require("../../model");
5
+ const types_1 = require("./types");
6
+ class MigrationV3 extends types_1.ActivitiesDBMigrator {
7
+ migrate(activity) {
8
+ const { summary, details } = activity;
9
+ let detailsChanged = false;
10
+ if (details.routeType === 'Video' && details.route) {
11
+ const route = this.getRouteList().getRouteDescription(details.route.id);
12
+ if (route === null || route === void 0 ? void 0 : route.title) {
13
+ details.route.title = route.title;
14
+ detailsChanged = true;
15
+ }
16
+ }
17
+ if (summary.title === model_1.DEFAULT_ACTIVITY_TITLE) {
18
+ if (details.routeType === 'Video' && details.route)
19
+ summary.title = details.route.title;
20
+ else if (details.route)
21
+ summary.title = details.route.name;
22
+ }
23
+ summary.totalElevation = details.totalElevation;
24
+ return { detailsChanged, summaryChanged: true };
25
+ }
26
+ }
27
+ exports.MigrationV3 = MigrationV3;
@@ -0,0 +1,32 @@
1
+ import { PromiseObserver } from "../../../base/types";
2
+ import { DisplayExportInfo, DisplayUploadInfo } from "../../list";
3
+ import { ActivityInfo } from "../model";
4
+ import { ActivitiesRepository } from "../repo";
5
+ import { RouteCard, RouteSettings } from "../../../routes/list/cards/RouteCard";
6
+ import { OnlineStateMonitoringService } from "../../../monitoring";
7
+ export declare class Activity implements ActivityInfo {
8
+ protected info: ActivityInfo;
9
+ protected loadingObserver: PromiseObserver<void>;
10
+ constructor(info: ActivityInfo);
11
+ get summary(): import("../model").ActivitySummary;
12
+ set summary(summary: import("../model").ActivitySummary);
13
+ get details(): import("../model").ActivityDetails;
14
+ set details(details: import("../model").ActivityDetails);
15
+ get id(): string;
16
+ setLoading(loading: PromiseObserver<void>): void;
17
+ isLoading(): boolean;
18
+ load(): Promise<void>;
19
+ isComplete(): boolean;
20
+ getTitle(): string;
21
+ getElevation(): number;
22
+ getExports(): Array<DisplayExportInfo>;
23
+ isRouteAvailable(): boolean;
24
+ getUploadStatus(): Array<DisplayUploadInfo>;
25
+ canStart(): boolean;
26
+ getRouteCard(): RouteCard;
27
+ createStartSettings(): RouteSettings;
28
+ protected getOnlineMonitoring(): OnlineStateMonitoringService;
29
+ protected save(): Promise<void>;
30
+ protected getRepo(): ActivitiesRepository;
31
+ protected getAppsService(): import("../../../apps").AppsService;
32
+ }