From 58d64858db270901c9d62583dc772b2f01b935bd Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Fri, 25 Sep 2026 19:05:36 +0200 Subject: [PATCH] add time to chron --- src/Model/Utility/utility.ts | 123 +++++++++--------- .../Global/.settingsViewModel.ts.swp | Bin 24576 -> 0 bytes src/ViewModel/Global/coreViewModel.ts | 17 ++- 3 files changed, 75 insertions(+), 65 deletions(-) delete mode 100644 src/ViewModel/Global/.settingsViewModel.ts.swp diff --git a/src/Model/Utility/utility.ts b/src/Model/Utility/utility.ts index 3fa99275..2cc93fdb 100644 --- a/src/Model/Utility/utility.ts +++ b/src/Model/Utility/utility.ts @@ -18,6 +18,11 @@ export function createTimestamp(): string { return new Date().toISOString(); } +export function formatTime(date: Date): string { + const time = [date.getHours(), date.getMinutes()]; + return time.join(":"); +} + // filters export type StringEntryObject = { [key: string]: Stringifiable | undefined }; @@ -29,11 +34,11 @@ export function filterObjectsByStringEntries( const matches: Set = new Set(); for (const object of objects) { - const doesMatch: boolean = checkDoesObjectMatchReference( - reference, - converter(object), - ); - if (doesMatch) matches.add(object); + const doesMatch: boolean = checkDoesObjectMatchReference( + reference, + converter(object), + ); + if (doesMatch) matches.add(object); } return matches; @@ -47,12 +52,12 @@ export function filterObjectsByWords( const matches: Set = new Set(); for (const object of objects) { - const doesMatch: boolean = checkDoesObjectMatchSearch( - query, - getStringsOfObject, - object, - ); - if (doesMatch) matches.add(object); + const doesMatch: boolean = checkDoesObjectMatchSearch( + query, + getStringsOfObject, + object, + ); + if (doesMatch) matches.add(object); } return matches; @@ -68,30 +73,30 @@ export function checkDoesObjectMatchSearch( const stringsInObject: string[] = getStringsOfObject(object); const wordsInObject: string[] = []; for (const string of stringsInObject) { - const lowercaseWordsInString = string - .toString() - .toLowerCase() - .split(" ") - .filter((word) => word != ""); - wordsInObject.push(...lowercaseWordsInString); + const lowercaseWordsInString = string + .toString() + .toLowerCase() + .split(" ") + .filter((word) => word != ""); + wordsInObject.push(...lowercaseWordsInString); } const lowercaseWordsInQuery = query - .toLowerCase() - .split(" ") - .filter((word) => word != ""); + .toLowerCase() + .split(" ") + .filter((word) => word != ""); for (const queryWord of lowercaseWordsInQuery) { - if (queryWord[0] == "-") { - // exclusion - const wordContent = queryWord.substring(1); - if (wordsInObject.includes(wordContent)) { - return false; - } - } else { - if (wordsInObject.includes(queryWord) == false) { - return false; - } - } + if (queryWord[0] == "-") { + // exclusion + const wordContent = queryWord.substring(1); + if (wordsInObject.includes(wordContent)) { + return false; + } + } else { + if (wordsInObject.includes(queryWord) == false) { + return false; + } + } } return true; @@ -104,14 +109,14 @@ export default function implementFilter( itemToString: (item: T) => string, ) { function update() { - matches.clear(); - allItems.value.forEach((item: T) => { - if (!itemToString(item).toLowerCase().includes(query.value.toLowerCase())) return; - matches.add(item); - allItems.handleRemoval(item, () => { - matches.remove(item); - }); - }); + matches.clear(); + allItems.value.forEach((item: T) => { + if (!itemToString(item).toLowerCase().includes(query.value.toLowerCase())) return; + matches.add(item); + allItems.handleRemoval(item, () => { + matches.remove(item); + }); + }); } query.subscribe(update); allItems.handleAddition(update); @@ -125,16 +130,16 @@ export class HandlerManager { // manage setHandler = (id: string, handler: Handler): void => { - this.handlers.set(id, handler); + this.handlers.set(id, handler); }; deleteHandler = (id: string): void => { - this.handlers.delete(id); + this.handlers.delete(id); }; // trigger trigger = (item: T): void => { - [...this.handlers.values()].forEach((handler) => handler(item)); + [...this.handlers.values()].forEach((handler) => handler(item)); }; } @@ -146,26 +151,26 @@ export class IndexManager { // methods update = (items: T[]): void => { - this.sortedStrings = []; + this.sortedStrings = []; - let strings: string[] = []; - for (const item of items) { - const string: string = this.itemToString(item); - strings.push(string); - } + let strings: string[] = []; + for (const item of items) { + const string: string = this.itemToString(item); + strings.push(string); + } - this.sortedStrings = strings.sort(localeCompare); + this.sortedStrings = strings.sort(localeCompare); }; getIndex = (item: T): number => { - const string: string = this.itemToString(item); - const index: number = this.sortedStrings.indexOf(string); - return index; + const string: string = this.itemToString(item); + const index: number = this.sortedStrings.indexOf(string); + return index; }; // init constructor(itemToString: (item: T) => string) { - this.itemToString = itemToString; + this.itemToString = itemToString; } } @@ -192,9 +197,9 @@ export function padZero(string: string | undefined, length: number): string { export function parse(string: string): any { try { - return JSON.parse(string); + return JSON.parse(string); } catch { - return {}; + return {}; } } @@ -203,8 +208,8 @@ export function parseValidObject(string: string, reference: T): T | null { if (checkIsValidObject(parsed) == false) return null; const doesMatchReference: boolean = checkMatchesObjectStructure( - parsed, - reference, + parsed, + reference, ); if (doesMatchReference == false) return null; @@ -213,9 +218,9 @@ export function parseValidObject(string: string, reference: T): T | null { export function parseOrFallback(inputString: string): any { try { - return JSON.parse(inputString); + return JSON.parse(inputString); } catch { - return inputString; + return inputString; } } diff --git a/src/ViewModel/Global/.settingsViewModel.ts.swp b/src/ViewModel/Global/.settingsViewModel.ts.swp deleted file mode 100644 index a515b1c52b43957b1c7865732134b588a46d35b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24576 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 K^IvUQ)}H{Ph65h} diff --git a/src/ViewModel/Global/coreViewModel.ts b/src/ViewModel/Global/coreViewModel.ts index 4dc87a6c..df12dc57 100644 --- a/src/ViewModel/Global/coreViewModel.ts +++ b/src/ViewModel/Global/coreViewModel.ts @@ -1,7 +1,7 @@ import { v4 } from "uuid"; import * as React from "../../react"; import { allTranslations, Translations } from "../../View/translations"; -import { HandlerManager } from "../../Model/Utility/utility"; +import { formatTime, HandlerManager } from "../../Model/Utility/utility"; import StorageModel from "../../Model/Global/storageModel"; import SettingsModel from "../../Model/Global/settingsModel"; import FileTransferModel from "../../Model/Global/fileTransferModel"; @@ -73,19 +73,24 @@ export default class CoreViewModel { // CHRON chronHandlerManager = new HandlerManager(); todayDate = new React.State(new Date()); - get unwrappedTodayDate() { + time = new React.State<[number, number]>([0, 0]); + get unwrappedTodayDate(): Date { return new Date(this.todayDate.value); } + get timeString(): string { + return this.time.value.join(":"); + } startChron = (): void => { setInterval(this.chronHandlerManager.trigger, 2000); }; handleChron = (): void => { - const newDate = new Date(); - if (this.unwrappedTodayDate.toDateString() == newDate.toDateString()) - return; - this.todayDate.value = new Date(); + const newDate = new Date(); + if (this.unwrappedTodayDate.toDateString() != newDate.toDateString()) + this.todayDate.value = new Date(); + if (formatTime(newDate) != this.timeString) + this.time.value = [newDate.getHours(), newDate.getMinutes()]; }; // DRAG & DROP