mirror of
https://github.com/xuthus83/pigallery2.git
synced 2024-11-03 21:04:03 +08:00
sorting and grouping
This commit is contained in:
parent
32632668ae
commit
517f483ffa
@ -123,10 +123,11 @@ export class Utils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static makeUTCMidnight(d: number | Date) {
|
static makeUTCMidnight(d: number | Date, offset: string) {
|
||||||
if (!(d instanceof Date)) {
|
if (!(d instanceof Date)) {
|
||||||
d = new Date(d);
|
d = new Date(d);
|
||||||
}
|
}
|
||||||
|
d = new Date(new Date(d).toISOString().substring(0,19) + (offset ? offset : '+00:00'))
|
||||||
d.setUTCHours(0);
|
d.setUTCHours(0);
|
||||||
d.setUTCMinutes(0);
|
d.setUTCMinutes(0);
|
||||||
d.setUTCSeconds(0);
|
d.setUTCSeconds(0);
|
||||||
@ -139,7 +140,7 @@ export class Utils {
|
|||||||
if (!(d instanceof Date)) {
|
if (!(d instanceof Date)) {
|
||||||
d = new Date(d);
|
d = new Date(d);
|
||||||
}
|
}
|
||||||
return new Date(new Date(d).toISOString().substring(0,19) + (offset ? offset : '')).getUTCFullYear();
|
return new Date(new Date(d).toISOString().substring(0,19) + (offset ? offset : '+00:00')).getUTCFullYear();
|
||||||
}
|
}
|
||||||
|
|
||||||
static getFullYear(d: number | Date, offset: string) {
|
static getFullYear(d: number | Date, offset: string) {
|
||||||
@ -225,6 +226,8 @@ export class Utils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Get the MS of the creationDate, adjusted for the offset. Effectively getting the MS value as if the photo did not contain an offset.
|
||||||
|
//One can consider this "Local" time of the photo.
|
||||||
static getLocalTimeMS(creationDate: number, creationDateOffset: string) {
|
static getLocalTimeMS(creationDate: number, creationDateOffset: string) {
|
||||||
const offsetMinutes = Utils.getOffsetMinutes(creationDateOffset);
|
const offsetMinutes = Utils.getOffsetMinutes(creationDateOffset);
|
||||||
return creationDate + (offsetMinutes ? (offsetMinutes * 60000) : 0);
|
return creationDate + (offsetMinutes ? (offsetMinutes * 60000) : 0);
|
||||||
|
@ -1087,7 +1087,7 @@ export class ClientGalleryConfig {
|
|||||||
name: $localize`Ignore timestamp offsets`,
|
name: $localize`Ignore timestamp offsets`,
|
||||||
priority: ConfigPriority.advanced,
|
priority: ConfigPriority.advanced,
|
||||||
},
|
},
|
||||||
description: $localize`If enabled, timestamp offsets are ignored and the local time of photos are used for searching, sorting and grouping. If disabled, global time is used and pictures with no timestamp are assumed to be in UTC (offset +00:00).`
|
description: $localize`If enabled, timestamp offsets are ignored, meaning that the local times of pictures are used for searching, sorting and grouping. If disabled, global time is used and pictures with no timestamp are assumed to be in UTC (offset +00:00).`
|
||||||
})
|
})
|
||||||
ignoreTimestampOffset: boolean = true;
|
ignoreTimestampOffset: boolean = true;
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ export class BlogService {
|
|||||||
|
|
||||||
const getDateGroup = (date: Date) => {
|
const getDateGroup = (date: Date) => {
|
||||||
// get UTC midnight date
|
// get UTC midnight date
|
||||||
const dateNum = Utils.makeUTCMidnight(date).getTime();
|
const dateNum = Utils.makeUTCMidnight(date, undefined).getTime();
|
||||||
let groupDate = dates.find((d, i) => i > dates.length - 1 ? false : dates[i + 1] > dateNum); //dates are sorted
|
let groupDate = dates.find((d, i) => i > dates.length - 1 ? false : dates[i + 1] > dateNum); //dates are sorted
|
||||||
|
|
||||||
// cant find the date. put to the last group (as it was later)
|
// cant find the date. put to the last group (as it was later)
|
||||||
|
@ -150,7 +150,11 @@ export class GallerySortingService {
|
|||||||
break;
|
break;
|
||||||
case SortByTypes.Date:
|
case SortByTypes.Date:
|
||||||
media.sort((a: PhotoDTO, b: PhotoDTO): number => {
|
media.sort((a: PhotoDTO, b: PhotoDTO): number => {
|
||||||
return a.metadata.creationDate - b.metadata.creationDate; //TODO: Offset
|
if (Config.Gallery.ignoreTimestampOffset === true) {
|
||||||
|
return Utils.getLocalTimeMS(a.metadata.creationDate, a.metadata.creationDateOffset) - Utils.getLocalTimeMS(b.metadata.creationDate, b.metadata.creationDateOffset);
|
||||||
|
} else {
|
||||||
|
return a.metadata.creationDate - b.metadata.creationDate;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case SortByTypes.Rating:
|
case SortByTypes.Rating:
|
||||||
@ -196,7 +200,13 @@ export class GallerySortingService {
|
|||||||
private getGroupByNameFn(grouping: GroupingMethod) {
|
private getGroupByNameFn(grouping: GroupingMethod) {
|
||||||
switch (grouping.method) {
|
switch (grouping.method) {
|
||||||
case SortByTypes.Date:
|
case SortByTypes.Date:
|
||||||
return (m: MediaDTO) => this.datePipe.transform(m.metadata.creationDate, 'longDate', m.metadata.creationDateOffset ? m.metadata.creationDateOffset : 'UTC'); //TODO: Offset:
|
if (Config.Gallery.ignoreTimestampOffset === true) {
|
||||||
|
//Datepipe used this way, converts creationDate to date in local time.
|
||||||
|
return (m: MediaDTO) => this.datePipe.transform(m.metadata.creationDate, 'longDate', m.metadata.creationDateOffset ? m.metadata.creationDateOffset : 'UTC');
|
||||||
|
} else {
|
||||||
|
//Grouping with global time, requires a common timeframe. Here and now it is UTC. (Could be config option later) //TODO: Configurable Default Timezone
|
||||||
|
return (m: MediaDTO) => this.datePipe.transform(m.metadata.creationDate, 'longDate', 'UTC');
|
||||||
|
}
|
||||||
|
|
||||||
case SortByTypes.Name:
|
case SortByTypes.Name:
|
||||||
return (m: MediaDTO) => m.name.at(0).toUpperCase();
|
return (m: MediaDTO) => m.name.at(0).toUpperCase();
|
||||||
@ -308,7 +318,7 @@ export class GallerySortingService {
|
|||||||
if (grouping.method === GroupByTypes.Date) {
|
if (grouping.method === GroupByTypes.Date) {
|
||||||
// We do not need the youngest as we group by day. All photos are from the same day
|
// We do not need the youngest as we group by day. All photos are from the same day
|
||||||
c.mediaGroups.forEach(g => {
|
c.mediaGroups.forEach(g => {
|
||||||
g.date = Utils.makeUTCMidnight(new Date(g.media?.[0]?.metadata?.creationDate)); //TODO: Offset:
|
g.date = Utils.makeUTCMidnight(new Date(g.media?.[0]?.metadata?.creationDate), g.media?.[0]?.metadata?.creationDateOffset);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user