List of commits:
Subject Hash Author Date (UTC)
IvoRSS: Ready to publish abccdae2fe21522a92f2c92fbffb4cafec089f23 Alex 2022-07-19 09:41:44
track changes of Atom feeds by updated tag 1c115173dd62c39d1fc50dc2e7b36da338a306ef Alex 2022-07-19 07:46:35
implement images opt-out 6852d7d1c12f23487c2771f77fc8d17bc7f7a761 Alex 2022-07-19 06:57:56
implement image loading b408a53d97f23784bbfc668eac663619a3afebe7 Alex 2022-07-19 06:27:44
implement channel link support f2378ce83c04b95304c5ff21b14806edf90a2216 Alex 2022-07-19 01:26:03
bold unread articles (It wasn't planned before) 35a66771b2285811a5c5f8adefafdda4d2bf4e38 Alex 2022-07-19 00:11:29
dodat i zmìny z IvoRSS 78d71c13bd806cf849eb16d1a672aea5551b6b2c Alex 2022-07-18 02:14:12
totálnì hustej HTML parsing je implementován eeba45d9811c83e9199d3a5929102c192e54b216 Alex 2022-07-18 02:11:49
add show source feature 8c963667a609e9c91f5a94963786ca2e4a7f88a4 Alex 2022-07-17 03:46:17
IvoR: if parser falls, try to convert to utf-8 from system encoding ea17d81bc65b6a5e79d202d5a6b36fcae854cc1b Alex 2022-07-17 02:33:02
feedtree: add Copy URL option to context menu a9170b64e6b1bca22cb807a7afa0fe35b6611cbe Alex 2022-07-16 23:00:07
feedtree: keep track of the latest guid fa1cf2508ade717fc3aa3bf8224a51b685e1636b Alex 2022-07-16 22:42:30
lurk: track parsed position, show meaningful status to user 80ce4ada68e657b196b4e173747a873a54f33c36 Alex 2022-07-16 13:34:54
small fix, polo¾ky pøebarvíme v¾dycky 6b408d667cb85f06e21767c6bbd77c2bfd9a2ac7 Alex 2022-07-16 04:05:04
tree part is ready 67d1bde2bcee775f23f8fc03cc474fd6b06c390b Alex 2022-07-16 03:28:08
finish feeds tree deea8b12636ba4a19ee256629a9a2a9874baf9c1 Alex 2022-07-15 17:10:11
Explore window is ready... 959e6dbf4fc77e315ac12847a481e25f50785ed4 Alex 2022-07-14 22:13:38
fixes in lurk code d741423d070a4d51b76d270fac70e0b0c3d04035 Alex 2022-07-14 15:29:42
Clear explored list by inbuild function 9ec9232bf28d0d83461e89fa89e8105983d5e3ba Alex 2022-07-14 14:09:54
implement URL constructing (complement URLs) f4798ed246e9c6d4b1a611b48ed5a7eb28c8938d Alex 2022-07-14 01:16:31
Commit abccdae2fe21522a92f2c92fbffb4cafec089f23 - IvoRSS: Ready to publish
Author: Alex
Author date (UTC): 2022-07-19 09:41
Committer name: Alex
Committer date (UTC): 2022-07-19 09:41
Parent(s): 1c115173dd62c39d1fc50dc2e7b36da338a306ef
Signer:
Signing key:
Signing status: N
Tree: 1dcf4cac1c132108b01a4d350bd82c0d418c98d8
File Lines added Lines deleted
AppWindow.xml 5 1
IvoR.hws 49 26
IvoRSS.hws 10 10
File AppWindow.xml changed (mode: 100755) (index 5e39893..4cb8ee1)
66 66
67 67 <menustrip id="articletitlemenu"> <menustrip id="articletitlemenu">
68 68 <menu title="Article title"> <menu title="Article title">
69 <item id="artt_copy" notify="selected">Copy</item>
69 <item id="artt_copyauthor" notify="selected">Copy e-mail</item>
70 <item id="artt_copytitle" notify="selected">Copy title</item>
70 71 <item id="artt_copyurl" notify="selected">Copy URL</item> <item id="artt_copyurl" notify="selected">Copy URL</item>
71 72 </menu> </menu>
72 73 </menustrip> </menustrip>
 
142 143 <column title="Category"/> <column title="Category"/>
143 144 </listview> </listview>
144 145
146 <text id="item_author" contextmenu="articletitlemenu"/>
147 <text id="item_pubdate" contextmenu="articletitlemenu"/>
145 148 <text id="item_title" PreParse="\33b" contextmenu="articletitlemenu"/> <text id="item_title" PreParse="\33b" contextmenu="articletitlemenu"/>
149 <text id="item_link" PreParse="\335\33u" contextmenu="articletitlemenu" inputmode="relverify" notify="pressed"/>
146 150 <floattext id="textfield" background="readlistback" tabsize="4" justify="true" cyclechain="true" contextmenu="articlemenu"/> <floattext id="textfield" background="readlistback" tabsize="4" justify="true" cyclechain="true" contextmenu="articlemenu"/>
147 151 </vgroup> </vgroup>
148 152 </hgroup> </hgroup>
File IvoR.hws changed (mode: 100755) (index 48c53f7..7caf44c)
... ... EndFunction
107 107 Function IvoR:ShowArticle(pos) Function IvoR:ShowArticle(pos)
108 108 If pos >= 0 If pos >= 0
109 109 Local chosen_item = self.items_list[pos] Local chosen_item = self.items_list[pos]
110 mui.Set("item_author", "Contents", chosen_item.author)
111 mui.Set("item_pubdate", "Contents", chosen_item.pubdate)
110 112 mui.Set("item_title", "Contents", tf_Label(chosen_item.title)) mui.Set("item_title", "Contents", tf_Label(chosen_item.title))
111 mui.Set("textfield", "Text", tf_TextField(chosen_item.description))
113 mui.Set("item_link", "Contents", chosen_item.link)
114
115 If StrLen(chosen_item.description) > StrLen(chosen_item.content)
116 mui.Set("textfield", "Text", tf_TextField(chosen_item.description))
117 Else
118 mui.Set("textfield", "Text", tf_TextField(chosen_item.content))
119 EndIf
112 120
113 121 If Not HaveItem(self.guids, chosen_item.guid) If Not HaveItem(self.guids, chosen_item.guid)
114 122 mui.DoMethod("articles", "Rename", pos, mui.DoMethod("articles", "Rename", pos,
 
... ... Function IvoR:LoadImage()
169 177 self.ImageLoaded = True self.ImageLoaded = True
170 178 EndFunction EndFunction
171 179
172 Function IvoR:OpenChannel()
180 Function IvoR:OpenLink(muid)
173 181 ;č Vostuda, ale nemáme to nikde uloženo. Jen na formě =] ;č Vostuda, ale nemáme to nikde uloženo. Jen na formě =]
174 Local url$ = mui.Get("channel_link", "Contents")
182 Local url$ = mui.Get(muid, "Contents")
175 183 If url$ Then OpenURL(url$) If url$ Then OpenURL(url$)
176 184 EndFunction EndFunction
177 185
 
... ... Function IvoR:Clear()
185 193
186 194 mui.DoMethod("articles", "Clear") mui.DoMethod("articles", "Clear")
187 195
196
197 mui.Set("item_author", "Contents", "")
198 mui.Set("item_pubdate", "Contents", "")
188 199 mui.Set("item_title", "Contents", "") mui.Set("item_title", "Contents", "")
189 ;mui.Set("item_title", "ContextMenu", "(none)")
200 mui.Set("item_link", "Contents", "")
190 201
191 202 mui.Set("textfield", "Text", "") mui.Set("textfield", "Text", "")
192 ;mui.Set("textfield", "ContextMenu", "(none)")
193 203
194 204
195 205
 
... ... Function IvoR:Clear()
198 208 channel_level = True channel_level = True
199 209 current_element$ = Nil current_element$ = Nil
200 210
201 current_item = {title="", pubdate="", category="", description="", guid=""}
211 current_item = {author="", title="", link="", content="",
212 pubdate="", category="", description="", guid=""}
202 213 EndFunction EndFunction
203 214
204 215
205 216 Function StartElement(p, name$, attrs) Function StartElement(p, name$, attrs)
206 217 current_element$ = name$ current_element$ = name$
207 ;DebugPrint("starts ", name$)
208 If name$ = "item" Then channel_level = False
209
210
211
212 ;For i,v In Pairs(attrs)
213 ; If GetType(i) = #STRING Then DebugPrint("-->", i .. "=" .. v)
214 ;Next
215
218 If name$ = "item" Or name$ = "entry" Then channel_level = False
216 219 EndFunction EndFunction
217 220
218 221
219 222 Function EndElement(p, name$) Function EndElement(p, name$)
220 ;DebugPrint("ends ", name$)
221 223 current_element$ = nil current_element$ = nil
222 If name$ = "item"
224 If name$ = "item" Or name$ = "entry"
223 225 Local preparse = "" Local preparse = ""
224 226 If HaveItem(IvoR.oldguids, current_item.guid) If HaveItem(IvoR.oldguids, current_item.guid)
225 227 IvoR.guids[current_item.guid] = 1 IvoR.guids[current_item.guid] = 1
 
... ... Function EndElement(p, name$)
233 235 preparse .. current_item.category) preparse .. current_item.category)
234 236 InsertItem(IvoR.items_list, current_item) InsertItem(IvoR.items_list, current_item)
235 237 CheckEvents() CheckEvents()
236 current_item = {title="", pubdate="", category="", description="", guid=""}
238 current_item = {author="", title="", link="", content="",
239 pubdate="", category="", description="", guid=""}
237 240 EndIf EndIf
238 241 EndFunction EndFunction
239 242
240 243
241 244
242 245 Function CharacterData(p, str$) Function CharacterData(p, str$)
243 ;DebugPrint("CD: ", str$)
244 246 If channel_level If channel_level
245 247 Switch current_element$ Switch current_element$
246 248 Case "title": mui.Set("channel_title", "Contents", tf_Label(str$)) Case "title": mui.Set("channel_title", "Contents", tf_Label(str$))
247 249 Case "description": Case "description":
248 250 mui.Set("channel_description", "Contents", tf_Label(str$)) mui.Set("channel_description", "Contents", tf_Label(str$))
251
252 Case "id": FallThrough
249 253 Case "link": Case "link":
250 IvoR.link = str$
254 IvoR.link = StripStr(str$)
251 255 mui.Set("channel_link", "Contents", StripStr(str$)) mui.Set("channel_link", "Contents", StripStr(str$))
252 256
253 257 ;č url podle RSS specifikace musí být pouze u obrázků. ;č url podle RSS specifikace musí být pouze u obrázků.
254 Case "url": IvoR:DownloadImage(str$)
255
258 Case "url": IvoR:DownloadImage(StripStr(str$))
259 Case "logo": IvoR:DownloadImage(StripStr(str$))
256 260
257 261 EndSwitch EndSwitch
258 262
259 263 Else Else
260 264 Switch current_element$ Switch current_element$
261 265 Case "title": current_item.title = tf_Label(str$) Case "title": current_item.title = tf_Label(str$)
262
266 Case "dc:creator": FallThrough
267 Case "author": current_item.author = StripStr(str$)
263 268 ;č číselné hodnoty se nějak špatně načítají. ;č číselné hodnoty se nějak špatně načítají.
264 269 ;č fakt je nějaký problém v tom serializatoru ;č fakt je nějaký problém v tom serializatoru
265 Case "guid": current_item.guid = "guid:" .. str$
266 Case "pubDate": current_item.pubdate = tf_Label(str$)
270 Case "guid":
271 If current_item.link = "" Then current_item.link = StripStr(str$)
272 current_item.guid = "guid:" .. str$
273 Case "updated":
274 current_item.guid = "updated:" .. str$
275 current_item.pubdate = StripStr(str$)
276 Case "pubDate": current_item.pubdate = StripStr(str$)
277
278
279 Case "summary": FallThrough
280 Case "atom:summary": FallThrough
267 281 Case "description": Case "description":
268 current_item.description = current_item.description ..str$
282 current_item.description = current_item.description ..StripStr(str$)
283
284 Case "content": FallThrough
285 Case "content:encoded":
286 current_item.content = current_item.content ..StripStr(str$)
287
288 Case "id": FallThrough
289 Case "link":
290 current_item.link = StripStr(str$)
291
269 292 Case "category": Case "category":
270 293 If current_item.category = "" If current_item.category = ""
271 294 current_item.category = tf_Label(str$) current_item.category = tf_Label(str$)
File IvoRSS.hws changed (mode: 100755) (index 094e835..6175504)
1 @VERSION 6,0
1 @VERSION 7,0
2 2 @APPTITLE "IvoRSS" @APPTITLE "IvoRSS"
3 @APPVERSION "$VER: IvoRSS 0.2 (5.7.22)"
3 @APPVERSION "$VER: IvoRSS 1.0 (19.7.22)"
4 4 @APPCOPYRIGHT "© 2022, Aleksei Gerasimov" @APPCOPYRIGHT "© 2022, Aleksei Gerasimov"
5 5 @APPAUTHOR "Aleksei Gerasimov" @APPAUTHOR "Aleksei Gerasimov"
6 6 @APPDESCRIPTION "Simple RSS reader" @APPDESCRIPTION "Simple RSS reader"
 
... ... Function p_MUIEvent(msg)
113 113 p_CopyContents("channel_description", "Channel description") p_CopyContents("channel_description", "Channel description")
114 114 Case "rsst_copyurl": Case "rsst_copyurl":
115 115 p_CopyContents("channel_link", "Channel link") p_CopyContents("channel_link", "Channel link")
116 Case "artt_copy":
117 p_CopyContents("item_title", "Title")
116
117 Case "artt_copyauthor":
118 p_CopyContents("item_author", "E-mail")
119 Case "artt_copytitle":
120 p_CopyContents("item_title", "Title")
121 Case "artt_copyurl":
122 p_CopyContents("item_link", "URL")
118 123 Case "art_copy": Case "art_copy":
119 124 p_CopyText() p_CopyText()
120 125
 
... ... Function p_MUIEvent(msg)
187 192 EndSwitch EndSwitch
188 193
189 194 Case "Text": Case "Text":
190 Switch msg.ID
191 Case "channel_link":
192 If msg.TriggerValue = 0 Then IvoR:OpenChannel()
193 ;Case "foundfeeds":
194 ; lurk:AddFromlist("Active")
195 EndSwitch
195 If msg.TriggerValue = 0 Then IvoR:OpenLink(msg.ID)
196 196
197 197 Case "Button": Case "Button":
198 198 Switch msg.ID Switch msg.ID
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/iam-git/IvoRSS

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/iam-git/IvoRSS

Clone this repository using git:
git clone git://git.rocketgit.com/user/iam-git/IvoRSS

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main