The files contained in this repository can be downloaded to your computer using a svn client.
On Linux you simply type the command displayed below.

This URL has Read-Only access.

Statistics
| Revision:

root / trunk / DomotiGa / FNews.class @ 646

History | View | Annotate | Download (3.1 kB)

1 2 riemers
' Gambas class file
2 2 riemers
3 2 riemers
' Description:
4 2 riemers
' FNews.class
5 2 riemers
' Simple RSS Newsfeed reader.
6 2 riemers
7 2 riemers
' Development Status:
8 2 riemers
' Just build, bugs ahead. Doesn't support embedded stuff like images yet.
9 2 riemers
10 2 riemers
' DomotiGa - an open source home automation program.
11 213 rdnzl
' Copyright(C) 2008-2009 Ron Klinkien
12 2 riemers
13 25 rdnzl
' Read file called COPYING for license details.
14 2 riemers
15 2 riemers
PUBLIC hFeed AS HttpClient
16 2 riemers
PUBLIC items AS NEW CItems
17 2 riemers
18 2 riemers
PUBLIC SUB Form_Open()
19 2 riemers
20 2 riemers
  PopulateButtons()
21 2 riemers
22 2 riemers
END
23 2 riemers
24 2 riemers
PUBLIC SUB Form_Resize()
25 2 riemers
26 2 riemers
  tbFeeds.Width = ME.Width
27 2 riemers
  hbFeeds.Width = ME.Width
28 2 riemers
  pnlNews.Move(2, 33, ME.ClientWidth - 4, ME.ClientHeight - 35)
29 2 riemers
  lvItems.Move(1, 1, ME.ClientWidth / 2 - 48, ME.ClientHeight - 40)
30 2 riemers
  txtItem.Move(ME.ClientWidth / 2 - 44, 1, ME.ClientWidth / 2 + 40, ME.ClientHeight - 40)
31 2 riemers
32 2 riemers
END
33 2 riemers
34 2 riemers
PUBLIC SUB PopulateButtons()
35 2 riemers
36 2 riemers
  DIM rFeed AS Result
37 2 riemers
  DIM hButton AS Button
38 2 riemers
39 2 riemers
  ' populate feeds toolbutton
40 238 rdnzl
  TRY rFeed = Main.hDB.Exec("SELECT * FROM newsfeeds WHERE enabled is TRUE")
41 2 riemers
  IF rFeed.Count THEN
42 2 riemers
    FOR EACH rFeed
43 2 riemers
    IF NOT rFeed!name OR rFeed!enabled = FALSE THEN CONTINUE
44 2 riemers
    hButton = NEW Button(hbFeeds) AS "FeedButton"
45 2 riemers
     WITH hButton
46 2 riemers
      .Text = rFeed!name
47 2 riemers
      .Height = 28
48 2 riemers
      .Width = 84
49 2 riemers
      .Tag = rFeed!id
50 2 riemers
    END WITH
51 2 riemers
    NEXT
52 2 riemers
  END IF
53 2 riemers
54 2 riemers
END
55 2 riemers
56 213 rdnzl
PUBLIC SUB hFeed_Finished()
57 2 riemers
58 2 riemers
  DIM sBuffer AS String
59 2 riemers
60 2 riemers
  IF Lof(hFeed) THEN READ #hFeed, sBuffer, Lof(hFeed)
61 2 riemers
  ParseFeed(sBuffer)
62 2 riemers
  FillList()
63 2 riemers
64 2 riemers
END
65 2 riemers
66 2 riemers
PUBLIC SUB FeedButton_Click()
67 2 riemers
68 2 riemers
  DIM iFeed AS Integer = LAST.tag
69 2 riemers
  DIM oObject AS Object
70 2 riemers
71 2 riemers
  ' enable all buttons, then disable selected one
72 2 riemers
  FOR EACH oObject IN hbFeeds.Children
73 2 riemers
    oObject.Enabled = TRUE
74 2 riemers
    IF oObject.Tag = iFeed THEN oObject.Enabled = FALSE
75 2 riemers
  NEXT
76 2 riemers
77 2 riemers
  DisplayFeed(iFeed)
78 2 riemers
79 2 riemers
END
80 2 riemers
81 2 riemers
PUBLIC SUB DisplayFeed(iFeed AS Integer)
82 2 riemers
83 2 riemers
  DIM rFeed AS Result
84 2 riemers
  items = NEW CItems
85 2 riemers
  hFeed = NEW HttpClient AS "hfeed"
86 2 riemers
87 2 riemers
  TRY rFeed = Main.hDB.Exec("SELECT * FROM newsfeeds where id=" & iFeed)
88 2 riemers
  IF rFeed THEN
89 2 riemers
    hFeed.URL = rFeed!url
90 2 riemers
    hFeed.Get
91 2 riemers
  END IF
92 2 riemers
93 2 riemers
END
94 2 riemers
95 2 riemers
PUBLIC SUB ParseFeed(sData AS String)
96 2 riemers
97 2 riemers
  DIM Xml AS NEW XmlDocument
98 2 riemers
  DIM xNode AS XmlNode
99 2 riemers
100 2 riemers
  Xml.FromString(sData)
101 2 riemers
  xNode = Xml.Root
102 2 riemers
  items.clear
103 2 riemers
  ParseNode(xNode)
104 2 riemers
105 2 riemers
END
106 2 riemers
107 213 rdnzl
PUBLIC SUB ParseNode(node AS XmlNode)
108 2 riemers
109 2 riemers
  DIM t, t1 AS Integer
110 2 riemers
  DIM node1 AS XmlNode
111 2 riemers
  DIM buf AS String
112 2 riemers
  DIM title, description, item_link AS String
113 2 riemers
114 2 riemers
  FOR t = 0 TO node.Children.Count - 1
115 2 riemers
    node1 = node.Children[t]
116 2 riemers
    IF node1.name = "item" THEN
117 2 riemers
      FOR t1 = 0 TO node1.Children.Count - 1
118 2 riemers
        buf = node1.Children[t1].name
119 2 riemers
        IF buf = "title" THEN
120 2 riemers
          title = node1.Children[t1].value
121 2 riemers
        ELSE IF buf = "description" THEN
122 2 riemers
          description = node1.Children[t1].value
123 2 riemers
        ELSE IF buf = "link" THEN
124 2 riemers
          item_link = node1.Children[t1].value
125 2 riemers
        END IF
126 2 riemers
      NEXT
127 2 riemers
      items.addItem(title, description, item_link)
128 2 riemers
    ELSE
129 2 riemers
      IF node1.Children.Count > 0 THEN parseNode(node1)
130 2 riemers
    END IF
131 2 riemers
  NEXT
132 2 riemers
133 2 riemers
END
134 2 riemers
135 2 riemers
PUBLIC SUB lvItems_Select()
136 2 riemers
137 2 riemers
  DIM iKey AS Integer
138 2 riemers
139 2 riemers
  iKey = lvItems.Current.Key
140 2 riemers
  items.seek(iKey)
141 2 riemers
  txtItem.Text = items.getDescription() & "\n" & items.getLink()
142 2 riemers
143 2 riemers
END
144 2 riemers
145 2 riemers
PUBLIC SUB FillList()
146 2 riemers
147 2 riemers
  lvItems.Clear
148 2 riemers
  items.Reset
149 2 riemers
  WHILE items.Next()
150 2 riemers
    lvItems.Add(items.getCurrentIndex(), items.getTitle())
151 2 riemers
  WEND
152 2 riemers
153 2 riemers
END