eigenes Projekt diese möglichkeiten ausloten wollte.
(abfrage der freedb datenbank, sowie späteres automatisches laden von
Bildern der Covers aus dem Inet, dazu sind interpret und album wichtig.)
hier mein bisheriger code:
Code: Alles auswählen
Structure Struc_CD_Info
DiscId.s
Author.s
Album.s
Genre.s
Year.s
title.s[31]
EndStructure
Global CD.Struc_CD_Info
Structure CON_THREAD
CID.l
*IP
Port.l
EndStructure
If InitNetwork() = 0
MessageRequester("Error", "No Network valid Stack found", 0)
End
EndIf
Procedure OpenNetworkConnectionThread(*COM.CON_THREAD)
Protected ConnectionID.l
ConnectionID = OpenNetworkConnection(PeekS(*COM\IP), *COM\Port)
If ConnectionID = 0
*COM\CID = -1
Else
*COM\CID = ConnectionID
EndIf
EndProcedure
Procedure.s IsEntry(Entry.s,Zeile.s)
Entry +"="
If Left(UCase(Zeile),Len(Entry))=UCase(Entry)
ProcedureReturn Right(Zeile,Len(Zeile)-Len(Entry))
EndIf
EndProcedure
Procedure ScanFreeDBResult(Content.s)
Repeat
Zeile.s = StringField(Content.s, i, Chr(10))
i+1
Entry.s="discid":If IsEntry(entry,Zeile.s)<>"":cd\discid + IsEntry(entry,Zeile):EndIf
Entry.s="dtitle":
If IsEntry(entry,Zeile.s)<>""
cd\Author + IsEntry(entry,Zeile)
p=FindString(cd\Author,"/",1)
If p
cd\album=Right(cd\Author ,Len(cd\Author)-p)
cd\Author =Left(cd\Author ,p-1)
EndIf
EndIf
Entry.s="dgenre":If IsEntry(entry,Zeile.s)<>"":cd\genre + IsEntry(entry,Zeile):EndIf
Entry.s="dyear":If IsEntry(entry,Zeile.s)<>"":cd\Year + IsEntry(entry,Zeile):EndIf
For T=1 To 30
Entry.s="ttitle"+Str(T):If IsEntry(entry,Zeile.s)<>"":cd\title[t]+ IsEntry(entry,Zeile):EndIf
Next
Until Zeile.s=""
EndProcedure
Procedure Main()
Protected ConVar.CON_THREAD, Connected.l, HttpHeader.s, *Buffer, Received.s, Recv.l
Protected Referer.s, UserAgent.s
OpenWindow(0, 0, 0, 450, 340, "Test", #PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
;StringGadget(0, 5, 5, 350, 20, "/~cddb/cddb.cgi?cmd=cddb+lscat+&hello=test+localhost+Purebasic+4.10&proto=5")
StringGadget(0, 5, 5, 350, 20, "/~cddb/cddb.cgi?cmd=cddb+Read+rock+9f0e010c&hello=test+localhost+Purebasic+4.10&proto=5")
ButtonGadget(1, 360, 5, 80, 20, "Send")
EditorGadget(2, 5, 35, 435, 300, #PB_Editor_ReadOnly)
HttpHeader = "GET {HTTPGETCOMMAND} HTTP/1.0" + #CRLF$
HttpHeader + "Referer: " + Referer + #CRLF$
HttpHeader + "User-Agent: " + UserAgent + #CRLF$
HttpHeader + #CRLF$ + #CRLF$
ConVar\IP = @"freedb.freedb.org"
ConVar\Port = 80
*Buffer = AllocateMemory(8192)
Repeat
Select WaitWindowEvent(10)
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case 0
If EventType() = #PB_EventType_Change
If GetGadgetText(0)
DisableGadget(1, 0)
Else
DisableGadget(1, 1)
EndIf
EndIf
Case 1
ConVar\CID = 0
Connected = 0
CreateThread(@OpenNetworkConnectionThread(), @ConVar)
ClearGadgetItemList(2)
DisableGadget(0, 1)
DisableGadget(1, 1)
EndSelect
EndSelect
If Connected = 0 And ConVar\CID <> 0
Connected = 1
If ConVar\CID <> -1
SendNetworkString(ConVar\CID, ReplaceString(HttpHeader, "{HTTPGETCOMMAND}", GetGadgetText(0)))
Else
AddGadgetItem(2, -1, "Unable to reach Host")
DisableGadget(0, 0)
DisableGadget(1, 0)
EndIf
EndIf
If ConVar\CID < -1 Or ConVar\CID > 0
Select NetworkClientEvent(ConVar\CID)
Case #PB_NetworkEvent_Data
Recv = ReceiveNetworkData(ConVar\CID, *Buffer, 8192)
If Recv > 0
Received + PeekS(*Buffer, Recv)
If Right(Received, 3) = "." + #CR$ + #LF$
AddGadgetItem(2, -1, Received)
ScanFreeDBResult(Received)
Debug "CD-ID="+ cd\discid
Debug "Interpret="+cd\Author
Debug "Album="+cd\Album
Debug "Genre="+cd\genre
Debug "Year="+cd\Year
For T=1 To 30
If cd\title[t]<>""
Debug "Track-"+Str(T)+"=" + cd\title[t]
EndIf
Next
Received = ""
DisableGadget(0, 0)
DisableGadget(1, 0)
CloseNetworkConnection(ConVar\CID)
ConVar\CID = 0
EndIf
EndIf
EndSelect
EndIf
ForEver
If ConVar\CID < -1 Or ConVar\CID > 0
CloseNetworkConnection(ConVar\CID)
EndIf
FreeMemory(*Buffer)
EndProcedure
Main()