Ich habe hier ein etwas komplexeres Problem.
Eins nach dem anderen:
Ich habe vor, von einer Website Bilder herunterzuladen. (Übrigens legal. Von der Website wird eine API dafür bereitgestellt.)
Mit einem Aufruf an die API werden die Informationen über das Bild heruntergeladen. Das beinhaltet die URL zur Bild-Datei, eine URL zu einem Thumbnail, ein paar Tags, MD5-Hash, Höhe und Breite und noch einige andere Sachen. Der API wird dazu die ID des Bildes übergeben. Die ID steigt immer an. Es gibt keine Lücken. Anschließend wird über die URL das Bild heruntergeladen.
Ich sehe mir diese Bilder an und entscheide, ob ich es behalten will.
Diese Informationen sollen (zusätzlich zu den Bildern und Thumbnails selbst) in einer Cache-Liste gespeichert werden.
Und hier liegt das Problem.
Es gibt als erstes das aktuelle Item mit einer ID. Dann soll eine gewisse Anzahl an Items vorausgeladen werden (Die ID wird erhöht). Weiters soll eine gewisse Anzahl an Cache-Einträgen behalten werden. Aber nur, wenn diese direkt aufeinander folgen.
Ein Beispiel:
Die aktuelle ID ist 10 und es sollen 5 Bilder vorausgespeichert und 5 behalten werden.
Der Cache sieht also im ersten Moment so aus:
Klammern mit Zahlen sind geladene Inhalte, Klammern ohne Zahlen sind Platzhalter.
Nach und nach werden Elemente vorausgeladen, bis die Liste so aussieht.
Im Normalfall wird die ID des aktuellen Elements um 1 erhöht.
Die Liste wird dabei um 1 Platz nach links verschoben:
Und das letzte Element wird vorausgeladen:
Die anderen Elemente werden behalten, weil es nicht selten vorkommt, dass ich mal ein Element zurückgehe. Dabei wird das ganz rechte Item verworfen und die Liste wird nach rechts verschoben:
Das wäre noch relativ einfach, aber mich hängt's bei folgendem aus:
Wenn ich jetzt von ID 10 zu beispielsweise ID 18 springe, wie baue ich dann die Liste um? Wie finde ich heraus, welche Elemente noch gebraucht werden und wohin diese kommen?
Ein weiteres Problem ist, dass ich die Einträge gerne nach unterschiedlichen Informationen filtern würde. Das heißt, wenn die Bilder mit den IDs 10, 11, 13, 16 und 17 zutreffen, sollen auch diese in der Liste vorkommen. Wenn also zum nächsten Element gesprungen wird, wird nicht einfach die ID erhöht.
Also wie implementiert man so einen Cache vernünftig?
Eins nach dem anderen:
Ich habe vor, von einer Website Bilder herunterzuladen. (Übrigens legal. Von der Website wird eine API dafür bereitgestellt.)
Mit einem Aufruf an die API werden die Informationen über das Bild heruntergeladen. Das beinhaltet die URL zur Bild-Datei, eine URL zu einem Thumbnail, ein paar Tags, MD5-Hash, Höhe und Breite und noch einige andere Sachen. Der API wird dazu die ID des Bildes übergeben. Die ID steigt immer an. Es gibt keine Lücken. Anschließend wird über die URL das Bild heruntergeladen.
Ich sehe mir diese Bilder an und entscheide, ob ich es behalten will.
Diese Informationen sollen (zusätzlich zu den Bildern und Thumbnails selbst) in einer Cache-Liste gespeichert werden.
Und hier liegt das Problem.
Es gibt als erstes das aktuelle Item mit einer ID. Dann soll eine gewisse Anzahl an Items vorausgeladen werden (Die ID wird erhöht). Weiters soll eine gewisse Anzahl an Cache-Einträgen behalten werden. Aber nur, wenn diese direkt aufeinander folgen.
Ein Beispiel:
Die aktuelle ID ist 10 und es sollen 5 Bilder vorausgespeichert und 5 behalten werden.
Der Cache sieht also im ersten Moment so aus:
Klammern mit Zahlen sind geladene Inhalte, Klammern ohne Zahlen sind Platzhalter.
Nach und nach werden Elemente vorausgeladen, bis die Liste so aussieht.
Im Normalfall wird die ID des aktuellen Elements um 1 erhöht.
Die Liste wird dabei um 1 Platz nach links verschoben:
Und das letzte Element wird vorausgeladen:
Die anderen Elemente werden behalten, weil es nicht selten vorkommt, dass ich mal ein Element zurückgehe. Dabei wird das ganz rechte Item verworfen und die Liste wird nach rechts verschoben:
Das wäre noch relativ einfach, aber mich hängt's bei folgendem aus:
Wenn ich jetzt von ID 10 zu beispielsweise ID 18 springe, wie baue ich dann die Liste um? Wie finde ich heraus, welche Elemente noch gebraucht werden und wohin diese kommen?
Ein weiteres Problem ist, dass ich die Einträge gerne nach unterschiedlichen Informationen filtern würde. Das heißt, wenn die Bilder mit den IDs 10, 11, 13, 16 und 17 zutreffen, sollen auch diese in der Liste vorkommen. Wenn also zum nächsten Element gesprungen wird, wird nicht einfach die ID erhöht.
Also wie implementiert man so einen Cache vernünftig?
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils