@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 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";
@@ -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.46",
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.74",
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>
@@ -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
- mediaService.log.trace('Photos start with ' + selected.selected.DLNAID);
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)">