[C#] Downtify - OpenSource Spotify Downloader

07/16/2014 12:49 Mostey#31
Quote:
Originally Posted by Jalau View Post
Okay habs gepusht! Das einzige was er noch falsch anzeigt ist, die ingesammte Nummer der Title, weil er ja beim laden einige überspringt weil sie nicht abgespielt werden konnten... Das zieht er noch nicht ab von der Playlist Länge.
Und nach einiger Zeit kommt bei mir immer Downtify funktioniert nicht mehr, aber keine Ahnung wieso... Meistens wenn ich den PC nicht benutze, Downtify aber laufen habe. Ne Idee?

Edit:
Grade kam es wieder, meine temp.AppData Ordner sagt das hier:
[Only registered and activated users can see links. Click Here To Register...]

Und das: [Only registered and activated users can see links. Click Here To Register...]

Ne Idee? Also der Error kommt laut Google wenn ein geschützter Bereich beschrieben werden soll.... Aber woher kommt das? :/
Wenn beispielsweise ein Objekt referenziert wird, was NULL als Wert hat. Normalerweise checkt man das vorher auch bevor man damit etwas anstellt.
07/16/2014 14:00 Shawak#32
Ich schau's mir heute Abend mal an.

@Mostey:

Nur solange die Möglichkeit besteht, dass es zum Aufruf der Methode (oder whatever) keinen Wert haben könnte.
07/16/2014 16:26 Mostey#33
Quote:
Originally Posted by Shawak View Post
Nur solange die Möglichkeit besteht, dass es zum Aufruf der Methode (oder whatever) keinen Wert haben könnte.
Hat ja auch niemand etwas anderes behauptet. Anscheinend ruft dein Programm aber etwas auf, während es nicht genutzt wird.
07/16/2014 18:44 Shawak#34
Wollte dich auch nur Ergänzen.
Ich glaube ich habe jetzt oft genug gesagt, dass der momentane Code noch längst nicht vervollständigt wurde.
07/17/2014 14:19 Jalau#35
So, alles was du kommentiert hast geändert... Was ist jetzt mit dem Fehler ne Idee woran das liegt?

Quote:
Originally Posted by Mostey View Post
Wenn beispielsweise ein Objekt referenziert wird, was NULL als Wert hat. Normalerweise checkt man das vorher auch bevor man damit etwas anstellt.
Würde dann kein NullPointer kommen?
07/17/2014 18:19 Mostey#36
Quote:
Originally Posted by Jalau View Post
Würde dann kein NullPointer kommen?
Klassische Pointer wie es sie in C++ gibt, werden in .NET relativ gut abstrahiert. Ich musste jedenfalls noch nie (oder sehr selten bei einem WinAPI Wrapper) einen Pointer nutzen und das war ebenfalls ne Klasse, die schon relativ viel sichert.

Wenn du es so siehst, ist es eigentlich eine Art null pointer. Die Variable zeigt auf eine Adresse die NULL als Wert hat. (oh lol, wie obvious :o)
07/18/2014 15:00 Jalau#37
Quote:
Originally Posted by Mostey View Post
Klassische Pointer wie es sie in C++ gibt, werden in .NET relativ gut abstrahiert. Ich musste jedenfalls noch nie (oder sehr selten bei einem WinAPI Wrapper) einen Pointer nutzen und das war ebenfalls ne Klasse, die schon relativ viel sichert.

Wenn du es so siehst, ist es eigentlich eine Art null pointer. Die Variable zeigt auf eine Adresse die NULL als Wert hat. (oh lol, wie obvious :o)

Hm, also hast du ne direkte Idee woher das kommt? Google sagt eigendlich, dass es heißt das eine Datei die lesen oder geschrieben werden sollte, das nicht konnte wegen geschütztem oder vlt auch benutzem Bereich... Ich habe jetzt die ganze Nacht lange keinen Absturz gehabt, nachdem ich alles bis auf Downtify geschlossen habe... Entweder lag es an ein paar Änderungen oder daran das vlt meine MusikPlayer(Winamp, Spotify und iTunes) das irgendwie behindert haben?
07/18/2014 17:04 Mostey#38
Quote:
Originally Posted by Jalau View Post
Hm, also hast du ne direkte Idee woher das kommt? Google sagt eigendlich, dass es heißt das eine Datei die lesen oder geschrieben werden sollte, das nicht konnte wegen geschütztem oder vlt auch benutzem Bereich... Ich habe jetzt die ganze Nacht lange keinen Absturz gehabt, nachdem ich alles bis auf Downtify geschlossen habe... Entweder lag es an ein paar Änderungen oder daran das vlt meine MusikPlayer(Winamp, Spotify und iTunes) das irgendwie behindert haben?
Ich habe wenig Lust den Code zu debuggen aber was mir direkt einfällt (und ich durch den Code bestätigt bekommen habe) ist die falsche Benutzung von Streams.

Die Streams die genutzt werden (überwiegend der FileStream) werden nie wirklich explizit geschlossen oder disposed. Das OS locked das File (also die heruntergeladene MP3 Datei) und ein erneuter Zugriff darauf führt ganz bestimmt zu einer Access Violation, wenn das Objekt nicht korrekt freigegeben wird.

Es ist sowieso good practice den Stream in einem using statement zu deklarieren und erstellen, da automatisch Object.Dispose() aufgerufen wird, wenn der Stream out of scope geht (logischerweise direkt nach dem using Block)

Auch kann es zu anderen Fehlern kommen, die auftauchen können wenn der Thread nicht sauber beendet sondern gekillt wird.

[Only registered and activated users can see links. Click Here To Register...]

Quote:
And about "why is the file still locked?[...]" it could be because the file stream isn't closed because sometimes the thread may not end successfully and the locks aren't released.
Eher Spekulation aber vielleicht hilft es ja. Falls nicht, solltest du den Source wirklich mal debuggen und genau spezifizieren wann der Fehler passiert und wie er passieren könnte. Alternativ kannst du dir auch dein eigenes Programm schreiben, Shawak liefert ja schon ne Vorlage für Libraries und deren Nutzung.
07/18/2014 18:27 Jalau#39
@Mostey

Werde mal schauen :) Bin eigendlich ein Java Coder und hab vorher nie mit C# gearbeitet :D Deswegen bin ich da nicht wirklich versiert sondern probiere aus wie es in Java wäre und google viel :D Und momemant taucht der Fehler garnicht auf ;)
07/18/2014 19:43 Shawak#40
Hatte dir ja auch auf git gesagt using zu benutzen.
07/21/2014 22:58 SIEЯRA#41
Würde die Dateien gerne wie folgt abspeichern:

Interpret[Ordner] -> Album[Ordner] -> Tracks[Dateien]

Habt ihr da eine Idee?
Finde zwar die Stelle, wo das ganze definiert wird, jedoch kann ich da nicht viel ändern.



Kleiner Bugfixx von mir:

Mir ist aufgefallen, dass oft Tracks Fehler auslösen die Sonderzeichen wie [ /\ ] () drin haben.

Lösung sucht in der SpotifyDownloader Klasse die Definition der Variable fileName und überprüft den Dateinnamen mit folgender Funktion:

Code:
        public static String EntferneSonderzeichen(String text)
        {
            return System.Text.RegularExpressions.Regex.Replace(text, @"[^0-9a-zA-Z - .]", string.Empty);
        }
Das:
Code:
var fileName = dir + GetTrackFullName(downloadingTrack) + ".mp3";
wurde zu dem:
Code:
var fileName = dir + EntferneSonderzeichen(GetTrackFullName(downloadingTrack) + ".mp3");


Klappt bei mir so einwandfrei :)
Hoffe konnte dem ein oder anderen helfen :)
07/22/2014 08:13 Shawak#42
"jedoch kann ich da nicht viel ändern"

Das Projekt ist Open Source, wenn du wirklich willst, sollte das das kleinste Problem sein.
07/22/2014 16:30 Jalau#43
Quote:
Originally Posted by SIEЯRA View Post
Würde die Dateien gerne wie folgt abspeichern:

Interpret[Ordner] -> Album[Ordner] -> Tracks[Dateien]

Habt ihr da eine Idee?
Finde zwar die Stelle, wo das ganze definiert wird, jedoch kann ich da nicht viel ändern.



Kleiner Bugfixx von mir:

Mir ist aufgefallen, dass oft Tracks Fehler auslösen die Sonderzeichen wie [ /\ ] () drin haben.

Lösung sucht in der SpotifyDownloader Klasse die Definition der Variable fileName und überprüft den Dateinnamen mit folgender Funktion:

Code:
        public static String EntferneSonderzeichen(String text)
        {
            return System.Text.RegularExpressions.Regex.Replace(text, @"[^0-9a-zA-Z - .]", string.Empty);
        }
Das:
Code:
var fileName = dir + GetTrackFullName(downloadingTrack) + ".mp3";
wurde zu dem:
Code:
var fileName = dir + EntferneSonderzeichen(GetTrackFullName(downloadingTrack) + ".mp3");


Klappt bei mir so einwandfrei :)
Hoffe konnte dem ein oder anderen helfen :)
[Only registered and activated users can see links. Click Here To Register...]

Das ist meine Version des ganzen ;)
07/31/2014 15:02 Heggeg#44

Wird an dem Projekt eigentlich noch weitergearbeitet?



[Only registered and activated users can see links. Click Here To Register...]
07/31/2014 22:06 Shawak#45
momentan nicht