BeanShell - Textdatei auslesen
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Tja, das mit dem core-Aufruf klingt noch am besten, aber das ist aus dem von Dir genannten und nachvollziehbaren Grund nicht wirdklich eine gute Idee.
Eine interaktive Lösung, die dem User gestattet, die Aktualisierung zu triggern wäre mir ja am liebsten.
Darum habe ich an einen Button gedacht.
Falls nicht interaktiv, könnte man das natürlich auch über einen Timer lösen, der in einem definierten Zeitzyklus die Daten aktualisiert. Für den Zeitzyklus könnte man im Plugin ja eine Einstellung "alle x Minuten aktuelisieren" vorsehen.
Eine interaktive Lösung, die dem User gestattet, die Aktualisierung zu triggern wäre mir ja am liebsten.
Darum habe ich an einen Button gedacht.
Falls nicht interaktiv, könnte man das natürlich auch über einen Timer lösen, der in einem definierten Zeitzyklus die Daten aktualisiert. Für den Zeitzyklus könnte man im Plugin ja eine Einstellung "alle x Minuten aktuelisieren" vorsehen.
Re: BeanShell - Textdatei auslesen
Die Frage ist zuerst, was du überhaupt aktualisieren willst? Der Filter der Programmtabelle aktualisiert sich von selbst, wenn er nicht der Standardfilter ist.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Das Problem derzeit ist, dass nach Änderungen in der CSV-Datei diese erst nach einem Neustart in die HashMap gelesen werden. Was also eigentlich zu triggern wäre, ist das Lesen der CVS-Datei.
Re: BeanShell - Textdatei auslesen
Dafür ist die letzte vorgeschlagene Lösung die richtige. Wirkt aber eben nur wenn der Filter selbst angewendet wird.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Warum kein Timer?
Re: BeanShell - Textdatei auslesen
Der ist in dem Fall nicht sinnvoll, denn der wird die meiste Zeit sowieso nichts zu tun haben. Das Prüfen des Änderungsdatum der Datei im Moment der Filterung ist da besser. Das Laden der Änderungen wirkt sich, wie ich schon schrieb, sowieso nicht aus, bevor accept aufgerufen wird und darüber hast du keine Kontrolle, denn bloß weil du die Änderungen geladen hast, wird z.B. die Lieblingssendung die einen solchen Filter verwenden keine neue Suche durchführen.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Ich dachte eher daran, den Timer so zu bauen, das die Datei z.B. alle 10 Minuten neu in die HashMap geschrieben wird.
Dann würden sich die Änderungen doch direkt auswirken, oder? Die Daten in der Map sind schließlich dann immer modulo 10 Minuten aktuell.
Dann würden sich die Änderungen doch direkt auswirken, oder? Die Daten in der Map sind schließlich dann immer modulo 10 Minuten aktuell.
Re: BeanShell - Textdatei auslesen
Nein, denn wann accept aufgerufen wird, bestimmt das Plugin nicht, vielleicht mit Ausnahme des aktuellen Filters, den ein Plugin setzen kann. Und wozu willst du die Datei alle 10 Minuten auslesen, wenn du sie auch einfach nur dann neu einlesen kannst, wenn sich was geändert hat? Eine Datei hat nicht umsonst eine Änderungsdatum. Natürlich könntest du dafür auch einen Timer nehmen, es ändert aber nichts an den Abfolgen, wann ein Filter angewendet wird.
Also so lange accept der Instanzen der Filterkomponente nicht aufgerufen wird, lohnt es sich nicht wirklich die Datei neu einzulesen, schon gar nicht dann wenn sich die Datei nicht geändert hat.
Also so lange accept der Instanzen der Filterkomponente nicht aufgerufen wird, lohnt es sich nicht wirklich die Datei neu einzulesen, schon gar nicht dann wenn sich die Datei nicht geändert hat.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Du hast natürlich recht. Wenn die Daten beim Aufruf von accept() aktualisiert werden, reicht das völlig.
Erst dann werden sie ja gebraucht.
Ich war gestern in meiner Konzentration wohl etwas abgelenkt. Ich hatte da einen besonders schweren Fall zu lösen.
Das war alles nicht so einfach. Jetzt ist der Patient aber wohl über den Berg!
Danke für Deinen Tipp!
Erst dann werden sie ja gebraucht.
Ich war gestern in meiner Konzentration wohl etwas abgelenkt. Ich hatte da einen besonders schweren Fall zu lösen.
Das war alles nicht so einfach. Jetzt ist der Patient aber wohl über den Berg!
Danke für Deinen Tipp!
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Dann werde ich das wohl einbauen.
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Irgendwas läuft da schief.
Also ich habe ein Klassenfeld lastFileModificationTime angelegt.
In accept(program) rufe ich readfile() auf
In readFile() mache ich dann
Alles andere sollte doch gleich laufen, aber die HashMap wird nicht aktualisiert. Die hat immer noch die alten Daten,
trotz clear() und File data = new File(mFile);. Wo ist da mein Denkfehler? Nach dem Neustart hat er die aktualisierten daten.
Also ich habe ein Klassenfeld lastFileModificationTime angelegt.
In accept(program) rufe ich readfile() auf
In readFile() mache ich dann
Code: Alles auswählen
if (mFile != null){
File data = new File(mFile);
if (data.lastModified() == lastFileModificationTime) {
return;
}
lastFileModificationTime = data.lastModified();
Alles andere sollte doch gleich laufen, aber die HashMap wird nicht aktualisiert. Die hat immer noch die alten Daten,
trotz clear() und File data = new File(mFile);. Wo ist da mein Denkfehler? Nach dem Neustart hat er die aktualisierten daten.
Re: BeanShell - Textdatei auslesen
Woher weißt du denn, dass die Daten noch die alten sind? Hast du mit System.out.println geprüft, ob die Methode richtig abläuft.
Du musst auch bedenken, dass accept durchaus auch mehrfach gleichzeitig aufgerufen werden könnte, d.h. du solltest die Methode readfile() synchronized machen, damit die immer nur einmal zu einer bestimmten Zeit aufgerufen werden kann.
Du musst auch bedenken, dass accept durchaus auch mehrfach gleichzeitig aufgerufen werden könnte, d.h. du solltest die Methode readfile() synchronized machen, damit die immer nur einmal zu einer bestimmten Zeit aufgerufen werden kann.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Also ich habe jetzt mit mittels
geprüft. Die Map wird in private synchronized void readFile() geleert. Trotzdem liefern ein bestehender Filter und ein neuer Filter immer noch die alten Ergebnisse nach einer Änderung in der Datei. Er scheint immer noch auf die alten Daten zuzugreifen und das trotz
in private synchronized void readFile().
Es wird doch eine Instanz der Filterkomponenete erstellt. Kann es sein, das TV-Browser immer noch mit der alten Instanz arbeitet? Dann könnte ich natürlich die CSVData ändern, bis der Arzt kommt. Muß die Instanz eventuell überschrieben bzw. neu initialisiert werden? Dann wäre die Frage, wie man das macht.
Code: Alles auswählen
System.out.println
Code: Alles auswählen
if (mCSVData.isEmpty()) {
System.out.println("Map is empty");
}
Code: Alles auswählen
if (mFile != null){
File data = new File(mFile);
Es wird doch eine Instanz der Filterkomponenete erstellt. Kann es sein, das TV-Browser immer noch mit der alten Instanz arbeitet? Dann könnte ich natürlich die CSVData ändern, bis der Arzt kommt. Muß die Instanz eventuell überschrieben bzw. neu initialisiert werden? Dann wäre die Frage, wie man das macht.
Re: BeanShell - Textdatei auslesen
Die Instanz(en) einer Klasse ist/sind sozusagen immer die aktuell vorhandenen Umsetzungen dieser Klasse. Alles was du in der Klasse programmiert hast, wird die Instanz auch so machen. Was du natürlich nicht weißt ist, welche Instanzen dieser Klasse, wo aufgerufen werden. D.h. auch wenn du siehst, dass die neuen Daten eingelesen werden, heißt das nicht, dass du das Ergebnis auch in TV-Browser siehst, denn womöglich wird dort nur eine Instanz aufgerufen, die nicht direkt sichtbar in der Anzeige auswirkt. Von einer angelegten Filterkomponente sollte es normalerweise nur eine Instanz geben, von der Klasse der Filterkomponente kann es aber mehrere Instanzen geben (beispielsweise zwei Filterkomponenten mit unterschiedlichen CSV-Dateien).
Bei einem Neustart von TV-Browser werden natürlich alle Instanzen neu erzeugt und die Filterung muss dann an entsprechender Stelle für eine mögliche Anzeige durchgeführt werden.
Wenn du kontrollieren möchtest, woher der Aufruf stammt, dann kannst du entweder mit dem Debugger arbeiten, oder du fügst Folgendes in den Quellcode ein:
Bei einem Neustart von TV-Browser werden natürlich alle Instanzen neu erzeugt und die Filterung muss dann an entsprechender Stelle für eine mögliche Anzeige durchgeführt werden.
Wenn du kontrollieren möchtest, woher der Aufruf stammt, dann kannst du entweder mit dem Debugger arbeiten, oder du fügst Folgendes in den Quellcode ein:
Code: Alles auswählen
StackTraceElement[] stackTraceEl = Thread.currentThread().getStackTrace();
for(StackTraceElement el : stackTraceEl) {
System.out.println(el);
}
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
Unterstütze die Weiterentwicklung von TV-Browser
-
- Plugin-Developer
- Beiträge: 1206
- Registriert: 25 Dez 2012, 07:35
Re: BeanShell - Textdatei auslesen
Aber dann wäre es natürlich sinvoller, den Neustart sozusagen zu simulieren und alle Instanzenm neu zu erzeugen.
Das kann ich aber wohl nicht aus der Klasse selbst machen.
Ich habe mal zur Laufzeit die CSV-Datei umbenannt. Das stört ihn aber gar nicht. Er arbeitet einfach mit den alten Daten weiter. Die Instanz wird also nicht aktualisiert, sondern ist statisch. Dann funktioniert Dein Ansatz in diesem Umfeld nicht.
Kann ich die Instanz irgendwie überschreiben?
Das kann ich aber wohl nicht aus der Klasse selbst machen.
Ich habe mal zur Laufzeit die CSV-Datei umbenannt. Das stört ihn aber gar nicht. Er arbeitet einfach mit den alten Daten weiter. Die Instanz wird also nicht aktualisiert, sondern ist statisch. Dann funktioniert Dein Ansatz in diesem Umfeld nicht.
Kann ich die Instanz irgendwie überschreiben?