' Gambas class file

Public hHTTPClient As HttpClient
Public aFeedURL As New String[4]
Private iCount As Integer

' RSS-Spezifikation: http://www.rssboard.org/rss-specification
' Original:  http://www.beanizer.org/site/index.php/en/Articles/First-steps-with-Gambas-I.html

Public Sub Form_Open()

Dim hFeed As FFeedItem

  Q  FMain.Center()
  FMain.Title = "Einsatz der Komponente gb.web.feed"
  hHTTPClient = New HttpClient As "hHTTPClient"

  aFeedURL[0] = "http://www.tagesschau.de/xml/rss2"
  cmbFeedURL.Add("ARD", 0)
  WebView.Background = &HE1EAF6

' Automatisch die erste Feed-URL auswählen
  If aFeedURL.Count > 0 Then cmbFeedURL.Index = 0  

End ' Form_Open()

Public Sub cmbFeedURL_Click()
  
'-- Der Inhalt des ListContainers wird gelöscht  
    ListContainer.Clear()

'-- Es wird die URL des ersten Feeds ausgewählt    
    hHTTPClient.URL = aFeedURL[cmbFeedURL.Index]
    
'-- Der Download von der Feed-URL wird angeschoben
    hHTTPClient.Get()
    
'-- Es wird so lange gewartet, bis alle Daten geladen wurden    
    Repeat
      Wait 0.01
    Until hHTTPClient.Status = Net.Inactive
    
'-- Es wird der erste Feed-Eintrag (Index = 0) ausgewählt - wenn vorhanden
    If ListContainer.Count Then 
       ListContainer. = 1
    Endif
    
    
  
End ' cmbFeedURL_Click()

Public Sub hHTTPClient_Finished()

    Dim sBuffer As String
  
    If Lof(hHTTPClient) Then Read #hHTTPClient, sBuffer, Lof(hHTTPClient)
    ParseFeed(sBuffer)

End

Public Sub ListContainer_Click()
  
  Dim hFeed As FFeedItem

  hFeed = ListContainer.Current.Count
  ' ' Print hFeed.id
  ' ' 
  ' ' hFeed.SetFocus()
  ' ' 
  ' ' ' If ListContainer.Count Then ListContainer.Index = hFeed.Id + 2
  ' ' 
  Print ListContainer.Index
  Print hFeed.Link
  
  WebView.Url = hFeed.Link

End ' ListContainer_Click()

Public Sub ParseFeed(Data As String)
  Dim hXMLDokument As New XmlDocument
  Dim hXMLNode As XmlNode

  hXMLDokument.FromString(Data)
    Print Data
  hXMLNode = hXMLDokument.Root
  ParseNode(hXMLNode)

End ' ParseFeed(Data As String)

Public Sub ParseNode(Node As XmlNode)
  Dim xmlNode, xmlAttribute As XmlNode
  Dim hFeed, hFeed2 As FFeedItem
  Dim iCount As Integer

  For Each xmlNode In Node.Children
    If xmlNode.Name = "item" Then
       hFeed = New FFeedItem(iCount, ListContainer)
       Inc iCount
       For Each xmlAttribute In xmlNode.Children
         Select Case xmlAttribute.Name
           Case "title"
             hFeed.FeedTitle = xmlAttribute.Value
           Case "description"
             hFeed.Description = xmlAttribute.Value
           Case "link"
             hFeed.Link = xmlAttribute.Value
         End Select
       Next ' Each xmlAttribute
    Else
       If xmlNode.Children.Count > 0 Then ParseNode(xmlNode) ' Rekursiver Aufruf!
    Endif ' xmlNode.Name = "item" ?
  Next ' Each xmlNode

End ' ParseNode(...)
