Hallo Leute,
arbeite gerade an einem Aufnahmetimer in Rails. Habe dabei ein grundsätzliches Problem, dass jetzt nichts mit der Programmiersprache zutun hat. Und weil hier so einige Entwickler sind, die sowas ähnliches wohl schon programmiert haben frage ich hier einfach mal nach:
Es sollen Timer mit einmaliger und mehrmaliger Startzeit (wiederholende Timer) programmiert werden können.
Wiederholende Timer sollen nur einmalig in die Datenbank eingetragen werden. Also nur der Starttermin mit Startzeit und Wiederholungsoptionen.
Es soll zudem jederzeit ermittelt werden können welche Aufnahme momentan läuft.
Dies soll das Programm selbst anhand der Datenbank ermitteln können, ohne zu schauen was denn gerade für eine Aufnahme aktuell läuft. Die Funktion brauche ich zum Abgleich, was denn jetzt wirklich läuft und was eigentlich nach Plan laufen sollte und auch für eine Vorschau in Kalenderform.
Wenn ich jezt die aktuell laufende Aufnahme für alle Timer mit einmaliger Startzeit ermitteln möchte, dann mache ich einfach folgendes:
Suche mir alle Termine raus deren Startdatum = heute und Startzeit <= jetzt, und für Startermine die < heute gestartet frage ich die Startzeit nicht ab.
Jeztzt sortiere ich nach Stardatum und suche mir davon die Starzeit die am größten ist aus und habe die aktuell laufende Aufnahme.
Das Problem liegt bei wiederholenden Timern:
Ich kann das Startdatum leider nicht mit einbeziehen, denn diese können beliebig in der Vergangenheit liegen. Und nur mit Startzeit komme ich leider nicht weiter. Ich kann zwar ermitteln ob ein wiederholender Timer heute stattfindet (bei wöchentlichen Timre z.B. durch Abfrage des Wochentages und dann einfach nach der Startzeit schauen)
aber bei der Funktion: welche Aufnahme läuft momentan gibt es folgendes Problem:
Da mache z.B. für wöchentliche Timer folgendes: Startdatum <= heute, Startzeit<= jetzt, wday = wday.
Das Problem ist folgende:
Es kann eine Aufnahme gestern abend um 23 Uhr gestartet sein welche am nächsten Tag um 1 Uhr noch läuft. Diese wird dann aber nicht als aktuelle Aufnahme angezeigt, weil Startdatum ist zwar kleiner als =< heute, aber Startzeit ist nicht <= jetzt, weil 23 Uhr ist größer als 1 Uhr. Hier kann ich um das Problem zu lösen nicht einfach vorher nach Startdatum sortieren. Da das in der Datenbank eingetragen Startdatum wie gesagt beliebig in der Vergangenheit liegen kann.
Dachte als nächtes die wiedeholenden Timer "virtuell" abzubilden, d.h. diese für eine gewisse Zeit vorzuberechnen, aber vielleicht hat jemand eine einfachere Idee?