Lyror Posted June 12, 2016 Report Share Posted June 12, 2016 Hallo, bei mir wird die Serienliste nicht geladen. Ich benutze Version 3.1 und Windows 10 Pro 64 Bit. Firewall ist komplett aus. Logfiles sind vorhanden. Auch mit 3.0.0.1 funktioniert es nicht. Link to comment Share on other sites More sharing options...
Lyror Posted June 12, 2016 Report Share Posted June 12, 2016 (edited) Ich habe das Problem gelöst indem ich in %appdata%\\BSNova die SQLite Datenbanken gelöscht habe. Ist vielleicht was beim erstellen schiefgegangen. Ich habe sie bei Mega.nz hochgeladen damit man vielleicht den Fehler finden kann. Ich hätte es selber getan, hätte ich den Source gehabt . Link. Falls man Kritik üben darf. Spoiler Ich habe mir die Datenbank cache angeschaut. Man könnte sie viel übersichtlicher gestalten durch Normalisierung d.h. eine Tabelle Serie etc und dann mit "JOIN" Statements die Informationen rausziehen. Das hat den Vorteil, dass man die Datenbank viel einfacher lesen kann von außen und man schneller Fehler finden kann. Edited June 12, 2016 by Lyror Link to comment Share on other sites More sharing options...
NeoGriever Posted June 12, 2016 Author Report Share Posted June 12, 2016 Die Cache-Datenbank wird demnächst vollständig aus BSNova entfernt, da es am Ende keinerlei sinn macht, die API weiterhin zu cachen. Auch, weil das System noch fehlerhaft ist. Aber danke für die Response Link to comment Share on other sites More sharing options...
Lyror Posted June 12, 2016 Report Share Posted June 12, 2016 Kein Problem. Funktioniert Super mit Cyberghost(VPN). Hast echt gute Arbeit geleistet. DANKE Link to comment Share on other sites More sharing options...
Lyror Posted June 12, 2016 Report Share Posted June 12, 2016 Hätte noch eine Verbesserung. 5mal(Einstellbar) erneut versuchen den Download zu starten, wenn eine Exception auftritt Link to comment Share on other sites More sharing options...
NeoGriever Posted June 12, 2016 Author Report Share Posted June 12, 2016 Diese "Exceptions" bei Downloads treten eher sehr sehr selten auf. Entweder, wenn alle Hoster tot sind (wie gesagt. selten) oder wenn ein interner Fehler bei der Anzeige des Download-Eintrages auftritt. Ich habe mit BSNova bereits einige Serien in Gänze am Stück heruntergeladen. Z. b. habe ich Doctor Who (die neue) in EINEM RUTSCH heruntergeladen. Alle Staffeln. (Und habe diese auch geschaut *lach*) Und nur bei der Ersten kam es zu einem kurzen Fehler. Eine automatische "Retry"-Funktion werde ich nicht einbauen, da dies die so schon sehr instabile Download-Funktion noch instabiler machen würde und es durchaus zu gehäuften Abstürzen kommen könnte. (Bin ehrlich gesagt froh, dass die Download-Funktion noch immer funktioniert XD) Link to comment Share on other sites More sharing options...
NeoGriever Posted June 14, 2016 Author Report Share Posted June 14, 2016 Ich arbeite aktuell an der nächsten Version. Dabei wird ein sehr interessantes Feature eingeführt, wenn ich es hinkriege. Es wird möglich sein, mit einem BSNova ein anderes BSNova fernzusteuern. Also Remote-Control quasi. Aber auch nur "beschränkt". In Form von: Man kann an den Ziel-BSNova die Downloads weiterleiten anstelle diese beim eigenen BSNova herunterladen zu lassen. Im Grunde also die MyJDownloader-Funktion von JDownloader für BSNova Features des neuen Features: - Einstellbarer zugelassener Port - Einstellbarer Sicherheitsschlüssel (Ohne diesen wird keine Verbindung zugelassen) - Mehrere "Verbindungen" können aufgebaut werden, sodass man die Aufgaben auf mehrere BSNova-Instanzen verteilen kann. - Einfache "Download-Weiterleitung" durch kleines Menü über der Episodenliste. Es gibt derzeit nur ein kleines Problem: Wenn ich eine TCP-Verbindung schließe, lässt sich garkeine TCP-Verbindung mehr herstellen. Es kommt dann stets zu dem Fehler: "Der Remote-Server hat die Verbindung verweigert". Und das, obwohl die exakt gleiche Verbindung kurz zuvor ja funktioniert hat. Hat da jemand eine Idee? PS: Hier mal die komplette TCP-Client/Server-Klasse, welche ich für meine Zwecke geschrieben habe: Imports System.Net.Sockets Imports System.IO Imports System.Net Public Class BSNovaConnect Public Class Server Private stream As NetworkStream = Nothing Private streamw As StreamWriter = Nothing Private streamr As StreamReader = Nothing Private Server As TcpListener = Nothing Private ipendpoint As IPEndPoint = Nothing Private mainthread As Threading.Thread = Nothing Private KeepActive As Boolean = True Private client As New TcpClient() Public LastException As Exception = Nothing Public Event Response(ByVal content As String) Public Sub Create(ByVal port As Integer) ipendpoint = New IPEndPoint(IPAddress.Any, port) mainthread = New Threading.Thread(AddressOf mainserver) mainthread.Start() End Sub Private Sub mainserver() Try Server = New TcpListener(IPAddress.Any,ipendpoint.Port) Server.Start() client = Server.AcceptTcpClient() stream = client.GetStream() streamr = New StreamReader(stream) streamw = New StreamWriter(stream) While KeepActive Dim line As String = streamr.ReadLine() If line <> "" Then If line.ToUpper() = "QUIT" Then System.Windows.Forms.MessageBox.Show("Client disconnected") Else RaiseEvent Response(line) End If End If End While KeepActive = True Catch ex As Exception LastException = ex End Try End Sub Public Sub Disconnect() KeepActive = False End Sub Public Sub Answer(ByVal str As String) streamw.WriteLine(str) streamw.Flush() End Sub End Class Public Class Client Private stream As NetworkStream = Nothing Private streamw As StreamWriter = Nothing Private streamr As StreamReader = Nothing Private Client As New TcpClient() Public IP As String = "" Public Port As Integer = 80 Public AuthKey As String = "" Private ResponseAwaiter As System.Threading.Thread = Nothing Public Event Response(ByVal content As String) Public Overloads Function Connect() As Boolean Return(Connect(IP,Port)) End Function Public Overloads Function Connect(ByVal selectedIP As String) As Boolean Return(Connect(selectedIP,Port)) End Function Public Overloads Function Connect(ByVal selectedIP As String,ByVal selectedPort As Integer) As Boolean Client.Connect(selectedIP,selectedPort) If Client.Connected Then stream = Client.GetStream() streamw = New StreamWriter(stream) streamr = New StreamReader(stream) SendCommand("AUTH" & AuthKey) Dim accepted As Boolean = False Dim cycle As Integer = 20 While cycle > 0 Dim buffer As String = streamr.ReadLine().Trim() If buffer = "ACCEPTED" Then accepted = True Exit While ElseIf buffer = "FAILED" Then accepted = False Exit While End If System.Threading.Thread.Sleep(2) End While If accepted Then ResponseAwaiter = New System.Threading.Thread(AddressOf ResponseAwait) ResponseAwaiter.Start() Else Client.Close() End If End If Return(Client.Connected) End Function Public Sub Disconnect() If Client.Connected Then Client.Client.Disconnect(False) Client.Close() Client = New TcpClient() End If End Sub Private Sub ResponseAwait() While Client.Connected Try Dim buffer As String = streamr.ReadLine() If buffer <> "" Then RaiseEvent Response(buffer) End If Catch End Try End While End Sub Public ReadOnly Property Connected As Boolean Get Return(Client.Connected) End Get End Property Public Sub SendCommand(ByVal str As String) streamw.WriteLine(str) streamw.Flush() End Sub End Class End Class Ein grobes Beispiel: If <BSNovaConnect.Client>.Connect("127.0.0.1",7175) Then <BSNovaConnect.Client>.Disconnect() <BSNovaConnect.Client>.Connect("127.0.0.1",7175) ' Crash, obwohl es eigentlich gehen müsste. End If Im Quelltext sieht man, dass ich bei Disconnect() den TCP-Clienten neu erstelle, nachdem ich diesen zum Trennen gezwungen habe. Somit ist es eine Neue Verbindung. Aber der Port ist weiterhin durch den geschlossenen TCPClient geblockt/benutzt. Somit kann ich nicht erneut darauf zugreifen. Kennt jemand eine Lösung? Oo Link to comment Share on other sites More sharing options...
maxxe Posted June 14, 2016 Report Share Posted June 14, 2016 Wann kommt die Funtkion die Serieninfo.txt abzuschalten? Link to comment Share on other sites More sharing options...
NeoGriever Posted June 14, 2016 Author Report Share Posted June 14, 2016 Kommt dann in der nächsten Version auch mit rein. 1 Link to comment Share on other sites More sharing options...
aziell Posted June 14, 2016 Report Share Posted June 14, 2016 Früher musste man den NetworkStream noch vorher schließen Link to comment Share on other sites More sharing options...
NeoGriever Posted June 14, 2016 Author Report Share Posted June 14, 2016 Danke für den Tipp. Werd ich mal ausprobieren. Link to comment Share on other sites More sharing options...
User51 Posted June 15, 2016 Report Share Posted June 15, 2016 Bin inzwischen auch auf der 3.1 er Version und muss sagen: Chapeau ! die Integration des Serienkalenders ist echt nice. Frage: gibt es bereits eine Auswahlfunktion zwischen deutsch und englisch und finde ich die nur nicht ? ansonsten würd ich das vorschlagen. Link to comment Share on other sites More sharing options...
gbgt5 Posted June 15, 2016 Report Share Posted June 15, 2016 @User51 Ich glaub erst wenn es BS.to V2 geben würde dann könnte Neo auf sein BS Nova machen Oder? @NeoGriever Link to comment Share on other sites More sharing options...
User51 Posted June 15, 2016 Report Share Posted June 15, 2016 Klingt logisch, aber könnte ja sein, dass man via API schon Zugriff auf die Sprachdaten hat. Link to comment Share on other sites More sharing options...
gbgt5 Posted June 15, 2016 Report Share Posted June 15, 2016 Könnte sein aber eher unwahrscheinlich Link to comment Share on other sites More sharing options...
NeoGriever Posted June 16, 2016 Author Report Share Posted June 16, 2016 1. BS.To v2 hat nichts mit der API zu tun 2. Sprachdaten? Meinst du, ob es englisch oder deutsch sein soll, wenn entsprechend beide Sprachen hochgeladen sind? Nun ja. Das geht leider noch nicht. Und ich bin mir auch nicht sicher, ob das in die API mit eingebaut wird. Link to comment Share on other sites More sharing options...
jonnyy Posted June 18, 2016 Report Share Posted June 18, 2016 (edited) die idee deines tools finde ich echt toll und wollte dir vorschlagen ein kurzes script das ich selber gemacht habe optional zu implementieren https://www.dropbox.com/sh/iijzhy21hpnegtz/AACDxnFlb9G7P2yKE9v69AyXa?dl=0 der source code ist in der readme datei (ich weiß es ist auf c++ gemacht aber ich bin mir sicher das es nicht allzu schwierig wird das zu porten) das script überprüft die bs.to seiten auf neue episoden zu vorgegebenen serien und gibt eine meldung aus fals neue episoden online gestellt werden es stehht dir natürlich frei den source code zu verändern Edited June 18, 2016 by jonnyy 2 Link to comment Share on other sites More sharing options...
gbgt5 Posted June 18, 2016 Report Share Posted June 18, 2016 Cool Link to comment Share on other sites More sharing options...
NeoGriever Posted June 18, 2016 Author Report Share Posted June 18, 2016 Könnte versuchen, einen eigenen Notifier umzusetzen. Die Idee stand schonmal im Raum. 1 Link to comment Share on other sites More sharing options...
Lyror Posted June 18, 2016 Report Share Posted June 18, 2016 Hey, Falls du noch Hilfe bei deinem Socket Problem hast könnte dir vielleicht helfen. Adde mich mal auf Skype: samy02091997 Lyror Link to comment Share on other sites More sharing options...
NeoGriever Posted June 19, 2016 Author Report Share Posted June 19, 2016 1. Ich nutze kein Skype (bzw. sehr selten) 2. Inzwischen habe ich mich schlau genug gelesen, um eine für mich allumfassende tcp-multiclient-server-library umzusetzen, welche ich bei bedarf in all meinen anderen Projekten einsetzen kann (Ähnlich meiner hweb.dll oder meiner globalconfig.dll :D) 3. Danke für die angebotene Hilfe. PS: Die Klasse, welche mir die TCP-Client/Server-Funktionen bereitstellt, kann ich gerne hier zur Verfügung stellen Link to comment Share on other sites More sharing options...
Lyror Posted June 19, 2016 Report Share Posted June 19, 2016 dann nenn mir einen anderen dienst zum chatten. Falls du irgendwo Probleme hast kannst mich anschreiben. Bin hier nicht so aktiv deswegen Link to comment Share on other sites More sharing options...
NeoGriever Posted June 19, 2016 Author Report Share Posted June 19, 2016 Ich habe meine Klasse vervollständigt. Vollständige MultiClient-Unterstützung und sogar mit Disconnect-Erkennung/Events. Sehr hilfreich alles Hier ist die Klasse: Imports System.Net.Sockets Imports System.IO Imports System.Net Public Class BSNovaConnect Public Class ConnectedClient Private client As TcpClient = Nothing Private stream As NetworkStream = Nothing Private streamw As StreamWriter = Nothing Private streamr As StreamReader = Nothing Private ReceiveThread As System.Threading.Thread = Nothing Private KeepAlive As Boolean = True Private cached_ip As IPAddress = Nothing Private EindeutigeID As String = "" Public Event DataReceived(ByRef obj As ConnectedClient,ByVal data As String) Public Event Disconnected(ByRef obj As ConnectedClient) Public Sub New(ByRef connectclient As TcpClient) client = connectclient client.ReceiveTimeout = 5 client.SendTimeout = 5 stream = client.GetStream() streamr = New StreamReader(stream) streamw = New StreamWriter(stream) EindeutigeID = System.Guid.NewGuid().ToString() ReceiveThread = New System.Threading.Thread(AddressOf ReceiveSub) ReceiveThread.Start() Dim disconnectWaiter As New System.Threading.Thread(AddressOf WaitDisconnect) disconnectWaiter.Start() Send("SUID" & EindeutigeID) cached_ip = IPAddress.Parse(client.Client.RemoteEndPoint.ToString().Split(CChar(":"))(0)) End Sub Public ReadOnly Property UniqueID As String Get Return(EindeutigeID) End Get End Property Public ReadOnly Property Connected As Boolean Get Return(client.Connected) End Get End Property Public ReadOnly Property IP As IPAddress Get Try Return(IPAddress.Parse(client.Client.RemoteEndPoint.ToString().Split(CChar(":"))(0))) Catch Return(cached_ip) End Try End Get End Property Private Sub ReceiveSub() While KeepAlive Try If client.Connected Then Dim data As String = streamr.ReadLine() If data <> "" Then Try If data.Length > 6 And data.Substring(0,6) = "/nick " Then Dim newnick As String = data.Substring(6).Trim() If newnick.Length > 3 Then Dim oldNick As String = EindeutigeID EindeutigeID = newnick Send("SUID" & newnick) Send("Nickname akzeptiert") RaiseEvent DataReceived(Me,"Nicknamenwechsel: " & oldNick & " > " & newnick) Else Send("Nickname nicht akzeptiert") RaiseEvent DataReceived(Me,"Versuchter Nicknamenwechsel fehlgeschlagen") End If Else RaiseEvent DataReceived(Me,data) End If Catch RaiseEvent DataReceived(Me,data) End Try End If Else KeepAlive = False Disconnect() End If Catch End Try End While KeepAlive = True End Sub Private Sub WaitDisconnect() Try Dim ReadState As Boolean = client.Client.Poll(-1, SelectMode.SelectRead) Dim WriteState As Boolean = client.Client.Poll(-1,SelectMode.SelectWrite) If ReadState And WriteState Then Disconnect() Else WaitDisconnect() End If Catch Disconnect() End Try End Sub Public Sub Disconnect() KeepAlive = False streamr.Close() streamw.Close() stream.Close() streamr.Dispose() streamw.Dispose() stream.Dispose() client.Close() RaiseEvent Disconnected(Me) End Sub Public Function Send(ByVal s As String) As Boolean Try If client.Connected Then streamw.WriteLine(s) streamw.Flush() Return(True) Else Return(False) End If Catch Return(False) End Try End Function End Class Public Class Server Private Server As TcpListener = Nothing Private ipendpoint As IPEndPoint = Nothing Private mainthread As Threading.Thread = Nothing Private KeepActive As Boolean = True Private connections As New List(Of ConnectedClient) Public LastException As Exception = Nothing Public Event DataReceived(ByRef obj As ConnectedClient,ByVal data As String) Public Event NewClient(ByRef obj As ConnectedClient) Public Event ClientDisconnected(ByRef obj As ConnectedClient) Public Sub Create(ByVal port As Integer) ipendpoint = New IPEndPoint(IPAddress.Any, port) mainthread = New Threading.Thread(AddressOf mainserver) mainthread.Start() End Sub Public Sub SendToAll(ByVal s As String,Optional ByRef expect As ConnectedClient = Nothing) Dim i As ConnectedClient = Nothing For Each i In connections If i IsNot expect Then i.Send(s) End If Next End Sub Public Overloads Sub SendTo(ByVal s As String,ByRef targetClient As ConnectedClient) targetClient.Send(s) End Sub Public Overloads Sub SendTo(ByVal s As String,ByRef targetID As String) Dim i As ConnectedClient = Nothing For Each i In connections If i.UniqueID = targetID Then SendTo(s,i) Exit For End If Next End Sub Public Overloads Sub SendTo(ByVal s As String,ByRef targetIP As IPAddress) Dim i As ConnectedClient = Nothing For Each i In connections If i.IP.ToString() = targetIP.ToString() Then SendTo(s,i) Exit For End If Next End Sub Private Sub mainserver() Try Server = New TcpListener(IPAddress.Any,ipendpoint.Port) Server.Start() Try While KeepActive Try Dim temp_client As TcpClient = Server.AcceptTcpClient() Dim cclient As New ConnectedClient(temp_client) RaiseEvent NewClient(cclient) AddHandler cclient.DataReceived, AddressOf DataIncome AddHandler cclient.Disconnected, AddressOf Disconnected connections.Add(cclient) Catch End Try End While KeepActive = True Catch ex As Exception KeepActive = True mainserver() End Try Catch ex As Exception LastException = ex End Try End Sub Public Sub Disconnected(ByRef obj As ConnectedClient) RaiseEvent ClientDisconnected(obj) End Sub Public Sub DataIncome(ByRef obj As ConnectedClient,ByVal data As String) RaiseEvent DataReceived(obj,data) End Sub Public Sub Disconnect() For Each i As ConnectedClient In connections i.Send("TERMINATED") i.Disconnect() Next KeepActive = False End Sub End Class Public Class Client Private stream As NetworkStream = Nothing Private streamw As StreamWriter = Nothing Private streamr As StreamReader = Nothing Private Client As New TcpClient() Private tempLastResponse As String = "" Private ResponseAwaiter As System.Threading.Thread = Nothing Public Tag As Object = Nothing Public IP As String = "" Public Port As Integer = 80 Public EindeutigeID As String = "" Public Event Response(ByRef obj As Client,ByVal content As String) Public Event Disconnected(ByRef obj As Client) Public ReadOnly Property Connected As Boolean Get Return(Client.Connected) End Get End Property Public ReadOnly Property LastResponse As String Get Return(tempLastResponse) End Get End Property Private Sub ResponseAwait() Try While Client.Connected Try Dim buffer As String = streamr.ReadLine() If buffer <> "" Then If buffer.Length > 4 And buffer.Substring(0,4) = "SUID" Then EindeutigeID = buffer.Substring(4) Else tempLastResponse = buffer RaiseEvent Response(Me,buffer) End If End If Catch End Try End While Catch End Try End Sub Public Overloads Function Connect() As Boolean EindeutigeID = System.Guid.NewGuid().ToString() Return(Connect(IP,Port)) End Function Public Overloads Function Connect(ByVal selectedIP As String) As Boolean Return(Connect(selectedIP,Port)) End Function Public Overloads Function Connect(ByVal selectedIP As String,ByVal selectedPort As Integer) As Boolean Client.Connect(selectedIP,selectedPort) If Client.Connected Then stream = Client.GetStream() streamw = New StreamWriter(stream) streamr = New StreamReader(stream) ResponseAwaiter = New System.Threading.Thread(AddressOf ResponseAwait) ResponseAwaiter.Start() End If Return(Client.Connected) End Function Public Sub Disconnect() If Client.Connected Then streamr.Close() streamw.Close() stream.Close() streamr.Dispose() streamw.Dispose() stream.Dispose() Client.Close() Client = New TcpClient() RaiseEvent Disconnected(Me) End If End Sub Public Sub Send(ByVal str As String) If Client.Connected Then streamw.WriteLine(str) streamw.Flush() End If End Sub End Class End Class Link to comment Share on other sites More sharing options...
NeoGriever Posted June 20, 2016 Author Report Share Posted June 20, 2016 Voila. Neue Version Nun mit Remote-Anbindung ähnlich wie beim JDownloader Wichtig: Ich weiß nicht, ob Domain-Namen funktionieren! Bitte also vorerst nur IP's nutzen. http://www.mediafire.com/download/xb1qbe8wf1ju210/BSNova+v3.1.0.1+B.exe Viel Spaß damit 2 Link to comment Share on other sites More sharing options...
gbgt5 Posted June 20, 2016 Report Share Posted June 20, 2016 Also ich check es nicht mit den Remote Funktion was kann man da noch mal machen und wie macht man das kann mir das mal jemand von euch erklären? Link to comment Share on other sites More sharing options...
Recommended Posts