@christianriedl/media 1.0.47 → 1.0.49
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 +27 -34
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 = 1060,
|
|
14
|
+
Normal80 = 1080,
|
|
15
|
+
Normal90 = 1090,
|
|
16
|
+
Normal100 = 1100,
|
|
17
|
+
High60 = 2060,
|
|
18
|
+
High80 = 2080,
|
|
19
|
+
High90 = 2090,
|
|
20
|
+
High100 = 2100
|
|
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"] = 1060] = "Normal60";
|
|
16
|
+
EPictureQuality[EPictureQuality["Normal80"] = 1080] = "Normal80";
|
|
17
|
+
EPictureQuality[EPictureQuality["Normal90"] = 1090] = "Normal90";
|
|
18
|
+
EPictureQuality[EPictureQuality["Normal100"] = 1100] = "Normal100";
|
|
19
|
+
EPictureQuality[EPictureQuality["High60"] = 2060] = "High60";
|
|
20
|
+
EPictureQuality[EPictureQuality["High80"] = 2080] = "High80";
|
|
21
|
+
EPictureQuality[EPictureQuality["High90"] = 2090] = "High90";
|
|
22
|
+
EPictureQuality[EPictureQuality["High100"] = 2100] = "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,gEAAoB,CAAA;IACpB,gEAAoB,CAAA;IACpB,gEAAoB,CAAA;IACpB,kEAAoB,CAAA;IACpB,4DAAoB,CAAA;IACpB,4DAAoB,CAAA;IACpB,4DAAoB,CAAA;IACpB,8DAAoB,CAAA;AACxB,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.49",
|
|
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' } });
|
|
@@ -20,6 +21,7 @@
|
|
|
20
21
|
const items = reactive<IPictureFile[]>([]);
|
|
21
22
|
const width = ref(0);
|
|
22
23
|
const height = ref(0);
|
|
24
|
+
const sizeStyle = ref({ height: '512px', width: '1024px' });
|
|
23
25
|
const landscape = ref(true);
|
|
24
26
|
const metadata = reactive<Dictionary<any>>({});
|
|
25
27
|
const cycle = ref(false);
|
|
@@ -32,6 +34,7 @@
|
|
|
32
34
|
watch([appState.bodyHeight, appState.pageWidth], () => {
|
|
33
35
|
width.value = appState.pageWidth.value;
|
|
34
36
|
height.value = appState.bodyHeight.value;
|
|
37
|
+
sizeStyle.value = { height: height.value + 'px', width: width.value + 'px' };
|
|
35
38
|
landscape.value = width.value > height.value;
|
|
36
39
|
}, { immediate: true });
|
|
37
40
|
|
|
@@ -60,8 +63,7 @@
|
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
url.value = photos.Url;
|
|
63
|
-
buildUrls();
|
|
64
|
-
//onInput(0); required für v-carousel ?
|
|
66
|
+
//buildUrls();
|
|
65
67
|
}
|
|
66
68
|
else {
|
|
67
69
|
nextTick(() => router.back());
|
|
@@ -75,19 +77,16 @@
|
|
|
75
77
|
window.document.removeEventListener('keydown', onKey);
|
|
76
78
|
});
|
|
77
79
|
|
|
78
|
-
function buildUrls() {
|
|
79
|
-
for (var i = 0; i < items.length; i++) {
|
|
80
|
-
const item = items[i];
|
|
81
|
-
if (item.realUrl && item.realUrl.startsWith('blob'))
|
|
82
|
-
window.URL.revokeObjectURL(item.realUrl);
|
|
83
|
-
item.realUrl = getUrl(item);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
80
|
function getUrl(item: IPictureFile) {
|
|
81
|
+
const pictureQuality = mediaAppConfig.pictureQuality;
|
|
82
|
+
const quality = pictureQuality % 1000;
|
|
83
|
+
let factor = Math.floor(pictureQuality / 1000);
|
|
84
|
+
if (factor > 1 && appState.pixelRatio > 1)
|
|
85
|
+
factor = appState.pixelRatio;
|
|
87
86
|
if (landscape.value)
|
|
88
|
-
return mediaService.getPhotoUrl(url.value, item.Url, `${0}x${height.value}x${item.Orientation}`);
|
|
87
|
+
return mediaService.getPhotoUrl(url.value, item.Url, `${0}x${height.value * factor}x${item.Orientation}x${quality}`);
|
|
89
88
|
else
|
|
90
|
-
return mediaService.getPhotoUrl(url.value, item.Url, `${width.value}x${0}x${item.Orientation}`);
|
|
89
|
+
return mediaService.getPhotoUrl(url.value, item.Url, `${width.value * factor}x${0}x${item.Orientation}x${quality}`);
|
|
91
90
|
}
|
|
92
91
|
function showMap(ev: Event) {
|
|
93
92
|
const current = items[index.value];
|
|
@@ -99,16 +98,6 @@
|
|
|
99
98
|
}
|
|
100
99
|
});
|
|
101
100
|
}
|
|
102
|
-
function onInput(idx: number) {
|
|
103
|
-
idx++;
|
|
104
|
-
if (idx < items.length) {
|
|
105
|
-
const item = items[idx];
|
|
106
|
-
mediaService.getImage(item.realUrl!)
|
|
107
|
-
.then(blob => {
|
|
108
|
-
item.realUrl = window.URL.createObjectURL(blob);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
101
|
function onDblClick(ev: Event) {
|
|
113
102
|
keyDialog.value = true;
|
|
114
103
|
}
|
|
@@ -125,15 +114,24 @@
|
|
|
125
114
|
if (index.value < items.length - 1)
|
|
126
115
|
index.value++;
|
|
127
116
|
break;
|
|
128
|
-
case "KeyI":
|
|
117
|
+
case "KeyI": // Info
|
|
129
118
|
const item = items[index.value];
|
|
130
119
|
const exif = await mediaService.getExifInfo(item.DLNAParentID, item.DLNAID);
|
|
131
120
|
setMetaData(exif, item);
|
|
132
121
|
infoDialog.value = true;
|
|
133
122
|
break;
|
|
134
|
-
case "KeyC":
|
|
123
|
+
case "KeyC": // Continue
|
|
135
124
|
cycle.value = true;
|
|
136
125
|
break;
|
|
126
|
+
case "KeyF": // Fullscreen
|
|
127
|
+
if (window.document.fullscreen) {
|
|
128
|
+
await window.document.exitFullscreen();
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
const mainEle = window.document.getElementsByTagName('main')[0];
|
|
132
|
+
await mainEle.requestFullscreen();
|
|
133
|
+
}
|
|
134
|
+
break;
|
|
137
135
|
case "KeyP":
|
|
138
136
|
case "Digit0":
|
|
139
137
|
cycle.value = false;
|
|
@@ -174,16 +172,10 @@
|
|
|
174
172
|
onKey(keyEvent);
|
|
175
173
|
}
|
|
176
174
|
}
|
|
177
|
-
function itemWidth(item: IPictureFile): number {
|
|
178
|
-
const fac = item.Height / height.value;
|
|
179
|
-
return Math.floor(item.Width * fac);
|
|
180
|
-
}
|
|
181
|
-
function aspectRatio(item: IPictureFile): string {
|
|
182
|
-
return `${item.Width}/${item.Height}`;
|
|
183
|
-
}
|
|
184
175
|
function setMetaData(exif: Dictionary<any>, file: IPictureFile) {
|
|
185
176
|
origUrl = mediaService.getPhotoUrl(url.value, file.Url, '0x0x0');
|
|
186
177
|
metadata['Name'] = file.Name;
|
|
178
|
+
metadata['Url'] = file.Url;
|
|
187
179
|
if (exif) {
|
|
188
180
|
if (exif.Model)
|
|
189
181
|
metadata['Kamera'] = exif.Model;
|
|
@@ -278,9 +270,9 @@
|
|
|
278
270
|
<v-container fluid :style="heightStyle" class="bg-grey-darken-3">
|
|
279
271
|
<v-carousel hide-delimiters :show-arrows="false" v-model="index"
|
|
280
272
|
:width="width" :height="height" :cycle="cycle" :interval="interval"
|
|
281
|
-
@
|
|
273
|
+
@dblclick="onDblClick">
|
|
282
274
|
<v-carousel-item v-for="item in items" :key="item.DLNAID">
|
|
283
|
-
<img :src="item
|
|
275
|
+
<img :src="getUrl(item)" :style="sizeStyle" />
|
|
284
276
|
</v-carousel-item>
|
|
285
277
|
</v-carousel>
|
|
286
278
|
<v-dialog v-model="infoDialog" :fullscreen="isMobile" >
|
|
@@ -332,6 +324,7 @@
|
|
|
332
324
|
<v-col cols="4"><v-btn @click="onKeyClick('Digit9')">9</v-btn></v-col>
|
|
333
325
|
</v-row>
|
|
334
326
|
<v-row dense>
|
|
327
|
+
<v-col cols="4"><v-btn @click="onKeyClick('KeyF')">Full</v-btn></v-col>
|
|
335
328
|
<v-col cols="4"><v-btn @click="onKeyClick('KeyI')">Info</v-btn></v-col>
|
|
336
329
|
<v-col cols="4"><v-btn @click="onKeyClick('close')">Close</v-btn></v-col>
|
|
337
330
|
</v-row>
|