42
42
public class ListeDownloads extends LinkedList<DatenDownload> {
44
private final Daten ddaten;
44
private final Daten daten;
45
private final DownloadInfos downloadInfos = new DownloadInfos();
46
private final LinkedList<DatenDownload> aktivDownloads = new LinkedList<>();
46
public ListeDownloads(Daten ddaten) {
48
public ListeDownloads(Daten daten) {
50
52
//===================================
97
public synchronized DownloadInfos getInfos() {
98
downloadInfos.clean();
100
LinkedList<DatenDownload> activeDownloadList = getListOfStartsNotFinished(Start.QUELLE_ALLE);
101
for (DatenDownload download : activeDownloadList) {
102
++downloadInfos.anzDownloadsRun;
103
downloadInfos.byteAlleDownloads += (download.mVFilmSize.getSize() > 0 ? download.mVFilmSize.getSize() : 0);
104
if (download.start != null && download.start.status == Start.STATUS_RUN) {
105
// die Downlaods laufen gerade
106
downloadInfos.bandwidth += download.start.bandbreite; // bytes per second
107
downloadInfos.byteAktDownloads += (download.mVFilmSize.getAktSize() > 0 ? download.mVFilmSize.getAktSize() : 0);
108
if (download.start.restSekunden > downloadInfos.timeRestAktDownloads) {
109
// der längeste gibt die aktuelle Restzeit vor
110
downloadInfos.timeRestAktDownloads = download.start.restSekunden;
115
if (downloadInfos.bandwidth < 0) {
116
downloadInfos.bandwidth = 0;
119
if (downloadInfos.bandwidth > 0) {
120
// sonst macht die Restzeit keinen Sinn
121
final long b = downloadInfos.byteAlleDownloads - downloadInfos.byteAktDownloads;
123
downloadInfos.timeRestAllDownloads = 0;
125
downloadInfos.timeRestAllDownloads = b / downloadInfos.bandwidth;
127
if (downloadInfos.timeRestAllDownloads < downloadInfos.timeRestAktDownloads) {
128
downloadInfos.timeRestAllDownloads = downloadInfos.timeRestAktDownloads; // falsch geraten oder es gibt nur einen
130
if (downloadInfos.anzDownloadsRun == 1) {
131
downloadInfos.timeRestAllDownloads = 0; // gibt ja nur noch einen
135
return downloadInfos;
101
138
public synchronized void listePutzen(DatenDownload datenDownload) {
102
139
// fertigen Download löschen
103
140
boolean gefunden = false;
271
// public synchronized void getModel_(TModelDownload tModel, boolean abos, boolean downloads) {
272
// DatenDownload download;
273
// tModel.setRowCount(this.size());
274
// ListIterator<DatenDownload> iterator = this.listIterator();
276
// while (iterator.hasNext()) {
277
// download = iterator.next();
278
// if (download.istZurueckgestellt()) {
281
// boolean istAbo = download.istAbo();
282
// if (abos && istAbo || downloads && !istAbo) {
283
// for (int i = 0; i < DatenDownload.MAX_ELEM; ++i) {
284
// if (i == DatenDownload.DOWNLOAD_PROGRAMM_RESTART_NR) {
285
// tModel.setValueAt("", r, i);
286
// } else if (i == DatenDownload.DOWNLOAD_DATUM_NR) {
287
// tModel.setValueAt(download.datumFilm, r, i);
288
// } else if (i == DatenDownload.DOWNLOAD_RESTZEIT_NR) {
289
// tModel.setValueAt(download.getTextRestzeit(), r, i);
290
// } else if (i == DatenDownload.DOWNLOAD_BANDBREITE_NR) {
291
// tModel.setValueAt(download.getTextBandbreite(), r, i);
292
// } else if (i == DatenDownload.DOWNLOAD_PROGRESS_NR) {
293
// tModel.setValueAt("", r, i);
294
// } else if (i == DatenDownload.DOWNLOAD_GROESSE_NR) {
295
// tModel.setValueAt(download.mVFilmSize, r, i);
296
// } else if (i == DatenDownload.DOWNLOAD_REF_NR) {
297
// tModel.setValueAt(download, r, i);
298
// } else if (i != DatenDownload.DOWNLOAD_FILM_NR_NR && i != DatenDownload.DOWNLOAD_URL_NR && !DatenDownload.anzeigen(i)) {
299
// // Filmnr und URL immer füllen, egal ob angezeigt
300
// tModel.setValueAt("", r, i);
302
// tModel.setValueAt(download.arr[i], r, i);
308
// tModel.setRowCount(r);
309
// tModel.fireTableStructureChanged();
311
308
public synchronized void getModel(TModelDownload tModel, boolean abos, boolean downloads) {
313
310
tModel.setRowCount(0);
330
327
} else if (i == DatenDownload.DOWNLOAD_PROGRAMM_RESTART_NR
331
|| i == DatenDownload.DOWNLOAD_UNTERBROCHEN_NR) {
328
|| i == DatenDownload.DOWNLOAD_UNTERBROCHEN_NR
329
|| i == DatenDownload.DOWNLOAD_SPOTLIGHT_NR
330
|| i == DatenDownload.DOWNLOAD_INFODATEI_NR) {
333
332
} else if (i == DatenDownload.DOWNLOAD_DATUM_NR) {
334
333
object[i] = download.datumFilm;
337
336
} else if (i == DatenDownload.DOWNLOAD_BANDBREITE_NR) {
338
337
object[i] = download.getTextBandbreite();
339
338
} else if (i == DatenDownload.DOWNLOAD_PROGRESS_NR) {
339
object[i] = setProgress(download);
341
340
} else if (i == DatenDownload.DOWNLOAD_GROESSE_NR) {
342
341
object[i] = download.mVFilmSize;
343
342
} else if (i == DatenDownload.DOWNLOAD_REF_NR) {
356
private String setProgress(DatenDownload download) {
357
if (download.start != null) {
358
if (1 < download.start.percent && download.start.percent < Start.PROGRESS_FERTIG) {
359
String s = Double.toString(download.start.percent / 10.0) + "%";
360
while (s.length() < 5) {
365
return Start.getTextProgress(download.start);
357
372
@SuppressWarnings("unchecked")
358
373
public synchronized void setModelProgress(TModelDownload tModel) {
359
374
ListIterator<List> it = tModel.getDataVector().listIterator();
365
380
if (datenDownload.start.status == Start.STATUS_RUN) {
366
381
tModel.setValueAt(datenDownload.getTextRestzeit(), row, DatenDownload.DOWNLOAD_RESTZEIT_NR);
367
382
tModel.setValueAt(datenDownload.getTextBandbreite(), row, DatenDownload.DOWNLOAD_BANDBREITE_NR);
368
tModel.setValueAt(null, row, DatenDownload.DOWNLOAD_PROGRESS_NR);
383
tModel.setValueAt(setProgress(datenDownload), row, DatenDownload.DOWNLOAD_PROGRESS_NR);
369
384
tModel.setValueAt(datenDownload.mVFilmSize, row, DatenDownload.DOWNLOAD_GROESSE_NR);
380
395
if (datenDownload.start != null) {
381
396
l.set(DatenDownload.DOWNLOAD_RESTZEIT_NR, datenDownload.getTextRestzeit());
382
397
l.set(DatenDownload.DOWNLOAD_BANDBREITE_NR, datenDownload.getTextBandbreite());
383
l.set(DatenDownload.DOWNLOAD_PROGRESS_NR, null);
398
l.set(DatenDownload.DOWNLOAD_PROGRESS_NR, setProgress(datenDownload));
384
399
l.set(DatenDownload.DOWNLOAD_GROESSE_NR, datenDownload.mVFilmSize);
385
400
l.set(DatenDownload.DOWNLOAD_UNTERBROCHEN_NR, null);
417
if (ddaten.erledigteAbos.urlPruefen(film.getUrlHistory())) {
432
if (daten.erledigteAbos.urlPruefen(film.getUrlHistory())) {
418
433
// ist schon mal geladen worden
421
// if (checkUrlExists(film.arr[DatenFilm.FILM_URL_NR])) {
422
// // haben wir schon in der Downloadliste
425
// //diesen Film in die Downloadliste eintragen
426
// abo.arr[DatenAbo.ABO_DOWN_DATUM_NR] = new SimpleDateFormat("dd.MM.yyyy").format(new Date());
427
// //wenn nicht doppelt, dann in die Liste schreiben
428
DatenPset pSet = ddaten.listePset.getPsetAbo(abo.arr[DatenAbo.ABO_PSET_NR]);
436
DatenPset pSet = Daten.listePset.getPsetAbo(abo.arr[DatenAbo.ABO_PSET_NR]);
429
437
if (pSet != null) {
430
438
// mit der tatsächlichen URL prüfen, ob die URL schon in der Downloadliste ist
431
439
String urlDownload = film.getUrlFuerAufloesung(pSet.arr[DatenPset.PROGRAMMSET_AUFLOESUNG_NR]);
464
// public synchronized void listeNummerieren() {
466
// ListIterator<DatenDownload> it = listIterator();
467
// while (it.hasNext()) {
468
// String str = String.valueOf(i++);
469
// while (str.length() < 3) {
472
// it.next().arr[DatenDownload.DOWNLOAD_NR_NR] = str;
475
472
public String getInfo(boolean mitAbo) {
476
473
String textLinks;
477
474
// Text links: Zeilen Tabelle
527
524
textLinks += ", " + starts[6] + " fehlerhaft";
531
public String getInfo() {
533
// Text links: Zeilen Tabelle
534
// nicht gestarted, laufen, fertig OK, fertig fehler
535
int[] starts = getStarts();
536
if (starts[0] == 1) {
537
textLinks = "<span class=\"sans\"><b>Download:</b> 1";
539
textLinks = "<span class=\"sans\"><b>Downloads:</b> " + starts[0];
541
boolean print = false;
542
for (int ii = 1; ii < starts.length; ++ii) {
543
if (starts[ii] > 0) {
549
textLinks += " ( ";
550
if (starts[4] == 1) {
551
textLinks += "1 läuft";
553
textLinks += starts[4] + " laufen";
555
if (starts[3] == 1) {
556
textLinks += ", 1 wartet";
558
textLinks += ", " + starts[3] + " warten";
561
if (starts[5] == 1) {
562
textLinks += ", 1 fertig";
564
textLinks += ", " + starts[5] + " fertig";
568
if (starts[6] == 1) {
569
textLinks += ", 1 fehlerhaft";
571
textLinks += ", " + starts[6] + " fehlerhaft";
576
textLinks += "<br /></span>";
532
577
return textLinks;
536
581
* Get the number of all currently active downloads.
537
583
* @return number of active downloads.
539
public int getActiveDownloads()
541
int[] starts = getStarts();
585
public int getActiveDownloads() {
586
int[] starts = getStarts();
545
590
private synchronized int[] getStarts() {
605
650
* Return a List of all not yet finished downloads.
606
652
* @param quelle Use QUELLE_XXX constants from {@link mediathek.controller.starter.Start}.
607
653
* @return A list with all download objects.
609
655
public synchronized LinkedList<DatenDownload> getListOfStartsNotFinished(int quelle) {
610
LinkedList<DatenDownload> ret = new LinkedList<>();
656
aktivDownloads.clear();
611
657
for (DatenDownload download : this) {
612
658
if (download.start != null) {
613
659
if (download.start.status < Start.STATUS_FERTIG) {
614
660
if (download.getQuelle() == quelle || quelle == Start.QUELLE_ALLE) {
661
aktivDownloads.add(download);
666
return aktivDownloads;
623
669
public synchronized TModel getModelStarts(TModel model) {