@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 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";
@@ -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.47",
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.75",
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
- @change="onInput" @dblclick="onDblClick">
273
+ @dblclick="onDblClick">
282
274
  <v-carousel-item v-for="item in items" :key="item.DLNAID">
283
- <img :src="item.realUrl" />
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>