@christianriedl/media 1.0.283 → 1.0.285

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@christianriedl/media",
3
- "version": "1.0.283",
3
+ "version": "1.0.285",
4
4
  "description": "RIC media interfaces",
5
5
 
6
6
  "main": "dist/index.js",
@@ -19,7 +19,7 @@
19
19
  "license": "ISC",
20
20
  "dependencies": {
21
21
  "@christianriedl/utils": "^1.0.171",
22
- "@christianriedl/rest": "^1.0.90",
22
+ "@christianriedl/rest": "^1.0.93",
23
23
  "@christianriedl/epg": "^1.0.44",
24
24
  "buffer": "^6.0.3"
25
25
  },
@@ -238,13 +238,14 @@
238
238
  function createPin(loc: google.maps.LatLng, text: string, color: string, background: string): google.maps.marker.AdvancedMarkerElement {
239
239
  const pinGlyph = new google.maps.marker.PinElement({
240
240
  background: background,
241
- glyphColor: color,
242
- glyph: text
241
+ glyphColor: color
242
+ //glyph: text // not in typescript definition "@types/google.maps": "^3.58.1"
243
243
  });
244
+ (pinGlyph as any).glyphText = text;
244
245
  const option: google.maps.marker.AdvancedMarkerElementOptions = {
245
246
  position: loc,
246
247
  map: map,
247
- content: pinGlyph.element
248
+ content: pinGlyph
248
249
  };
249
250
  const m = new google.maps.marker.AdvancedMarkerElement(option);
250
251
  return m;
@@ -410,7 +410,7 @@
410
410
 
411
411
  <template>
412
412
  <v-container ref="carousel" fluid :style="heightStyle" class="bg-grey-darken-3 pa-0">
413
- <image-zoomer v-if="appState.fullScreen.value" :contentW="currentWidth" :contentH="currentHeight" >
413
+ <image-zoomer v-if="appState.fullScreen.value" :contentW="currentWidth" :contentH="currentHeight" :maxScale="2">
414
414
  <img :src="origUrl" :width="currentWidth" :height="currentHeight" draggable="false">
415
415
  </image-zoomer>
416
416
  <v-carousel v-else hide-delimiters :show-arrows="false" v-model="index"
@@ -1,90 +0,0 @@
1
- import { IRest, IRestResult } from '@christianriedl/rest';
2
- import { ILogger, Dictionary, InjectionKey, IStatistics, IStatisticsValue } from '@christianriedl/utils';
3
- import { IMediaItem, IMediaFolder, IMediaListEntry, IMediaService, IPhotoSelection, IPictureFile, IAudioFile, EMediaType, IMediaInfo, IDocumentInfo } from "./iMedia";
4
- export declare const getMediaSymbol: InjectionKey<() => MediaService>;
5
- export interface IVirtualMediaFolder extends IMediaItem {
6
- childCount: number;
7
- files: string[];
8
- }
9
- export interface IRealFilesResult {
10
- folder: IMediaFolder;
11
- privateCreatorIdx: number;
12
- lists: IMediaListEntry[];
13
- status: string;
14
- }
15
- export declare class MediaService implements IMediaService {
16
- rest: IRest;
17
- mediaUrl: string;
18
- log: ILogger;
19
- user: string;
20
- mainRoot: IMediaFolder;
21
- roots: Dictionary<IMediaFolder>;
22
- folders: Dictionary<IMediaFolder>;
23
- realPictureAlbums: Dictionary<IMediaFolder>;
24
- medialists: Dictionary<IMediaListEntry>;
25
- pictureLocation: IMediaListEntry;
26
- listsInitialized: number;
27
- lastFolderId: string;
28
- realFolderId: string;
29
- referenceDict: Set<string>;
30
- privateIdx: number;
31
- pictureParentLimit: number;
32
- statistics: IStatistics;
33
- countFolders: IStatisticsValue;
34
- countFiles: IStatisticsValue;
35
- countList: IStatisticsValue;
36
- countReferences: IStatisticsValue;
37
- photoSelection: IPhotoSelection;
38
- constructor(rest: IRest, user: string, statistics: IStatistics, pictureParentLimit: number, log: ILogger);
39
- prepareFolders(folder: IMediaFolder): boolean;
40
- initialize(mediaType?: EMediaType): Promise<boolean>;
41
- getFolder(id: string): IMediaFolder;
42
- prepare(folder: IMediaFolder): void;
43
- getRoot(mediaType: EMediaType): IMediaFolder | undefined;
44
- getPhotosByCriteria(stars: string, criteria: string): Promise<IMediaFolder>;
45
- initializeAudios(): Promise<IMediaFolder>;
46
- initializeVideos(): Promise<IMediaFolder>;
47
- getRecordedTVs(): Promise<IMediaFolder>;
48
- getOnlineTVs(): Promise<IMediaFolder>;
49
- getOnlineRadios(): Promise<IMediaFolder>;
50
- getListEntry(name: string, idx: number): string;
51
- getPhotos(folder: IMediaFolder): Promise<IMediaFolder>;
52
- private processPhotos;
53
- private removePrivate;
54
- getAudios(folder: IMediaFolder): Promise<IMediaFolder>;
55
- getVideos(folder: IMediaFolder): Promise<IMediaFolder>;
56
- getPhotoTitles(): Promise<string[]>;
57
- getPhotoUrl(folderUrl: string, url: string, format: string): string;
58
- getPhotoDisplayName(folder: IMediaFolder, picture: IPictureFile, album?: IMediaFolder): string;
59
- getAudioUrl(item: IAudioFile): string;
60
- getVideoUrl(url: string): string;
61
- getAlbumArtUrl(folderUrl: string): string;
62
- getAlbumDownloadUrl(folderUrl: string, codec?: string, param?: string): string;
63
- getPhotosDownloadUrl(folder: IMediaFolder, resy?: number, quality?: number, photoIds?: string[]): string;
64
- browse(id: string, depth: number, onlyFolder: boolean, onlyReal: boolean, selectFolder?: string): Promise<IMediaFolder>;
65
- browseRealFiles(dlnaid: string, listMediaType?: EMediaType, realFolderPrefix?: string): Promise<IRealFilesResult>;
66
- getPhotoService(id: string): Promise<IRealFilesResult>;
67
- addPhotoService(id: string, user: string, dlnaid: string, daysValid?: number, photoIds?: string[]): Promise<IRestResult<string>>;
68
- private buildStatistics;
69
- browseReferences(id: string): Promise<IVirtualMediaFolder>;
70
- getExifInfo(folderId: string, mediaId: string): Promise<Dictionary<any>>;
71
- getSatIpProbe(channelName: string, urlOrFileName: string): Promise<IMediaInfo>;
72
- stopSatIpStream(channelName: string, media: string): Promise<boolean>;
73
- ping(): Promise<boolean>;
74
- getImage(url: string): Promise<Blob>;
75
- getLists(mediaType: EMediaType): Promise<boolean>;
76
- initializeLists(mediaType: EMediaType, entries: IMediaListEntry[], privateCreator: number): void;
77
- upload(form: FormData): Promise<boolean>;
78
- uploadBigFile(file: File, directory: string, progress: (pos: string) => void): Promise<boolean>;
79
- getDirectories(path: string): Promise<string[]>;
80
- getFiles(path: string): Promise<string[]>;
81
- getDirectoriesFull(path: string): Promise<IDocumentInfo[]>;
82
- getFilesFull(path: string): Promise<IDocumentInfo[]>;
83
- speedTest(blockSize: number, numBlocks: number): Promise<IRestResult<string>>;
84
- getCloudUrl(folder: string, name: string): Promise<string>;
85
- getFileUrl(path: string): string;
86
- get audioRoot(): IMediaFolder;
87
- get videoRoot(): IMediaFolder;
88
- get pictureRoot(): IMediaFolder;
89
- get onlineRoot(): IMediaFolder;
90
- }
@@ -1,714 +0,0 @@
1
- import { Helper } from '@christianriedl/utils';
2
- import { EState, EMediaType, EItemType } from "./iMedia";
3
- import { MediaHelper } from "./mediaHelper";
4
- import { LocationHelper } from "./locationHelper";
5
- export const getMediaSymbol = Symbol("get-media");
6
- export class MediaService {
7
- rest;
8
- mediaUrl;
9
- log;
10
- user;
11
- mainRoot = {
12
- name: "Root", dlnaid: "0", itemType: EItemType.MainRoot,
13
- state: EState.FolderReal, childCount: 4, folders: [], files: [], rating: 63, creatorIdx: -1, genreIdx: -1,
14
- year: -1, description: "", dlnaParentId: "", url: "", thumbnailUrl: "", date: new Date()
15
- };
16
- roots = {};
17
- folders = {};
18
- realPictureAlbums = {};
19
- medialists = {};
20
- pictureLocation = { name: "", values: [] };
21
- listsInitialized = 0;
22
- lastFolderId = "";
23
- realFolderId = "";
24
- referenceDict = new Set();
25
- privateIdx = -100;
26
- pictureParentLimit = 0;
27
- statistics;
28
- countFolders;
29
- countFiles;
30
- countList;
31
- countReferences;
32
- photoSelection = { rating: 1, criteria: 'ye' };
33
- constructor(rest, user, statistics, pictureParentLimit, log) {
34
- this.log = log;
35
- this.user = user;
36
- this.rest = rest;
37
- this.pictureParentLimit = pictureParentLimit;
38
- this.statistics = statistics;
39
- this.countFolders = statistics.searchOrCreate(log.name, "CountFolders");
40
- this.countFiles = statistics.searchOrCreate(log.name, "CountFiles");
41
- this.countList = statistics.searchOrCreate(log.name, "CountList");
42
- this.countReferences = statistics.searchOrCreate(log.name, "CountReferences");
43
- this.mediaUrl = rest.serviceUrl;
44
- }
45
- prepareFolders(folder) {
46
- this.folders[folder.dlnaid] = folder;
47
- folder.childCount = Number(folder.childCount);
48
- folder.itemType = Number(folder.itemType);
49
- folder.title = folder.name;
50
- folder.state = Number(folder.state);
51
- folder.year = Number(folder.year);
52
- folder.title = folder.name;
53
- folder.subTitle = '';
54
- switch (folder.itemType) {
55
- case EItemType.PictureRoot:
56
- case EItemType.PictureFolder:
57
- case EItemType.PictureRating:
58
- case EItemType.PictureGenreType:
59
- case EItemType.PictureCategory:
60
- case EItemType.PictureYear:
61
- case EItemType.PictureAlbum:
62
- if (folder.mustExpand)
63
- folder.info = folder.name;
64
- else
65
- folder.info = `${folder.name} (${folder.childCount})`;
66
- break;
67
- case EItemType.AudioAlbum:
68
- folder.subTitle = folder.year.toString() + ' - ' + this.folders[folder.dlnaParentId].name;
69
- folder.thumbnailUrl = this.getAlbumArtUrl(folder.thumbnailUrl);
70
- break;
71
- case EItemType.VideoGenreType:
72
- folder.folders = [];
73
- return false; // Remove it
74
- }
75
- if (folder.folders) {
76
- for (var i = 0; i < folder.folders.length;)
77
- if (this.prepareFolders(folder.folders[i]))
78
- i++;
79
- else
80
- folder.folders.splice(i, 1); // remove
81
- }
82
- return true;
83
- }
84
- async initialize(mediaType) {
85
- const rc = await this.getLists(mediaType ? mediaType : EMediaType.Picture);
86
- let folder;
87
- const stars = this.photoSelection.rating ? (this.photoSelection.rating == 1 ? '*' : '**') : 'all';
88
- if (rc) {
89
- switch (mediaType) {
90
- case EMediaType.Audio:
91
- folder = await this.initializeAudios();
92
- break;
93
- case EMediaType.Picture:
94
- folder = await this.getPhotosByCriteria(stars, this.photoSelection.criteria);
95
- break;
96
- case EMediaType.Video:
97
- folder = await this.initializeVideos();
98
- break;
99
- }
100
- }
101
- return true;
102
- }
103
- getFolder(id) {
104
- return this.folders[id];
105
- }
106
- prepare(folder) {
107
- }
108
- getRoot(mediaType) {
109
- switch (mediaType) {
110
- case EMediaType.Audio:
111
- return this.audioRoot;
112
- case EMediaType.Video:
113
- return this.videoRoot;
114
- case EMediaType.Picture:
115
- return this.pictureRoot;
116
- case EMediaType.Online:
117
- return this.onlineRoot;
118
- }
119
- return undefined;
120
- }
121
- async getPhotosByCriteria(stars, criteria) {
122
- const key = `${stars}.${criteria}`;
123
- this.lastFolderId = this.realFolderId = "";
124
- if (!this.roots[key]) {
125
- this.log.trace("initializePhotos: " + key);
126
- var critName = '';
127
- switch (criteria) {
128
- case 'ye':
129
- critName = 'Jahr';
130
- break;
131
- case 'lo':
132
- critName = 'Orte';
133
- break;
134
- case 'ev':
135
- critName = 'Ereignisse';
136
- break;
137
- case 'pe':
138
- critName = 'Personen';
139
- break;
140
- }
141
- const root = await this.browse("0", 6, true, false, `Root;Fotos;${stars};${critName}`);
142
- this.prepareFolders(root);
143
- this.roots[key] = root;
144
- }
145
- if (criteria == 'lo' && this.pictureParentLimit > 0) {
146
- let ratingMap = 0;
147
- switch (stars) {
148
- case "all":
149
- ratingMap = (1 << 2) | (1 << 1) | 1;
150
- break;
151
- case "*":
152
- ratingMap = (1 << 2) | (1 << 1);
153
- break;
154
- case "**":
155
- ratingMap = 1 << 2;
156
- break;
157
- }
158
- LocationHelper.addLocationParents(this, this.pictureLocation, stars, ratingMap);
159
- }
160
- if (criteria == 'ye') // ??
161
- return this.folders[`ph.${stars}.${criteria}|`];
162
- else
163
- return this.folders[`ph.${stars}.${criteria}`];
164
- }
165
- async initializeAudios() {
166
- if (!this.roots['mu']) {
167
- this.log.trace("initializeAudios");
168
- const root = await this.browse("0", 4, true, false, 'Root;Musik');
169
- this.prepareFolders(root);
170
- this.roots['mu'] = root.folders[0];
171
- }
172
- return this.folders['mu'];
173
- }
174
- async initializeVideos() {
175
- if (!this.roots['vi']) {
176
- this.log.trace("initializeVideos");
177
- const root = await this.browse("0", 2, true, false, 'Root;Videos');
178
- this.prepareFolders(root);
179
- this.roots['vi'] = root.folders[0];
180
- }
181
- return this.folders['vi'];
182
- }
183
- async getRecordedTVs() {
184
- this.log.trace("getRecordedTVs");
185
- const root = await this.browse("0", 3, false, false, 'Root;Online;Rec TV');
186
- this.prepareFolders(root);
187
- this.roots['online'] = root;
188
- const videos = this.folders['online.rectv'];
189
- this.log.trace(`getRecordedTVs ${videos.childCount}`);
190
- videos.childCount = Number(videos.childCount);
191
- videos.itemType = Number(videos.itemType);
192
- videos.state = Number(videos.state);
193
- videos.title = videos.name;
194
- videos.subTitle = this.folders[videos.dlnaParentId]?.name;
195
- videos.thumbnailUrl = "";
196
- if (videos.files) {
197
- for (var i = 0; i < videos.files.length; i++) {
198
- const video = videos.files[i];
199
- video.itemType = Number(video.itemType);
200
- video.state = Number(video.state);
201
- video.duration = Number(video.duration);
202
- video.title = video.name;
203
- video.info = MediaHelper.durationString(video.duration);
204
- video.thumbnailUrl = "";
205
- video.subTitle = video.description;
206
- }
207
- }
208
- return videos;
209
- }
210
- async getOnlineTVs() {
211
- this.log.trace("getOnlineTVs");
212
- const root = await this.browse("0", 3, false, false, 'Root;Online;TV');
213
- this.prepareFolders(root);
214
- this.roots['online'] = root;
215
- const videos = this.folders['online.tv'];
216
- this.log.trace(`getTVs ${videos.childCount}`);
217
- videos.childCount = Number(videos.childCount);
218
- videos.itemType = Number(videos.itemType);
219
- videos.state = Number(videos.state);
220
- videos.title = videos.name;
221
- videos.subTitle = this.folders[videos.dlnaParentId]?.name;
222
- if (videos.files) {
223
- for (var i = 0; i < videos.files.length; i++) {
224
- const video = videos.files[i];
225
- video.itemType = Number(video.itemType);
226
- video.state = Number(video.state);
227
- video.duration = Number(video.duration);
228
- video.title = video.name;
229
- video.info = MediaHelper.durationString(video.duration);
230
- if (videos.url && video.url)
231
- video.url = videos.url + video.url;
232
- if (videos.thumbnailUrl && video.thumbnailUrl)
233
- video.thumbnailUrl = videos.thumbnailUrl + video.thumbnailUrl;
234
- video.subTitle = video.description;
235
- }
236
- }
237
- videos.thumbnailUrl = "";
238
- return videos;
239
- }
240
- async getOnlineRadios() {
241
- this.log.trace("getOnlineRadios");
242
- const root = await this.browse("0", 3, false, false, 'Root;Online;Radio');
243
- this.prepareFolders(root);
244
- this.roots['online'] = root;
245
- const audios = this.folders['online.radio'];
246
- this.log.trace(`getRadios ${audios.childCount}`);
247
- audios.childCount = Number(audios.childCount);
248
- audios.itemType = Number(audios.itemType);
249
- audios.state = Number(audios.state);
250
- audios.title = audios.name;
251
- audios.subTitle = this.folders[audios.dlnaParentId].name;
252
- if (audios.files) {
253
- for (var i = 0; i < audios.files.length; i++) {
254
- const audio = audios.files[i];
255
- audio.itemType = Number(audio.itemType);
256
- audio.state = Number(audio.state);
257
- audio.duration = Number(audio.duration);
258
- audio.title = audio.name;
259
- audio.info = MediaHelper.durationString(audio.duration);
260
- audio.subTitle = audio.description;
261
- if (audios.thumbnailUrl && audio.thumbnailUrl)
262
- audio.thumbnailUrl = audios.thumbnailUrl + audio.thumbnailUrl;
263
- audio.url = audios.url + audio.url;
264
- }
265
- }
266
- audios.thumbnailUrl = "";
267
- return audios;
268
- }
269
- getListEntry(name, idx) {
270
- var list = this.medialists[name];
271
- if (list && idx < list.values.length)
272
- return list.values[idx];
273
- return `${name}.${idx}`;
274
- }
275
- async getPhotos(folder) {
276
- let realPhotos;
277
- const newFolder = this.lastFolderId !== folder.dlnaid;
278
- this.lastFolderId = folder.dlnaid;
279
- if (folder.state & EState.FolderVirtual) {
280
- if (newFolder) {
281
- const refs = await this.browseReferences(folder.dlnaid);
282
- this.referenceDict.clear();
283
- for (var i = 0; i < refs.files.length; i++) {
284
- this.referenceDict.add(refs.files[i]);
285
- }
286
- this.realFolderId = folder.dlnaid;
287
- var idx = this.realFolderId.indexOf('|');
288
- this.realFolderId = 'ph.all.ye' + this.realFolderId.substr(idx);
289
- this.log.trace(`getPhotos virtual ${refs.files.length} ${this.realFolderId}`);
290
- }
291
- realPhotos = this.realPictureAlbums[this.realFolderId];
292
- if (!realPhotos) {
293
- realPhotos = await this.browse(this.realFolderId, 1, false, false);
294
- this.log.trace(`getPhotos virtual getReal ${realPhotos.files.length}`);
295
- this.processPhotos(realPhotos);
296
- this.removePrivate(realPhotos);
297
- this.realPictureAlbums[this.realFolderId] = realPhotos;
298
- }
299
- folder.url = realPhotos.url;
300
- var virtualPhotos = {
301
- itemType: folder.itemType,
302
- state: folder.state,
303
- name: folder.name,
304
- description: folder.description,
305
- childCount: 0,
306
- dlnaid: folder.dlnaid,
307
- dlnaParentId: folder.dlnaParentId,
308
- rating: folder.rating,
309
- url: realPhotos.url,
310
- thumbnailUrl: folder.thumbnailUrl,
311
- year: folder.year,
312
- folders: [],
313
- files: [],
314
- genreIdx: folder.genreIdx,
315
- creatorIdx: folder.creatorIdx,
316
- date: folder.date,
317
- };
318
- for (var i = 0; i < realPhotos.files.length; i++) {
319
- if (this.referenceDict.has(realPhotos.files[i].dlnaid)) {
320
- const photo = realPhotos.files[i];
321
- if (newFolder)
322
- photo.selected = false;
323
- virtualPhotos.files.push(photo);
324
- virtualPhotos.childCount++;
325
- }
326
- }
327
- this.log.trace(`getPhotos virtual get ${virtualPhotos.files.length}`);
328
- folder.childCount = virtualPhotos.childCount;
329
- return virtualPhotos;
330
- }
331
- realPhotos = this.realPictureAlbums[folder.dlnaid];
332
- if (!realPhotos) {
333
- realPhotos = await this.browse(folder.dlnaid, 1, false, false);
334
- this.realPictureAlbums[folder.dlnaid] = realPhotos;
335
- this.processPhotos(realPhotos);
336
- this.removePrivate(realPhotos);
337
- this.log.trace(`getPhotos real get ${realPhotos.files.length}`);
338
- }
339
- if (newFolder) {
340
- for (var i = 0; i < realPhotos.files.length; i++)
341
- realPhotos.files[i].selected = false;
342
- }
343
- folder.childCount = realPhotos.childCount;
344
- return realPhotos;
345
- }
346
- processPhotos(folder) {
347
- if (folder.files) {
348
- for (var i = 0; i < folder.files.length; i++) {
349
- const photo = folder.files[i];
350
- if (photo.orientation && typeof photo.orientation === 'string')
351
- photo.orientation = Number(photo.orientation);
352
- if (photo.date) {
353
- if (typeof photo.date === 'string') {
354
- const date = new Date(Number(photo.year), 0, 1).getTime() + Number(photo.date) * 1000;
355
- photo.date = new Date(date);
356
- }
357
- else if (typeof photo.date === 'number')
358
- photo.date = Helper.fromMilliseconds1970(photo.date * 1000);
359
- }
360
- photo.title = MediaHelper.getPhotoDisplayName(folder, photo, this.pictureLocation, folder);
361
- }
362
- }
363
- }
364
- removePrivate(folder) {
365
- if (this.privateIdx >= 0 && folder.files) {
366
- for (var i = 0; i < folder.files.length;) {
367
- if (folder.files[i].creatorIdx == this.privateIdx)
368
- folder.files.splice(i, 1);
369
- else
370
- i++;
371
- }
372
- folder.childCount = folder.files.length;
373
- }
374
- }
375
- async getAudios(folder) {
376
- const audios = await this.browse(folder.dlnaid, 1, false, false);
377
- this.prepareFolders(audios);
378
- this.log.trace(`getAudios ${audios.childCount}`);
379
- audios.childCount = Number(audios.childCount);
380
- audios.itemType = Number(audios.itemType);
381
- audios.state = Number(audios.state);
382
- audios.title = audios.name;
383
- audios.subTitle = this.folders[audios.dlnaParentId]?.name;
384
- audios.thumbnailUrl = folder.thumbnailUrl;
385
- if (audios.files) {
386
- for (var i = 0; i < audios.files.length; i++) {
387
- const audio = audios.files[i];
388
- audio.itemType = Number(audio.itemType);
389
- audio.state = Number(audio.state);
390
- audio.duration = Number(audio.duration);
391
- audio.title = `${audio.trackNo} ${audio.name}`;
392
- audio.subTitle = MediaHelper.durationString(audio.duration);
393
- audio.thumbnailUrl = "";
394
- }
395
- }
396
- return audios;
397
- }
398
- async getVideos(folder) {
399
- const videos = await this.browse(folder.dlnaid, 1, false, false);
400
- this.prepareFolders(videos);
401
- this.log.trace(`getVideos ${videos.childCount}`);
402
- videos.childCount = Number(videos.childCount);
403
- videos.itemType = Number(videos.itemType);
404
- videos.state = Number(videos.state);
405
- videos.title = videos.name;
406
- videos.subTitle = this.folders[videos.dlnaParentId]?.name;
407
- videos.thumbnailUrl = folder.thumbnailUrl;
408
- if (videos.files) {
409
- for (var i = 0; i < videos.files.length; i++) {
410
- const video = videos.files[i];
411
- video.itemType = Number(video.itemType);
412
- video.state = Number(video.state);
413
- video.duration = Number(video.duration);
414
- if (typeof video.countryIdx === 'string')
415
- video.countryIdx = Number(video.countryIdx);
416
- if (typeof video.creatorIdx === 'string')
417
- video.creatorIdx = Number(video.creatorIdx);
418
- if (typeof video.genreIdx === 'string')
419
- video.genreIdx = Number(video.genreIdx);
420
- video.title = video.name;
421
- video.info = MediaHelper.durationString(video.duration);
422
- video.thumbnailUrl = this.getAlbumArtUrl(video.thumbnailUrl);
423
- video.subTitle = "";
424
- if (video.year)
425
- video.subTitle = video.year.toString();
426
- if (video.countryIdx && video.countryIdx >= 0) {
427
- const country = this.getListEntry('Video.Countries', video.countryIdx);
428
- if (country)
429
- video.subTitle += ' - ' + country;
430
- }
431
- if (video.creatorIdx && video.creatorIdx >= 0) {
432
- const reg = this.getListEntry('Video.Director', video.creatorIdx);
433
- if (reg)
434
- video.subTitle += ' - ' + reg;
435
- }
436
- }
437
- }
438
- return videos;
439
- }
440
- async getPhotoTitles() {
441
- const result = await this.rest.getData('apimedia/phototitles');
442
- return result.result;
443
- }
444
- getPhotoUrl(folderUrl, url, format) {
445
- const picurl = `${this.mediaUrl}apiimage/Picture/${format}${folderUrl}${url}`;
446
- return encodeURI(picurl);
447
- }
448
- getPhotoDisplayName(folder, picture, album) {
449
- return MediaHelper.getPhotoDisplayName(folder, picture, this.pictureLocation, album);
450
- }
451
- getAudioUrl(item) {
452
- const album = this.folders[item.dlnaParentId];
453
- const audiourl = `${this.mediaUrl}apistream/Audio${album.url}${item.url}`;
454
- return encodeURI(audiourl);
455
- }
456
- getVideoUrl(url) {
457
- const videourl = `${this.mediaUrl}apistream/Video${url}`;
458
- return encodeURI(videourl);
459
- }
460
- getAlbumArtUrl(folderUrl) {
461
- const albumarturl = `${this.mediaUrl}apiimage/Picture/0x0${folderUrl}`;
462
- return encodeURI(albumarturl);
463
- }
464
- getAlbumDownloadUrl(folderUrl, codec, param) {
465
- var downloadurl = `${this.mediaUrl}apistream/AudioZipped?media=${folderUrl}`;
466
- if (codec || param)
467
- downloadurl += `&codec=${codec}& param=${param}`;
468
- return encodeURI(downloadurl);
469
- }
470
- getPhotosDownloadUrl(folder, resy, quality, photoIds) {
471
- var name = folder.name.replaceAll(' ', '_');
472
- var downloadurl = `${this.mediaUrl}apimedia/PhotosZipped/${name}?id=${folder.dlnaid}`;
473
- if (resy)
474
- downloadurl += `&resy=${resy}`;
475
- if (quality)
476
- downloadurl += `&quality=${quality}`;
477
- if (photoIds && photoIds.length > 0)
478
- downloadurl += `&photoIds=${photoIds.join(',')}`;
479
- return encodeURI(downloadurl);
480
- }
481
- async browse(id, depth, onlyFolder, onlyReal, selectFolder) {
482
- const folder = await this.rest.getData('apimedia/browse', { id: id, depth: depth, onlyFolder: onlyFolder, onlyReal: onlyReal, selectFolder: selectFolder });
483
- const mediaFolder = folder.result;
484
- this.buildStatistics(mediaFolder);
485
- return mediaFolder;
486
- }
487
- async browseRealFiles(dlnaid, listMediaType, realFolderPrefix) {
488
- const query = { dlnaid: dlnaid, realFolderPrefix: realFolderPrefix, listMediaType: listMediaType };
489
- const res = await this.rest.getData('apimedia/browserealfiles', query);
490
- const result = res.result;
491
- if (result.folder)
492
- this.buildStatistics(result.folder);
493
- if (listMediaType && result.lists) {
494
- this.initializeLists(listMediaType, result.lists, result.privateCreatorIdx);
495
- }
496
- return result;
497
- }
498
- async getPhotoService(id) {
499
- const res = await this.rest.getData('apimedia/photoservice', { id: id });
500
- const result = res.result;
501
- if (result.folder)
502
- this.buildStatistics(result.folder);
503
- if (result.lists) {
504
- this.initializeLists(EMediaType.Picture, result.lists, result.privateCreatorIdx);
505
- }
506
- return result;
507
- }
508
- async addPhotoService(id, user, dlnaid, daysValid = 365, photoIds) {
509
- const data = { id: id, user: user, dlnaid: dlnaid, daysValid: daysValid, photoIds: photoIds };
510
- const res = await this.rest.postDataEx('apimedia/photoservice', data);
511
- return res;
512
- }
513
- buildStatistics(folder) {
514
- if (folder.folders) {
515
- this.statistics.increment(this.countFolders, folder.folders.length);
516
- for (let i = 0; i < folder.folders.length; i++)
517
- this.buildStatistics(folder.folders[i]);
518
- }
519
- if (folder.files)
520
- this.statistics.increment(this.countFiles, folder.files.length);
521
- }
522
- async browseReferences(id) {
523
- const ref = await this.rest.getData('apimedia/browse', { id: id, depth: 1, onlyFolder: false, onlyReal: false });
524
- const folders = ref.result;
525
- if (folders.files)
526
- this.statistics.increment(this.countReferences, folders.files.length);
527
- return folders;
528
- }
529
- async getExifInfo(folderId, mediaId) {
530
- const info = await this.rest.getData('apimedia/info/exif', { folderId: folderId, mediaId: mediaId });
531
- return info.result;
532
- }
533
- async getSatIpProbe(channelName, urlOrFileName) {
534
- const info = await this.rest.getData('apistream/satipprobe', { channelName: channelName, url: urlOrFileName });
535
- return info.result;
536
- }
537
- stopSatIpStream(channelName, media) {
538
- const url = `apistream/satipstream/stop?channelName=${encodeURIComponent(channelName)}&media=${encodeURIComponent(media)}`;
539
- const res = this.rest.postData(url);
540
- return this.rest.toData(res);
541
- }
542
- async ping() {
543
- try {
544
- const res = await this.rest.getData('apistream/ping', { request: 'test' });
545
- return res.ok && res.result.result === 'test';
546
- }
547
- catch (e) {
548
- return false;
549
- }
550
- }
551
- getImage(url) {
552
- const res = this.rest.getBlob(url, "image/jpeg");
553
- return this.rest.toData(res);
554
- }
555
- async getLists(mediaType) {
556
- if (this.listsInitialized & (1 << mediaType))
557
- return true;
558
- const res = await this.rest.getData('apimedia/medialist', { mediaType: mediaType });
559
- const list = res.result;
560
- this.initializeLists(mediaType, list.lists, list.privateCreatorIdx);
561
- this.log.trace(`getLists get ${list.lists.length}`);
562
- return true;
563
- }
564
- initializeLists(mediaType, entries, privateCreator) {
565
- for (var i = 0; i < entries.length; i++) {
566
- const li = entries[i];
567
- if (li.values)
568
- this.statistics.increment(this.countList, li.values.length);
569
- if (mediaType == EMediaType.Picture) {
570
- // Handle private creator
571
- if (li.name == 'Picture.Creator') {
572
- if (this.user != 'ric@rts.co.at' && this.user != 'rih@rts.co.at') {
573
- this.privateIdx = privateCreator;
574
- if (!this.privateIdx) {
575
- for (var j = 0; j < li.values.length; j++) {
576
- if (li.values[j] === "Christian Riedl Privat") {
577
- this.privateIdx = j;
578
- break;
579
- }
580
- }
581
- }
582
- }
583
- }
584
- if (li.name == 'Picture.Location') {
585
- this.pictureLocation = li;
586
- li.children = [];
587
- for (let i = 0; i < li.parents.length; i++) {
588
- li.children.push([]);
589
- }
590
- for (let i = 0; i < li.parents.length; i++) {
591
- const parentIdx = li.parents[i];
592
- if (parentIdx >= 0) {
593
- const childArray = li.children[parentIdx];
594
- childArray.push(i);
595
- }
596
- }
597
- }
598
- }
599
- this.medialists[li.name] = li;
600
- }
601
- this.listsInitialized |= (1 << mediaType);
602
- }
603
- async upload(form) {
604
- const res = await this.rest.postData('apistream/upload', form);
605
- return res.ok && res.result.result;
606
- }
607
- async uploadBigFile(file, directory, progress) {
608
- const guid = Helper.generateUUID();
609
- if (!progress)
610
- progress = (pos) => { }; // create dummy
611
- let url = `apistream/uploadbigfile?directory=${directory}&file=${file.name}&uniqueid=${guid}`;
612
- let res = await this.rest.postDataEx(url);
613
- if (!res.ok) {
614
- progress(res.statusText);
615
- return false;
616
- }
617
- let result = res.result;
618
- if (result.result != 'OK') {
619
- progress(result.result);
620
- return false;
621
- }
622
- progress("Start Upload");
623
- const chunkSize = 1000000;
624
- for (let start = 0; start < file.size; start += chunkSize) {
625
- const end = Math.min(start + chunkSize, file.size);
626
- const blob = file.slice(start, end);
627
- const close = end == file.size;
628
- let url = `apistream/uploaddata?&position=${start}&uniqueid=${guid}&close=${close}`;
629
- res = await this.rest.postBlob(url, blob);
630
- if (!res.ok) {
631
- progress(res.statusText);
632
- return false;
633
- }
634
- let result = res.result;
635
- if (close) {
636
- progress(result.result);
637
- return result.result == 'OK';
638
- }
639
- progress(result.result);
640
- if (isNaN(parseInt(result.result)))
641
- return false;
642
- }
643
- return true;
644
- }
645
- async getDirectories(path) {
646
- const res = await this.rest.getData('apimedia/documents/directories', { path: path });
647
- if (res && res.ok) {
648
- return res.result;
649
- }
650
- return [];
651
- }
652
- async getFiles(path) {
653
- const res = await this.rest.getData('apimedia/documents/files', { path: path });
654
- if (res && res.ok)
655
- return res.result;
656
- return [];
657
- }
658
- async getDirectoriesFull(path) {
659
- const res = await this.rest.getData('apimedia/documents/directories', { path: path, full: true });
660
- if (res && res.ok) {
661
- const infos = res.result;
662
- for (let i = 0; i < infos.length; i++) {
663
- infos[i].date = new Date(infos[i].date);
664
- }
665
- return infos;
666
- }
667
- return [];
668
- }
669
- async getFilesFull(path) {
670
- const res = await this.rest.getData('apimedia/documents/files', { path: path, full: true });
671
- if (res && res.ok) {
672
- const infos = res.result;
673
- for (let i = 0; i < infos.length; i++) {
674
- infos[i].date = new Date(infos[i].date);
675
- }
676
- return infos;
677
- }
678
- return [];
679
- }
680
- async speedTest(blockSize, numBlocks) {
681
- const res = await this.rest.getData(`apistream/speedtest?blockSize=${blockSize}&numBlocks=${numBlocks}`, undefined, undefined, "text/plain");
682
- return res;
683
- /*
684
- const self = this;
685
- const url = `${this.rest.serviceUrl}apistream/speedtest?blockSize=${blockSize}&numBlocks=${numBlocks}`
686
- const promise = new Promise<IRestResult<string>>(function (resolve, reject) {
687
- Rest.fetch<string>(url, "GET", "same-origin", undefined, undefined, resolve, reject, self.log, undefined, "text/plain");
688
- });
689
- return promise;
690
- */
691
- }
692
- async getCloudUrl(folder, name) {
693
- const res = await this.rest.getData('apimedia/onedriveurl', { folder: folder, name: name });
694
- if (res && res.ok && res.result)
695
- return res.result.result;
696
- return "";
697
- }
698
- getFileUrl(path) {
699
- return this.rest.serviceUrl + 'apimedia/document/' + encodeURI(path);
700
- }
701
- get audioRoot() {
702
- return this.roots['mu'];
703
- }
704
- get videoRoot() {
705
- return this.roots['vi'];
706
- }
707
- get pictureRoot() {
708
- return this.roots['ph'];
709
- }
710
- get onlineRoot() {
711
- return this.roots['online'];
712
- }
713
- }
714
- //# sourceMappingURL=mediaService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mediaService.js","sourceRoot":"","sources":["../src/mediaService.ts"],"names":[],"mappings":"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"}