@christianriedl/media 1.0.46 → 1.0.48
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/dist/iMedia.d.ts +14 -0
- package/dist/iMedia.js +12 -0
- package/dist/iMedia.js.map +1 -1
- package/package.json +2 -2
- package/src/views/PhotoAlbumPage.vue +22 -5
- package/src/views/PhotosPage.vue +15 -2
package/dist/iMedia.d.ts
CHANGED
|
@@ -8,6 +8,20 @@ export declare enum EMediaType {
|
|
|
8
8
|
None = 254,
|
|
9
9
|
Various = 255
|
|
10
10
|
}
|
|
11
|
+
export declare enum EPictureQuality {
|
|
12
|
+
Full = 0,
|
|
13
|
+
Normal60 = 10060,
|
|
14
|
+
Normal80 = 10080,
|
|
15
|
+
Normal90 = 10090,
|
|
16
|
+
Normal100 = 10100,
|
|
17
|
+
High60 = 20060,
|
|
18
|
+
High80 = 20080,
|
|
19
|
+
High90 = 20090,
|
|
20
|
+
High100 = 20100
|
|
21
|
+
}
|
|
22
|
+
export interface IMediaAppConfig {
|
|
23
|
+
pictureQuality: EPictureQuality;
|
|
24
|
+
}
|
|
11
25
|
export declare enum EItemType {
|
|
12
26
|
None = 0,
|
|
13
27
|
RootLevel = 0,
|
package/dist/iMedia.js
CHANGED
|
@@ -9,6 +9,18 @@ export var EMediaType;
|
|
|
9
9
|
EMediaType[EMediaType["None"] = 254] = "None";
|
|
10
10
|
EMediaType[EMediaType["Various"] = 255] = "Various";
|
|
11
11
|
})(EMediaType || (EMediaType = {}));
|
|
12
|
+
export var EPictureQuality;
|
|
13
|
+
(function (EPictureQuality) {
|
|
14
|
+
EPictureQuality[EPictureQuality["Full"] = 0] = "Full";
|
|
15
|
+
EPictureQuality[EPictureQuality["Normal60"] = 10060] = "Normal60";
|
|
16
|
+
EPictureQuality[EPictureQuality["Normal80"] = 10080] = "Normal80";
|
|
17
|
+
EPictureQuality[EPictureQuality["Normal90"] = 10090] = "Normal90";
|
|
18
|
+
EPictureQuality[EPictureQuality["Normal100"] = 10100] = "Normal100";
|
|
19
|
+
EPictureQuality[EPictureQuality["High60"] = 20060] = "High60";
|
|
20
|
+
EPictureQuality[EPictureQuality["High80"] = 20080] = "High80";
|
|
21
|
+
EPictureQuality[EPictureQuality["High90"] = 20090] = "High90";
|
|
22
|
+
EPictureQuality[EPictureQuality["High100"] = 20100] = "High100";
|
|
23
|
+
})(EPictureQuality || (EPictureQuality = {}));
|
|
12
24
|
export var EItemType;
|
|
13
25
|
(function (EItemType) {
|
|
14
26
|
EItemType[EItemType["None"] = 0] = "None";
|
package/dist/iMedia.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iMedia.js","sourceRoot":"","sources":["../src/iMedia.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,UASX;AATD,WAAY,UAAU;IAClB,6CAAS,CAAA;IACT,6CAAS,CAAA;IACT,iDAAW,CAAA;IACX,4CAAS,CAAA;IACT,0DAAgB,CAAA;IAChB,iDAAa,CAAA;IACb,6CAAW,CAAA;IACX,mDAAc,CAAA;AAClB,CAAC,EATW,UAAU,KAAV,UAAU,QASrB;AACD,MAAM,CAAN,IAAY,SAoDX;AApDD,WAAY,SAAS;IACjB,yCAAQ,CAAA;IACR,mDAAa,CAAA;IACb,uDAAe,CAAA;IACf,uDAAe,CAAA;IACf,6DAAkB,CAAA;IAClB,iEAAoB,CAAA;IACpB,iEAAoB,CAAA;IACpB,iEAAoB,CAAA;IACpB,iEAAoB,CAAA;IACpB,mDAAgB,CAAA;IAChB,6CAAa,CAAA;IACb,4CAAY,CAAA;IACZ,4CAAY,CAAA;IACZ,gDAAc,CAAA;IACd,6DAAoB,CAAA;IACpB,qDAAgB,CAAA;IAChB,yCAAa,CAAA;IACb,mDAA6C,CAAA;IAC7C,oDAA0B,CAAA;IAC1B,wDAAkC,CAAA;IAClC,wDAAkC,CAAA;IAClC,8DAAqC,CAAA;IACrC,sDAAiC,CAAA;IACjC,wDAAkC,CAAA;IAClC,sDAAiC,CAAA;IACjC,0DAAmC,CAAA;IACnC,uEAA0C,CAAA;IAC1C,2EAA8C,CAAA;IAC9C,sDAAkB,CAAA;IAClB,+DAAkC,CAAA;IAClC,oDAA0B,CAAA;IAC1B,wDAAkC,CAAA;IAClC,wDAAkC,CAAA;IAClC,8DAAqC,CAAA;IACrC,4DAAoC,CAAA;IACpC,uEAA0C,CAAA;IAC1C,2EAA8C,CAAA;IAC9C,yEAA+C,CAAA;IAC/C,oDAAiB,CAAA;IACjB,+DAAkC,CAAA;IAClC,wDAA8B,CAAA;IAC9B,4DAAsC,CAAA;IACtC,4DAAsC,CAAA;IACtC,kEAAyC,CAAA;IACzC,gEAAwC,CAAA;IACxC,wDAAoC,CAAA;IACpC,0DAAqC,CAAA;IACrC,wDAAqB,CAAA;IACrB,uDAA+C,CAAA;IAC/C,qDAAgB,CAAA;IAChB,yCAAU,CAAA;AACd,CAAC,EApDW,SAAS,KAAT,SAAS,QAoDpB;AACD,MAAM,CAAN,IAAY,MAUX;AAVD,WAAY,MAAM;IACd,mCAAQ,CAAA;IACR,yDAAsB,CAAA;IACtB,2CAAe,CAAA;IACf,+CAAiB,CAAA;IACjB,qDAAoB,CAAA;IACpB,kDAAkB,CAAA;IAClB,sDAAoB,CAAA;IACpB,0DAAsB,CAAA;IACtB,+DAAwB,CAAA;AAC5B,CAAC,EAVW,MAAM,KAAN,MAAM,QAUjB;AA+CD,MAAM,CAAN,IAAY,YAQX;AARD,WAAY,YAAY;IAEpB,+CAAQ,CAAA;IACR,qDAAW,CAAA;IACX,6DAAe,CAAA;IACf,uDAAY,CAAA;IACZ,2DAAc,CAAA;IACd,yDAAa,CAAA;AACjB,CAAC,EARW,YAAY,KAAZ,YAAY,QAQvB"}
|
|
1
|
+
{"version":3,"file":"iMedia.js","sourceRoot":"","sources":["../src/iMedia.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,UASX;AATD,WAAY,UAAU;IAClB,6CAAS,CAAA;IACT,6CAAS,CAAA;IACT,iDAAW,CAAA;IACX,4CAAS,CAAA;IACT,0DAAgB,CAAA;IAChB,iDAAa,CAAA;IACb,6CAAW,CAAA;IACX,mDAAc,CAAA;AAClB,CAAC,EATW,UAAU,KAAV,UAAU,QASrB;AACD,MAAM,CAAN,IAAY,eAUX;AAVD,WAAY,eAAe;IACvB,qDAAiB,CAAA;IACjB,iEAAqB,CAAA;IACrB,iEAAqB,CAAA;IACrB,iEAAqB,CAAA;IACrB,mEAAqB,CAAA;IACrB,6DAAqB,CAAA;IACrB,6DAAqB,CAAA;IACrB,6DAAqB,CAAA;IACrB,+DAAqB,CAAA;AACzB,CAAC,EAVW,eAAe,KAAf,eAAe,QAU1B;AAID,MAAM,CAAN,IAAY,SAoDX;AApDD,WAAY,SAAS;IACjB,yCAAQ,CAAA;IACR,mDAAa,CAAA;IACb,uDAAe,CAAA;IACf,uDAAe,CAAA;IACf,6DAAkB,CAAA;IAClB,iEAAoB,CAAA;IACpB,iEAAoB,CAAA;IACpB,iEAAoB,CAAA;IACpB,iEAAoB,CAAA;IACpB,mDAAgB,CAAA;IAChB,6CAAa,CAAA;IACb,4CAAY,CAAA;IACZ,4CAAY,CAAA;IACZ,gDAAc,CAAA;IACd,6DAAoB,CAAA;IACpB,qDAAgB,CAAA;IAChB,yCAAa,CAAA;IACb,mDAA6C,CAAA;IAC7C,oDAA0B,CAAA;IAC1B,wDAAkC,CAAA;IAClC,wDAAkC,CAAA;IAClC,8DAAqC,CAAA;IACrC,sDAAiC,CAAA;IACjC,wDAAkC,CAAA;IAClC,sDAAiC,CAAA;IACjC,0DAAmC,CAAA;IACnC,uEAA0C,CAAA;IAC1C,2EAA8C,CAAA;IAC9C,sDAAkB,CAAA;IAClB,+DAAkC,CAAA;IAClC,oDAA0B,CAAA;IAC1B,wDAAkC,CAAA;IAClC,wDAAkC,CAAA;IAClC,8DAAqC,CAAA;IACrC,4DAAoC,CAAA;IACpC,uEAA0C,CAAA;IAC1C,2EAA8C,CAAA;IAC9C,yEAA+C,CAAA;IAC/C,oDAAiB,CAAA;IACjB,+DAAkC,CAAA;IAClC,wDAA8B,CAAA;IAC9B,4DAAsC,CAAA;IACtC,4DAAsC,CAAA;IACtC,kEAAyC,CAAA;IACzC,gEAAwC,CAAA;IACxC,wDAAoC,CAAA;IACpC,0DAAqC,CAAA;IACrC,wDAAqB,CAAA;IACrB,uDAA+C,CAAA;IAC/C,qDAAgB,CAAA;IAChB,yCAAU,CAAA;AACd,CAAC,EApDW,SAAS,KAAT,SAAS,QAoDpB;AACD,MAAM,CAAN,IAAY,MAUX;AAVD,WAAY,MAAM;IACd,mCAAQ,CAAA;IACR,yDAAsB,CAAA;IACtB,2CAAe,CAAA;IACf,+CAAiB,CAAA;IACjB,qDAAoB,CAAA;IACpB,kDAAkB,CAAA;IAClB,sDAAoB,CAAA;IACpB,0DAAsB,CAAA;IACtB,+DAAwB,CAAA;AAC5B,CAAC,EAVW,MAAM,KAAN,MAAM,QAUjB;AA+CD,MAAM,CAAN,IAAY,YAQX;AARD,WAAY,YAAY;IAEpB,+CAAQ,CAAA;IACR,qDAAW,CAAA;IACX,6DAAe,CAAA;IACf,uDAAY,CAAA;IACZ,2DAAc,CAAA;IACd,yDAAa,CAAA;AACjB,CAAC,EARW,YAAY,KAAZ,YAAY,QAQvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@christianriedl/media",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.48",
|
|
4
4
|
"description": "RIC media interfaces",
|
|
5
5
|
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"author": "Christian Riedl",
|
|
19
19
|
"license": "ISC",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@christianriedl/utils": "^1.0.
|
|
21
|
+
"@christianriedl/utils": "^1.0.76",
|
|
22
22
|
"@christianriedl/rest": "^1.0.47",
|
|
23
23
|
"@christianriedl/epg": "^1.0.26"
|
|
24
24
|
},
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
import { inject, ref, reactive, computed, onMounted, onBeforeMount, onUnmounted, nextTick, watch } from 'vue';
|
|
3
3
|
import { useRouter, useRoute } from 'vue-router';
|
|
4
4
|
import { IAppState, IAppConfig, Dictionary, Helper, appStateSymbol, appConfigSymbol } from '@christianriedl/utils';
|
|
5
|
-
import { EMediaType, IPictureFile, MediaService, getMediaSymbol } from '@christianriedl/media';
|
|
5
|
+
import { EMediaType, IPictureFile, MediaService, IMediaAppConfig, EPictureQuality, getMediaSymbol } from '@christianriedl/media';
|
|
6
6
|
|
|
7
7
|
const router = useRouter();
|
|
8
8
|
const route = useRoute();
|
|
9
9
|
const appState = inject(appStateSymbol)!;
|
|
10
10
|
const appConfig = inject(appConfigSymbol)!;
|
|
11
|
+
const mediaAppConfig = appConfig as IMediaAppConfig;
|
|
11
12
|
const getMediaService = inject(getMediaSymbol)!;
|
|
12
13
|
const mediaService = getMediaService();
|
|
13
14
|
const heightStyle = computed(() => { return { height: appState.bodyHeight.value + 'px', overflowY: 'hidden' } });
|
|
@@ -84,10 +85,15 @@
|
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
function getUrl(item: IPictureFile) {
|
|
88
|
+
const pictureQuality = mediaAppConfig.pictureQuality;
|
|
89
|
+
const quality = pictureQuality % 1000;
|
|
90
|
+
let factor = Math.floor(pictureQuality / 1000);
|
|
91
|
+
if (factor > 1 && appState.pixelRatio > 1)
|
|
92
|
+
factor = appState.pixelRatio;
|
|
87
93
|
if (landscape.value)
|
|
88
|
-
return mediaService.getPhotoUrl(url.value, item.Url, `${0}x${height.value}x${item.Orientation}`);
|
|
94
|
+
return mediaService.getPhotoUrl(url.value, item.Url, `${0}x${height.value * factor}x${item.Orientation}x${quality}`);
|
|
89
95
|
else
|
|
90
|
-
return mediaService.getPhotoUrl(url.value, item.Url, `${width.value}x${0}x${item.Orientation}`);
|
|
96
|
+
return mediaService.getPhotoUrl(url.value, item.Url, `${width.value * factor}x${0}x${item.Orientation}x${quality}`);
|
|
91
97
|
}
|
|
92
98
|
function showMap(ev: Event) {
|
|
93
99
|
const current = items[index.value];
|
|
@@ -125,15 +131,24 @@
|
|
|
125
131
|
if (index.value < items.length - 1)
|
|
126
132
|
index.value++;
|
|
127
133
|
break;
|
|
128
|
-
case "KeyI":
|
|
134
|
+
case "KeyI": // Info
|
|
129
135
|
const item = items[index.value];
|
|
130
136
|
const exif = await mediaService.getExifInfo(item.DLNAParentID, item.DLNAID);
|
|
131
137
|
setMetaData(exif, item);
|
|
132
138
|
infoDialog.value = true;
|
|
133
139
|
break;
|
|
134
|
-
case "KeyC":
|
|
140
|
+
case "KeyC": // Continue
|
|
135
141
|
cycle.value = true;
|
|
136
142
|
break;
|
|
143
|
+
case "KeyF": // Fullscreen
|
|
144
|
+
if (window.document.fullscreen) {
|
|
145
|
+
await window.document.exitFullscreen();
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
const mainEle = window.document.getElementsByTagName('main')[0];
|
|
149
|
+
mainEle.requestFullscreen();
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
137
152
|
case "KeyP":
|
|
138
153
|
case "Digit0":
|
|
139
154
|
cycle.value = false;
|
|
@@ -184,6 +199,7 @@
|
|
|
184
199
|
function setMetaData(exif: Dictionary<any>, file: IPictureFile) {
|
|
185
200
|
origUrl = mediaService.getPhotoUrl(url.value, file.Url, '0x0x0');
|
|
186
201
|
metadata['Name'] = file.Name;
|
|
202
|
+
metadata['Url'] = file.Url;
|
|
187
203
|
if (exif) {
|
|
188
204
|
if (exif.Model)
|
|
189
205
|
metadata['Kamera'] = exif.Model;
|
|
@@ -332,6 +348,7 @@
|
|
|
332
348
|
<v-col cols="4"><v-btn @click="onKeyClick('Digit9')">9</v-btn></v-col>
|
|
333
349
|
</v-row>
|
|
334
350
|
<v-row dense>
|
|
351
|
+
<v-col cols="4"><v-btn @click="onKeyClick('KeyF')">Full</v-btn></v-col>
|
|
335
352
|
<v-col cols="4"><v-btn @click="onKeyClick('KeyI')">Info</v-btn></v-col>
|
|
336
353
|
<v-col cols="4"><v-btn @click="onKeyClick('close')">Close</v-btn></v-col>
|
|
337
354
|
</v-row>
|
package/src/views/PhotosPage.vue
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
const downloadFolder = ref<IMediaFolder | null>(null);
|
|
30
30
|
const selectedYear = ref<number | undefined>(undefined);
|
|
31
31
|
const selectedName = ref<string | undefined>(undefined);
|
|
32
|
+
const scrollElement = ref<any | null>(null);
|
|
32
33
|
|
|
33
34
|
window.addEventListener('popstate', onPopState);
|
|
34
35
|
function onPopState(event: any) {
|
|
@@ -57,7 +58,15 @@
|
|
|
57
58
|
selectedYear.value = selected.selectedAlbum.Year;
|
|
58
59
|
const expanded = selected.criteria == 'ye' || root.ItemType == EItemType.PictureCategory;
|
|
59
60
|
setGrouped(folders, expanded, selectedYear.value);
|
|
60
|
-
|
|
61
|
+
const scrollTop = appState.scrollPosition.value;
|
|
62
|
+
if (scrollTop > 0 && scrollElement.value) {
|
|
63
|
+
nextTick(() => {
|
|
64
|
+
// Scoll to this position
|
|
65
|
+
const el = scrollElement.value?._?.vnode?.el;
|
|
66
|
+
el?.scrollTo(0, scrollTop);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
mediaService.log.trace(`Photos start with ${selected.selected.DLNAID} scrollTop: ${scrollTop}`);
|
|
61
70
|
})
|
|
62
71
|
watch(appState.bodyHeight, () => computeListHeight());
|
|
63
72
|
function computeListHeight() {
|
|
@@ -163,6 +172,10 @@
|
|
|
163
172
|
function itemText(item: IMediaFolder) : string {
|
|
164
173
|
return `${item.Name} (${item.ChildCount})`
|
|
165
174
|
}
|
|
175
|
+
function onScroll(ev: Event) {
|
|
176
|
+
const scrollTop = (ev.target as Element).scrollTop;
|
|
177
|
+
appState.scrollPosition.value = scrollTop;
|
|
178
|
+
}
|
|
166
179
|
</script>
|
|
167
180
|
<template>
|
|
168
181
|
<v-card ref="listhead" class="bg-media">
|
|
@@ -185,7 +198,7 @@
|
|
|
185
198
|
</v-card-actions>
|
|
186
199
|
</v-card>
|
|
187
200
|
<file-upload v-if="uploadVisible"></file-upload>
|
|
188
|
-
<v-card :max-height="listHeight" class="overflow-y-auto">
|
|
201
|
+
<v-card :max-height="listHeight" class="overflow-y-auto" ref="scrollElement" v-scroll.self="onScroll">
|
|
189
202
|
<v-list v-if="!grouped" class="bg-media">
|
|
190
203
|
<v-list-item-group v-model="itemIndex" color="primary">
|
|
191
204
|
<v-list-item v-for="item in items" :key="item.DLNAID" :title="itemText(item)" :value="itemText(item)" density="compact" @click.stop="listItem(item)">
|