@christianriedl/media 1.0.109 → 1.0.111

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.
@@ -0,0 +1,58 @@
1
+ import { IRest } from '@christianriedl/rest';
2
+ import { ILogger, Dictionary, IStatistics, IStatisticsValue, ILocalStorage } from '@christianriedl/utils';
3
+ import { IMediaFolder, IMediaRoot, IMediaListEntry, EMediaType, EItemType } from "./iMedia";
4
+ interface ILastModifications {
5
+ list: number;
6
+ root: number;
7
+ mediaTypes: Dictionary<number>;
8
+ modified?: boolean;
9
+ }
10
+ export declare class MediaServiceBin {
11
+ rest: IRest;
12
+ mediaUrl: string;
13
+ log: ILogger;
14
+ user: string;
15
+ localStorage: ILocalStorage;
16
+ mainRoot?: IMediaRoot;
17
+ audioRoot?: IMediaRoot;
18
+ videoRoot?: IMediaRoot;
19
+ pictureRoot?: IMediaRoot;
20
+ onlineRoot?: IMediaRoot;
21
+ roots: Dictionary<IMediaRoot>;
22
+ folders: Dictionary<IMediaFolder>;
23
+ medialists: Dictionary<IMediaListEntry>;
24
+ lastModifications: ILastModifications;
25
+ listsInitialized: number;
26
+ foldersInitialized: number;
27
+ filesInitialized: number;
28
+ lastFolderId: string;
29
+ realFolderId: string;
30
+ privateIdx: number;
31
+ statistics: IStatistics;
32
+ bigEndian: boolean;
33
+ countFolders: IStatisticsValue;
34
+ countFiles: IStatisticsValue;
35
+ countList: IStatisticsValue;
36
+ countReferences: IStatisticsValue;
37
+ constructor(rest: IRest, user: string, localStorage: ILocalStorage, statistics: IStatistics, bigEndian: boolean, log: ILogger);
38
+ initialize(mediaType: EMediaType): Promise<boolean>;
39
+ getLists(): Promise<boolean>;
40
+ getFolders(): Promise<number>;
41
+ getFiles(mediaType: EMediaType): Promise<number>;
42
+ static toItemType(mediaType: EMediaType): EItemType;
43
+ private unMarshalItem;
44
+ private unMarshalFolder;
45
+ private unMarshalFile;
46
+ private unMarshalAudioFile;
47
+ private unMarshalVideoFile;
48
+ private unMarshalPictureFile;
49
+ private addRoot;
50
+ private addFolder;
51
+ private addSubFolder;
52
+ private addMediaReference;
53
+ private addMediaFile;
54
+ private addFile;
55
+ private saveModifications;
56
+ private loadModifications;
57
+ }
58
+ export {};
@@ -0,0 +1,379 @@
1
+ import { MarshalLE } from '@christianriedl/utils';
2
+ import { EState, EMediaType, EItemType } from "./iMedia";
3
+ export class MediaServiceBin {
4
+ rest;
5
+ mediaUrl;
6
+ log;
7
+ user = "";
8
+ localStorage;
9
+ mainRoot;
10
+ audioRoot;
11
+ videoRoot;
12
+ pictureRoot;
13
+ onlineRoot;
14
+ roots = {};
15
+ folders = {};
16
+ medialists = {};
17
+ lastModifications;
18
+ listsInitialized = 0;
19
+ foldersInitialized = 0;
20
+ filesInitialized = 0;
21
+ lastFolderId = "";
22
+ realFolderId = "";
23
+ privateIdx = -100;
24
+ statistics;
25
+ bigEndian;
26
+ countFolders;
27
+ countFiles;
28
+ countList;
29
+ countReferences;
30
+ constructor(rest, user, localStorage, statistics, bigEndian, log) {
31
+ this.log = log;
32
+ this.user = user;
33
+ this.rest = rest;
34
+ this.localStorage = localStorage;
35
+ this.statistics = statistics;
36
+ this.bigEndian = bigEndian;
37
+ this.countFolders = statistics.searchOrCreate(log.name, "CountFolders");
38
+ this.countFiles = statistics.searchOrCreate(log.name, "CountFiles");
39
+ this.countList = statistics.searchOrCreate(log.name, "CountList");
40
+ this.countReferences = statistics.searchOrCreate(log.name, "CountReferences");
41
+ this.mediaUrl = rest.serviceUrl;
42
+ this.loadModifications();
43
+ }
44
+ async initialize(mediaType) {
45
+ if (!this.listsInitialized) {
46
+ if (!await this.getLists())
47
+ return false;
48
+ }
49
+ if (!this.foldersInitialized) {
50
+ if (!await this.getFolders())
51
+ return false;
52
+ }
53
+ if (!(this.filesInitialized & (1 << mediaType))) {
54
+ if (!await this.getFiles(mediaType))
55
+ return false;
56
+ }
57
+ if (this.lastModifications.modified) {
58
+ this.saveModifications();
59
+ }
60
+ return true;
61
+ }
62
+ async getLists() {
63
+ const res = await this.rest.getBlob('apimedia/medialistbin', "application/octet-stream", undefined, { "If-Modified-Since": this.lastModifications.list.toString() });
64
+ const arrayBuffer = await res.result.arrayBuffer();
65
+ const data = Buffer.from(arrayBuffer);
66
+ if (data) {
67
+ const marshal = this.bigEndian ? new MarshalLE(data) : new MarshalLE(data);
68
+ const lastModification = marshal.readUInt32();
69
+ if (lastModification != this.lastModifications.list) {
70
+ this.lastModifications.list = lastModification;
71
+ this.lastModifications.modified = true;
72
+ }
73
+ for (;;) {
74
+ const name = marshal.readString();
75
+ if (!name)
76
+ break;
77
+ const values = [];
78
+ this.medialists[name] = { Name: name, Values: values };
79
+ const count = marshal.readInt16();
80
+ for (let i = 0; i < count; i++) {
81
+ values.push(marshal.readString());
82
+ }
83
+ if (name == 'Picture.Creator' && this.user != 'ric@rts.co.at' && this.user != 'rih@rts.co.at') {
84
+ this.privateIdx = values.indexOf("Christian Riedl Privat");
85
+ }
86
+ this.statistics.increment(this.countList, values.length);
87
+ this.listsInitialized++;
88
+ }
89
+ this.log.trace(`getListsBin get ${this.listsInitialized} lists`);
90
+ }
91
+ return true;
92
+ }
93
+ async getFolders() {
94
+ const res = await this.rest.getBlob('apimedia/mediafoldersbin', "application/octet-stream", undefined, { "If-Modified-Since": this.lastModifications.root.toString() });
95
+ const arrayBuffer = await res.result.arrayBuffer();
96
+ const data = Buffer.from(arrayBuffer);
97
+ let count = 0;
98
+ if (data) {
99
+ const marshal = this.bigEndian ? new MarshalLE(data) : new MarshalLE(data);
100
+ const lastModification = marshal.readUInt32();
101
+ if (lastModification != this.lastModifications.root) {
102
+ this.lastModifications.root = lastModification;
103
+ this.lastModifications.modified = true;
104
+ }
105
+ let itemType;
106
+ while ((itemType = marshal.readUInt8()) != EItemType.End) {
107
+ if ((itemType & EItemType.Folder) == 0)
108
+ return 0;
109
+ const item = {};
110
+ this.unMarshalFolder(marshal, item, itemType);
111
+ if ((item.ItemType & EItemType.LevelMask) == EItemType.RootLevel)
112
+ this.addRoot(item);
113
+ else if (!this.addSubFolder(item))
114
+ return 0;
115
+ count++;
116
+ }
117
+ this.log.trace(`getFoldersBin get ${count} folders`);
118
+ }
119
+ this.statistics.increment(this.countFolders, count);
120
+ this.foldersInitialized = count;
121
+ return count;
122
+ }
123
+ async getFiles(mediaType) {
124
+ const res = await this.rest.getBlob('apimedia/mediafilesbin', "application/octet-stream", { mediaType: mediaType }, { "If-Modified-Since": this.lastModifications.root.toString() });
125
+ const arrayBuffer = await res.result.arrayBuffer();
126
+ const data = Buffer.from(arrayBuffer);
127
+ let count = 0;
128
+ let countref = 0;
129
+ if (data) {
130
+ if (res.headers) {
131
+ const lastModified = res.headers.get("Last-Modified");
132
+ if (lastModified) {
133
+ const modifiedRoot = this.lastModifications.mediaTypes[mediaType];
134
+ if (modifiedRoot != Number(lastModified)) {
135
+ this.lastModifications.mediaTypes[mediaType] = Number(lastModified);
136
+ this.lastModifications.modified = true;
137
+ }
138
+ }
139
+ }
140
+ const marshal = this.bigEndian ? new MarshalLE(data) : new MarshalLE(data);
141
+ const files = {};
142
+ let itemType;
143
+ while ((itemType = marshal.readUInt8()) != EItemType.End) {
144
+ {
145
+ if (itemType == EItemType.Reference) {
146
+ // Got a referenced
147
+ const folderId = marshal.readString();
148
+ const fileId = marshal.readString();
149
+ if (this.addMediaReference(folderId, fileId, files)) {
150
+ countref++;
151
+ }
152
+ }
153
+ else {
154
+ // Got a file
155
+ const item = {};
156
+ this.unMarshalItem(marshal, item, itemType);
157
+ if (itemType & MediaServiceBin.toItemType(mediaType)) {
158
+ if (this.addMediaFile(item)) {
159
+ files[item.DLNAID] = item;
160
+ count++;
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
166
+ this.statistics.increment(this.countFiles, count);
167
+ this.filesInitialized |= (1 << mediaType);
168
+ this.log.trace(`getFilesBin get ${count} ${mediaType} files`);
169
+ return count;
170
+ }
171
+ }
172
+ static toItemType(mediaType) {
173
+ switch (mediaType) {
174
+ case EMediaType.Audio: return EItemType.Audio;
175
+ case EMediaType.Video: return EItemType.Video;
176
+ case EMediaType.Picture: return EItemType.Picture;
177
+ case EMediaType.Online: return EItemType.Broadcast;
178
+ }
179
+ return EItemType.None;
180
+ }
181
+ unMarshalItem(m, item, itemType) {
182
+ item.ItemType = itemType;
183
+ item.State = m.readUInt8();
184
+ item.Rating = m.readUInt8();
185
+ item.GenreIdx = m.readInt16();
186
+ item.CreatorIdx = m.readInt16();
187
+ item.Year = m.readInt16();
188
+ item.Name = m.readString();
189
+ item.DLNAID = m.readString();
190
+ item.DLNAParentID = m.readString();
191
+ const path = m.readString();
192
+ const thumbNailPath = m.readString();
193
+ item.Url = m.readString();
194
+ item.ThumbnailUrl = m.readString();
195
+ }
196
+ unMarshalFolder(m, folder, itemType) {
197
+ this.unMarshalItem(m, folder, itemType);
198
+ const dlnaUpdateID = m.readUInt32();
199
+ const folderModifyTime = m.readUInt32();
200
+ folder.ChildCount = m.readInt32();
201
+ const searchable = m.readBoolean();
202
+ const dlnaSearchClasses = m.readUInt8();
203
+ const referenceIndex = m.readInt16();
204
+ }
205
+ unMarshalFile(m, file, itemType) {
206
+ this.unMarshalItem(m, file, itemType);
207
+ switch (itemType) {
208
+ case EItemType.AudioBroadcast:
209
+ case EItemType.AudioTrack:
210
+ this.unMarshalAudioFile(m, file);
211
+ break;
212
+ case EItemType.PictureItem:
213
+ this.unMarshalPictureFile(m, file);
214
+ break;
215
+ case EItemType.VideoBroadcast:
216
+ case EItemType.VideoItem:
217
+ this.unMarshalVideoFile(m, file);
218
+ break;
219
+ }
220
+ }
221
+ unMarshalAudioFile(m, file) {
222
+ file.Size = m.readUInt32();
223
+ file.Date = new Date(m.readUInt32()); // Check !!!!!!!!!!!!!!!!!!!!!!
224
+ file.Extension = m.readUInt8();
225
+ file.Description = m.readString();
226
+ file.CreatorIdx = m.readInt16();
227
+ const composerIdx = m.readInt16();
228
+ file.Duration = m.readInt16();
229
+ file.TrackNo = m.readInt16();
230
+ file.SampleRate = m.readInt32();
231
+ file.BitRate = m.readInt32();
232
+ }
233
+ unMarshalVideoFile(m, file) {
234
+ file.Size = m.readUInt32();
235
+ file.Date = new Date(m.readUInt32()); // Check !!!!!!!!!!!!!!!!!!!!!!
236
+ file.Extension = m.readUInt8();
237
+ file.Description = m.readString();
238
+ file.BitRate = m.readInt16();
239
+ file.FrameRate = m.readInt16();
240
+ file.Duration = m.readInt16();
241
+ file.Width = m.readUInt16();
242
+ file.Height = m.readUInt16();
243
+ file.CountryIdx = m.readInt16();
244
+ file.AudioStreams = m.readString();
245
+ let count = m.readInt16();
246
+ file.ActorIdxs = null;
247
+ if (count > 0) {
248
+ file.ActorIdxs = [];
249
+ for (let i = 0; i < count; i++)
250
+ file.ActorIdxs.push(m.readInt16());
251
+ }
252
+ }
253
+ unMarshalPictureFile(m, file) {
254
+ file.Size = m.readUInt32();
255
+ file.Date = new Date(m.readUInt32()); // Check !!!!!!!!!!!!!!!!!!!!!!
256
+ file.Extension = m.readUInt8();
257
+ file.Description = m.readString();
258
+ file.Width = m.readUInt16();
259
+ file.Height = m.readUInt16();
260
+ file.ThumbWidth = m.readUInt16();
261
+ file.ThumbHeight = m.readUInt16();
262
+ file.Orientation = m.readUInt8();
263
+ file.LocationIdx = m.readInt16();
264
+ file.EventIdx = m.readInt16();
265
+ let count = m.readInt16();
266
+ file.PersonIdxs = null;
267
+ if (count > 0) {
268
+ file.PersonIdxs = [];
269
+ for (let i = 0; i < count; i++)
270
+ file.PersonIdxs.push(m.readInt16());
271
+ }
272
+ }
273
+ addRoot(root) {
274
+ if (root.DLNAID == "0")
275
+ this.mainRoot = root;
276
+ else {
277
+ this.roots[root.DLNAID] = root;
278
+ this.addFolder(this.mainRoot, root);
279
+ switch (root.ItemType) {
280
+ case EItemType.AudioRoot:
281
+ this.audioRoot = root;
282
+ break;
283
+ case EItemType.VideoRoot:
284
+ this.videoRoot = root;
285
+ break;
286
+ case EItemType.PictureRoot:
287
+ this.pictureRoot = root;
288
+ break;
289
+ case EItemType.OnlineRoot:
290
+ this.onlineRoot = root;
291
+ break;
292
+ }
293
+ }
294
+ }
295
+ addFolder(parent, folder) {
296
+ folder.DLNAParentID = parent.DLNAID;
297
+ if (!parent.Folders)
298
+ parent.Folders = [];
299
+ if (folder.DLNAID == null)
300
+ folder.DLNAID = "_" + Object.keys(this.folders).length;
301
+ const oldFolder = this.folders[folder.DLNAID];
302
+ if (!oldFolder) {
303
+ this.folders[folder.DLNAID] = folder;
304
+ const idx = parent.Folders.findIndex((f) => f.DLNAID == folder.DLNAID);
305
+ if (idx >= 0)
306
+ parent.Folders[idx] = folder;
307
+ else
308
+ parent.Folders.push(folder);
309
+ }
310
+ else {
311
+ this.folders[folder.DLNAID] = folder;
312
+ parent.Folders.push(folder);
313
+ }
314
+ return true;
315
+ }
316
+ addSubFolder(folder) {
317
+ if (folder.DLNAParentID) {
318
+ let parentFolder = this.folders[folder.DLNAParentID];
319
+ if (!parentFolder)
320
+ parentFolder = this.roots[folder.DLNAParentID];
321
+ if (parentFolder)
322
+ return this.addFolder(parentFolder, folder);
323
+ }
324
+ return false;
325
+ }
326
+ addMediaReference(folderId, fileId, files) {
327
+ const file = files[fileId];
328
+ if (!file) {
329
+ this.log.warning(`add MediaReference ${folderId}/${fileId} : not found`);
330
+ return false;
331
+ }
332
+ if (folderId) {
333
+ const parentFolder = this.folders[folderId];
334
+ if (parentFolder) {
335
+ return this.addFile(parentFolder, file);
336
+ }
337
+ }
338
+ this.log.warning(`add MediaReference ${file.Name} : no folder found`);
339
+ return false;
340
+ }
341
+ addMediaFile(file) {
342
+ if (file.DLNAParentID) {
343
+ const parentFolder = this.folders[file.DLNAParentID];
344
+ if (parentFolder)
345
+ return this.addFile(parentFolder, file);
346
+ }
347
+ this.log.warning(`add File ${file.Name} : no parent found`);
348
+ return false;
349
+ }
350
+ addFile(parent, file) {
351
+ if (!(parent.State & EState.FolderVirtual)) {
352
+ file.DLNAParentID = parent.DLNAID;
353
+ }
354
+ if (parent.Files == null)
355
+ parent.Files = [];
356
+ if (file.DLNAID == null)
357
+ file.DLNAID = file.DLNAParentID + "." + parent.Files.length;
358
+ parent.Files.push(file);
359
+ return true;
360
+ }
361
+ saveModifications() {
362
+ const lm = this.lastModifications;
363
+ this.localStorage.setItem("lastMediaModifications", `${lm.list}|${lm.root}|${lm.mediaTypes[EMediaType.Audio]}|${lm.mediaTypes[EMediaType.Video]}|${lm.mediaTypes[EMediaType.Picture]}|${lm.mediaTypes[EMediaType.Online]}`);
364
+ lm.modified = false;
365
+ }
366
+ loadModifications() {
367
+ const lastM = this.localStorage.getItemString("lastMediaModifications", "0|0|0|0|0|0").split("|");
368
+ this.lastModifications = {
369
+ list: Number(lastM[0]), root: Number(lastM[1]),
370
+ mediaTypes: {
371
+ Audio: Number(lastM[2]),
372
+ Video: Number(lastM[3]),
373
+ Picture: Number(lastM[4]),
374
+ Online: Number(lastM[5])
375
+ }
376
+ };
377
+ }
378
+ }
379
+ //# sourceMappingURL=mediaServiceBin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaServiceBin.js","sourceRoot":"","sources":["../src/mediaServiceBin.ts"],"names":[],"mappings":"AACA,OAAO,EACsC,SAAS,EACrD,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEqD,MAAM,EAAE,UAAU,EAAE,SAAS,EACxF,MAAM,UAAU,CAAC;AASlB,MAAM,OAAO,eAAe;IACxB,IAAI,CAAQ;IACZ,QAAQ,CAAS;IACjB,GAAG,CAAU;IACb,IAAI,GAAW,EAAE,CAAC;IAClB,YAAY,CAAgB;IAC5B,QAAQ,CAAc;IACtB,SAAS,CAAc;IACvB,SAAS,CAAc;IACvB,WAAW,CAAc;IACzB,UAAU,CAAc;IACxB,KAAK,GAA2B,EAAE,CAAA;IAClC,OAAO,GAA6B,EAAE,CAAA;IACtC,UAAU,GAAgC,EAAE,CAAC;IAC7C,iBAAiB,CAAqB;IACtC,gBAAgB,GAAG,CAAC,CAAC;IACrB,kBAAkB,GAAG,CAAC,CAAC;IACvB,gBAAgB,GAAG,CAAC,CAAC;IACrB,YAAY,GAAG,EAAE,CAAC;IAClB,YAAY,GAAG,EAAE,CAAC;IAClB,UAAU,GAAW,CAAC,GAAG,CAAC;IAC1B,UAAU,CAAc;IACxB,SAAS,CAAU;IACnB,YAAY,CAAmB;IAC/B,UAAU,CAAmB;IAC7B,SAAS,CAAmB;IAC5B,eAAe,CAAmB;IAElC,YAAY,IAAW,EAAE,IAAY,EAAE,YAA2B,EAAE,UAAuB,EAAE,SAAkB,EAAE,GAAY;QACzH,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACxE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;QAEhC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAqB;QAClC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,CAAE,MAAM,IAAI,CAAC,QAAQ,EAAE;gBACvB,OAAO,KAAK,CAAC;SACpB;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B,IAAI,CAAE,MAAM,IAAI,CAAC,UAAU,EAAE;gBACzB,OAAO,KAAK,CAAC;SACpB;QACD,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE;YAC7C,IAAI,CAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAChC,OAAO,KAAK,CAAC;SACpB;QACD,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,0BAA0B,EAAE,SAAS,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrK,MAAM,WAAW,GAAG,MAAO,GAAG,CAAC,MAAe,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,IAAI,EAAE;YACN,MAAM,OAAO,GAAa,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YAC9C,IAAI,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;gBACjD,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,gBAAgB,CAAC;gBAC/C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC;aAC1C;YACD,SAAU;gBACN,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI;oBACL,MAAM;gBACV,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;iBACrC;gBACD,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,CAAC,IAAI,IAAI,eAAe,IAAI,IAAI,CAAC,IAAI,IAAI,eAAe,EAAE;oBAC3F,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;iBAC9D;gBACD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,gBAAgB,QAAQ,CAAC,CAAC;SACpE;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,KAAK,CAAC,UAAU;QACZ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,SAAS,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxK,MAAM,WAAW,GAAG,MAAO,GAAG,CAAC,MAAe,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,EAAE;YACN,MAAM,OAAO,GAAa,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YAC9C,IAAI,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;gBACjD,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,gBAAgB,CAAC;gBAC/C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC;aAC1C;YACD,IAAI,QAAmB,CAAC;YACxB,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE;gBACtD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;oBAClC,OAAO,CAAC,CAAC;gBACb,MAAM,IAAI,GAAG,EAAkB,CAAA;gBAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS;oBAC5D,IAAI,CAAC,OAAO,CAAC,IAAkB,CAAC,CAAC;qBAChC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAoB,CAAC;oBAC7C,OAAO,CAAC,CAAC;gBACb,KAAK,EAAE,CAAC;aACX;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,KAAK,UAAU,CAAC,CAAC;SACxD;QACD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,SAAqB;QAChC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,0BAA0B,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACrL,MAAM,WAAW,GAAG,MAAO,GAAG,CAAC,MAAe,CAAC,WAAW,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,IAAI,EAAE;YACN,IAAI,GAAG,CAAC,OAAO,EAAE;gBACb,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBACtD,IAAI,YAAY,EAAE;oBACd,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;oBAClE,IAAI,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE;wBACtC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;wBACpE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,GAAG,IAAI,CAAC;qBAC1C;iBACJ;aACJ;YACD,MAAM,OAAO,GAAa,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,IAAI,QAAmB,CAAC;YACxB,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE;gBACtD;oBACI,IAAI,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE;wBACjC,mBAAmB;wBACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;wBACtC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;wBACpC,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;4BACjD,QAAQ,EAAE,CAAC;yBACd;qBACJ;yBACI;wBACf,aAAa;wBACC,MAAM,IAAI,GAAG,EAAgB,CAAC;wBAC9B,IAAI,CAAC,aAAa,CAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;wBAC7C,IAAI,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;4BAClD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;gCACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gCAC1B,KAAK,EAAE,CAAC;6BACX;yBACJ;qBACJ;iBACJ;aACJ;YACD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,KAAK,IAAI,SAAS,QAAQ,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,SAAqB;QACnC,QAAQ,SAAS,EAAE;YACf,KAAK,UAAU,CAAC,KAAK,CAAC,CAAM,OAAO,SAAS,CAAC,KAAK,CAAC;YACnD,KAAK,UAAU,CAAC,KAAK,CAAC,CAAM,OAAO,SAAS,CAAC,KAAK,CAAC;YACnD,KAAK,UAAU,CAAC,OAAO,CAAC,CAAI,OAAO,SAAS,CAAC,OAAO,CAAC;YACrD,KAAK,UAAU,CAAC,MAAM,CAAC,CAAK,OAAO,SAAS,CAAC,SAAS,CAAC;SAC1D;QACD,OAAO,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC;IAEO,aAAa,CAAC,CAAW,EAAE,IAAgB,EAAE,QAAmB;QACpE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IACO,eAAe,CAAC,CAAW,EAAE,MAAoB,EAAE,QAAmB;QAC1E,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QACpC,MAAM,gBAAgB,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,cAAc,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IACzC,CAAC;IACO,aAAa,CAAE,CAAW,EAAE,IAAgB,EAAE,QAAmB;QACrE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtC,QAAQ,QAAQ,EAAE;YACd,KAAK,SAAS,CAAC,cAAc,CAAC;YAC9B,KAAK,SAAS,CAAC,UAAU;gBACrB,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAkB,CAAC,CAAC;gBAC/C,MAAM;YACV,KAAK,SAAS,CAAC,WAAW;gBACtB,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAoB,CAAC,CAAC;gBACnD,MAAM;YACV,KAAK,SAAS,CAAC,cAAc,CAAC;YAC9B,KAAK,SAAS,CAAC,SAAS;gBACpB,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAkB,CAAC,CAAC;gBAC/C,MAAM;SACb;IACL,CAAC;IACO,kBAAkB,CAAC,CAAW,EAAE,IAAgB;QACpD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAO,+BAA+B;QAC3E,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;IACO,kBAAkB,CAAC,CAAW,EAAE,IAAgB;QACpD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAO,+BAA+B;QAC3E,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1C,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;SAC1C;IACL,CAAC;IACO,oBAAoB,CAAC,CAAW,EAAE,IAAkB;QACxD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAO,+BAA+B;QAC3E,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;SAC3C;IACL,CAAC;IAEO,OAAO,CAAC,IAAgB;QAC5B,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACpB;YACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACrC,QAAQ,IAAI,CAAC,QAAQ,EAAE;gBACnB,KAAK,SAAS,CAAC,SAAS;oBAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBAAC,MAAM;gBACzD,KAAK,SAAS,CAAC,SAAS;oBAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBAAC,MAAM;gBACzD,KAAK,SAAS,CAAC,WAAW;oBAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBAAC,MAAM;gBAC3D,KAAK,SAAS,CAAC,UAAU;oBAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBAAC,MAAM;aAC7D;SACJ;IACL,CAAC;IACO,SAAS,CAAC,MAAoB,EAAE,MAAoB;QACxD,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO;YACf,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI;YACrB,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;YACrC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;YACvE,IAAI,GAAG,IAAI,CAAC;gBACR,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;;gBAE7B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACnC;aACI;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC/B;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IACO,YAAY,CAAC,MAAoB;QACrC,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY;gBACb,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACnD,IAAI,YAAY;gBACZ,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;SACnD;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACO,iBAAiB,CAAC,QAAgB,EAAE,MAAc,EAAE,KAA6B;QAErF,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,QAAQ,IAAI,MAAM,cAAc,CAAC,CAAC;YACzE,OAAO,KAAK,CAAC;SAEhB;QACD,IAAI,QAAQ,EAAE;YACV,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,YAAY,EAAE;gBACd,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;aAC3C;SACJ;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC;IACjB,CAAC;IACO,YAAY,CAAC,IAAgB;QACjC,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrD,IAAI,YAAY;gBACZ,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;SAC/C;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACjB,CAAC;IACO,OAAO,CAAC,MAAoB,EAAE,IAAgB;QAClD,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE;YACxC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;SACrC;QACD,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI;YACpB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExB,OAAO,IAAI,CAAC;IAChB,CAAC;IACO,iBAAiB;QACrB,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAC9C,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5K,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IACO,iBAAiB;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,wBAAwB,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClG,IAAI,CAAC,iBAAiB,GAAG;YACrB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9C,UAAU,EAAE;gBACR,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC3B;SACJ,CAAA;IACL,CAAC;CACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@christianriedl/media",
3
- "version": "1.0.109",
3
+ "version": "1.0.111",
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.86",
22
- "@christianriedl/rest": "^1.0.49",
22
+ "@christianriedl/rest": "^1.0.51",
23
23
  "@christianriedl/epg": "^1.0.30"
24
24
  },
25
25
  "devDependencies": {
@@ -60,7 +60,7 @@
60
60
  url = `${mediaService.rest.serviceUrl}apistream/satipstream?channelName=${selected.value.Name}&url=${encodeURIComponent(selected.value.Url)}`;
61
61
  if (audioStream.value)
62
62
  url += `&audioStream=${audioStream.value}`;
63
- if (params && params.set)
63
+ if (params)
64
64
  url += `&width=${params.width}&height=${params.height}&videoBitRate=${params.videoBitRate}&audioBitRate=${params.audioBitRate}`;
65
65
  }
66
66
  else {
@@ -24,7 +24,7 @@
24
24
  const audioStream = ref(0);
25
25
  const qualities = mediaService.getVideoQualities();
26
26
  const quality = ref(0);
27
- let params: ITranscodeParams;
27
+ let params: ITranscodeParams|null = null;
28
28
  const paramsText = ref('');
29
29
 
30
30
  const backVisible = computed(() => selected.value.ItemType != EItemType.VideoRoot);
@@ -57,7 +57,7 @@
57
57
  url += `?audioStream=${audioStream.value}`;
58
58
  parSet = true;
59
59
  }
60
- if (params && params.set) {
60
+ if (params) {
61
61
  url += parSet ? '&' : '?';
62
62
  url += `width=${params.width}&height=${params.height}&videoBitRate=${params.videoBitRate}&audioBitRate=${params.audioBitRate}`;
63
63
  parSet = true;
@@ -66,12 +66,13 @@
66
66
  }
67
67
  function listItem(item: IMediaItem) {
68
68
  if (item.ItemType == EItemType.VideoItem || item.ItemType == EItemType.VideoBroadcast) {
69
+ quality.value = 0;
69
70
  selected.value = item;
70
71
  computeListHeight();
71
72
  const video = item as IVideoFile;
72
73
  const as = mediaService.splitAudioStreams(video.AudioStreams);
73
74
  audioStreams.splice(0, audioStreams.length, ...as);
74
- paramsText.value = `${video.Width}x${video.Height}, ${Math.floor(video.BitRate / 1000)} kbit/s`;
75
+ paramsText.value = `${video.Width}x${video.Height}, ${video.FrameRate} /s, ${Math.floor(video.BitRate / 1000)} kbit/s`;
75
76
  return;
76
77
  }
77
78
  }
@@ -96,8 +97,9 @@
96
97
  items.splice(0, items.length, ...root.Files);
97
98
  computeListHeight();
98
99
  }
99
- async function onShare(item: IVideoFile) {
100
- const url = `https://www.christian-riedl.com/photos/video?media=${item.Url}&width=${item.Width}&height=${item.Height}&videobitrate=`;
100
+ async function onShare(item: IMediaItem) {
101
+ const file = items as IVideoFile;
102
+ const url = `https://www.christian-riedl.com/photos/video?media=${file.Url}&width=${file.Width}&height=${file.Height}&videobitrate=`;
101
103
  await window.navigator.clipboard.writeText(url);
102
104
  window.alert(`Created and Pasted : ${url} !`);
103
105
  }
@@ -115,13 +115,14 @@
115
115
  }
116
116
  function listItem(item: IMediaItem) {
117
117
  if (item.ItemType == EItemType.VideoItem) {
118
+ quality.value = 0;
118
119
  selected.value = item;
119
120
  getPlayer();
120
121
  computeListHeight();
121
122
  const video = item as IVideoFile;
122
123
  const as = mediaService.splitAudioStreams(video.AudioStreams);
123
124
  audioStreams.splice(0, audioStreams.length, ...as);
124
- paramsText.value = `${video.Width}x${video.Height}, ${Math.floor(video.BitRate / 1000)} kbit/s`;
125
+ paramsText.value = `${video.Width}x${video.Height}, ${video.FrameRate} /s, ${Math.floor(video.BitRate / 1000)} kbit/s`;
125
126
  return;
126
127
  }
127
128
  const folder = item as IMediaFolder;
@@ -203,8 +204,9 @@
203
204
  }
204
205
  }
205
206
  }
206
- async function onShare(item: IVideoFile) {
207
- const url = `https://www.christian-riedl.com/photos/video?media=${item.Url}&width=${item.Width}&height=${item.Height}&videobitrate=`;
207
+ async function onShare(item: IMediaItem) {
208
+ const file = items as IVideoFile;
209
+ const url = `https://www.christian-riedl.com/photos/video?media=${file.Url}&width=${file.Width}&height=${file.Height}&videobitrate=`;
208
210
  await window.navigator.clipboard.writeText(url);
209
211
  window.alert(`Created and Pasted : ${url} !`);
210
212
  }