"Advanced" Downloader Library

    • Beta
    • Open Source

    Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

      "Advanced" Downloader Library

      Guten Abänd,

      ich hab vor 2 Tagen angefangen, mir eine kleine Library zu schreiben.

      Beschreibung:
      Mit dieser Bibliothek kannst du wie gewohnt Dateien aus dem Internet herunterladen. Allerdings stehen dir zusätzliche Funktionen zur Verfügung; zum Beispiel kannst du den Download pausieren. Außerdem beinhaltet die Bibliothek noch andere kleine Features.

      Klassen & Funktionen:
      Class Downloader

      Events:
      DownloadProgressChanged(sender, e)
      DownloadCompleted(sender, e)
      DownloadFailed(sender, e)

      Strukturen:

      DownloaderEventArgs
      • DownloadProgressChanged
      • DownloadCompleted
      • DownloadFailed
      Funktionen:
      Sub DownloadAsync(string downloadUrl, string targetPath)
      Startet den Download einer Datei Asynchron

      Sub CancelAsync()
      Bricht den aktuellen Vorgang ab und löst das Event "DownloadFailed" aus

      Sub TogglePause()
      Pausiert / Setzt den Download fort

      Function IsPaused() Boolean
      Hoffentlich selbsterklärend

      Function IsBusy() Boolean
      Hoffentlich selbsterklärend

      Class UrlTester

      Funktionen:
      Function Test(string Url) Boolean
      Testet eine URL im selben Thread (synchron)

      Class Bytes

      Funktionen:
      Function Format(double Bytes) String
      Formatiert eine beliebige Anzahl an Bytes zu einem String z.B. "345 KB"

      StopableStopWatch

      Beschreibung:
      Eine normale Stoppuhr, welche allerdings nur ganze Sekunden zählt aber pausierbar ist.

      Variabeln:
      long ElapsedSeconds
      Enthält den Wert, der bereits vergangenen Sekunden.

      Events:
      Tick(sender, e)

      Stukturen:
      PauseableStopWatchEventArgs
      • Tick

      Funktionen:
      Sub Start()
      Startet die Stoppuhr
      Sub TogglePause()
      Siehe Klasse "Downloader"
      Sub IsPaused()
      Siehe Klasse "Downloader"
      Sub IsBusy()
      Siehe Klasse "Downloader"
      Sub Stop()
      Stoppt die aktuelle Zeit


      Verwendete Programmiersprache(n) und IDE(s):
      Visual Basic .NET (IDE: VB 2013 Express)

      Systemanforderungen:
      .NET Framework 4.5 (da Async und Await verwendet wird)

      Download:
      TOMEW Downloader.dll (35 KB)

      Lizenz/Weitergabe:
      Freeware; ClosedSource
      Bitte nicht dekompillieren! - OpenSource wird's wenn die Library komplett fertig ist (u.a. keine Bugs mehr vorhanden sind)

      Abschluss:
      Danke an @ErfinderDesRades und @Artentus für die "Inspiration" sich mit Async & Await zu beschäftigen. :)

      Würde mich über Kritik & so freuen, meine Bibliothek ist noch nicht fertig/perfekt und ich würd' sie gern noch weiter verbessern.

      Liebe Grüße,

      -Tim

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „backtothetoast“ ()

      Ein paar Kritikpunkte:
      -Die Downloader-Klasse kann man nicht direkt ohne Asynchronität aufrufen (ein einfaches void fände ich super)
      -Die Bytes-Klasse arbeitet mit nem Double -> nimm nen Long (Int64)
      -Die Stopwatch-Klasse kann nur Sekunden - die Verwendung der Stopwatch-Klasse + ne List<Timespan> für die Dauer der Abschnitte fände ich super.
      -Das Projekt ist nicht OpenSource: gerade am Anfang ist das sehr hilfreich, da wir dir Empfehlungen bzgl. der Architektur geben & Fehler finden können, bevor sie überhaupt auftreten.
      Warum sind so Sachen, wie IsBusy oder IsPaused ne Function?
      Hierbei solltest Du Properties verwenden, das ist ja deren Sinn.

      Wie nafets schon sagte, warum kann ich keine Sachen synchron aufrufen? Das sollte unterstützt werden.
      Mach eine void synchron und im Asynchronen kannst Du dann mit Tasks arbeiten und via TaskFactory einen neuen erstellen, der dann die synchrone void aufruft.
      Einfach dann die Handler setzen und dort die Events auslösen, sobald jene aufgerufen werden.
      Dann brauchst Du eig. gar kein async - await und kannst auf 3.5 gehen.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Trade schrieb:

      Warum sind so Sachen, wie IsBusy oder IsPaused ne Function?
      Hierbei solltest Du Properties verwenden, das ist ja deren Sinn.

      Da stimme ich dir zu.

      Wie wäre es mit einer Funktion für die geschätzte (restliche) Downloaddauer und Downloadrate?
      Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

      43232069737420636f6f6c21
      @masterm Du widersprichst Dir grade selbst ;)
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      @masterm die is ja drin :D

      EDIT: Hab jetzt mal n paar Änderungen vorgenommen, soweit ich wusste wie's geht.

      nafets3646 schrieb:


      -Die Downloader-Klasse kann man nicht direkt ohne Asynchronität aufrufen (ein einfaches void fände ich super)
      -Die Bytes-Klasse arbeitet mit nem Double -> nimm nen Long (Int64)
      -Die Stopwatch-Klasse kann nur Sekunden - die Verwendung der Stopwatch-Klasse + ne List<Timespan> für die Dauer der Abschnitte fände ich super.
      -Das Projekt ist nicht OpenSource: gerade am Anfang ist das sehr hilfreich, da wir dir Empfehlungen bzgl. der Architektur geben & Fehler finden können, bevor sie überhaupt auftreten.

      1. Habs eigentlich extra asynchron gemacht, wozu bzw. warum synchron?
      2. Hab ich mal gemacht
      3. Weiß auch nicht so ganz wie du das meinst :D
      4. Bin ich mit einverstanden, findest du weiter untem im Beitrag. :)

      Im "DownloadProgressChanged" gibts ein paar Optionen wie z.B. die Geschwindigkeit (in Bytes), wieviel Sekunden ver- und noch gebraucht werden (ungefähr).
      Hier noch mal "genau":


      @Trade: Wie ich im "Punkt 1" schon sagte, würde ich denke machen, wenn ich auf anhieb weiß wie's funktioniert. :p

      Library: TOMEW Downloader.dll (35,84kB)
      Source: TOMEW Downloader.rar (gepackt; 10,11kB)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „backtothetoast“ ()

      Du sagst, dass Du mir zustimmst, wenn ich sage, dass es Properties und keine Funktionen sein sollen, aber dann sagst Du "Wie wäre es mit einer Funktion für die geschätzte (restliche) Downloaddauer und Downloadrate?" :P
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Achso, dann habe ich das falsch verstanden, sorry.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: