List of commits:
Subject Hash Author Date (UTC)
feedtree: rework fetcher to not rely on guids 760fc788f0297847469290a5c75e3df95da3cfe8 Alex 2022-07-24 22:25:26
IvoRSS: change version to 1.1 It's time to release! 8f883741fce50dc3e9c869c2e41e1fb8b67b0048 Alex 2022-07-24 04:19:12
feeds: add even more Amiga related feeds b19a07dcdd1f198e6fff88f13c16962e6ab73084 Alex 2022-07-24 04:18:08
feedtree: reload rss channel whenever user decides to fetch 52c6dde8b832490b873b02d2157da3bc81b73e54 Alex 2022-07-24 04:10:09
lurk: seru na to, parser spouštím pro každej link zvlášť 5b0a792527510716e36da04e36689765907500c2 Alex 2022-07-24 02:06:56
do not let text labels to explode eeec1ccb6b0c3c90e2e0803021817a07489c1093 Alex 2022-07-24 01:36:32
IvoR: use title and guid as unique identificators. Hash them to avoid numerous issues with serializer 5a6fe4419c9cfdd0a03e18dfb45cf6fb47fff582 Alex 2022-07-24 01:16:36
lurk: use raw encoding where is possible. Use italic font style for possible rss channels 102d33ee8611a392b048d4c640bf27d9ad93d6a8 Alex 2022-07-23 23:34:34
feedtree: bacha na mezery v indexech d286760ac19d7b5cf4c3b591a2818f37f2ece3d7 Alex 2022-07-23 23:32:34
textfiled: malinkatá puntičkářská změna 4dc5b68943d1b28fa4f83bd4289e3887668b668f Alex 2022-07-23 21:58:13
feedtree: guid-less channels workaround 99e7e725b1e5ec6a3682b2fbd670f3a719d5727c Alex 2022-07-23 02:14:23
lurk: rework links parsing 27d2aa01be8796427acc9753918a25ca336a523f Alex 2022-07-23 01:50:51
lurk: accept more possible MIME types 851689d4324eea12e0c2ecca65557a130006d253 Alex 2022-07-22 23:58:37
pridat mezeru 9e6e85bc191e313bbe842052bd92671bfece74c1 Alex 2022-07-21 02:18:44
add Readme file 0a25299e82fc60cd3d4f2b1fdc0c7047b299bf78 Alex 2022-07-20 01:54:53
add LICENSE file f073c68dbdfd517bdf39f2700369ecfb37f74a2d Alex 2022-07-19 10:12:47
IvoRSS: fix version number 8488a8ae206d0ed23ed9a434e25db373168e36ed Alex 2022-07-19 10:09:34
clean up feeds f53c9a65d7439041b12d204d1127026935baedf9 Alex 2022-07-19 09:59:11
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
Commit 760fc788f0297847469290a5c75e3df95da3cfe8 - feedtree: rework fetcher to not rely on guids
Author: Alex
Author date (UTC): 2022-07-24 22:25
Committer name: Alex
Committer date (UTC): 2022-07-24 22:25
Parent(s): 8f883741fce50dc3e9c869c2e41e1fb8b67b0048
Signer:
Signing key:
Signing status: N
Tree: 06284a9b4db9213665309fe0e0a12b0aee6c441e
File Lines added Lines deleted
feedtree.hws 43 47
File feedtree.hws changed (mode: 100755) (index bf8bd23..cad1c0c)
... ... Function p_Fetch(url$)
281 281 EndIf EndIf
282 282
283 283 Local err_code = ?StringToFile(xml$, p_GetXMLname(url$)) Local err_code = ?StringToFile(xml$, p_GetXMLname(url$))
284 p_Replay(err_code, "Updated XML file saved")
285 If err_code = #ERR_NONE
286 ;č kolikrát weby dodají do RSS nějaký BuildDate,
287 ;č kterým se RSS formálně změní.
288 ;č Takže zde, na místě, když ještě máme xml v ruce,
289 ;č musíme rozhodnout, zda je v tom RSS doopravdy něco nového.
290 ;č Půjdeme podle guid. Když se změní, tak asi kvůli novému článku.
291 ;č Kódování nemusíme řešit, je to jen pro nás,
292 ;č žádný parser zde volat nebudeme.
293 Local guidsum = 0
294 ;č nechcu to posílat do další funkce
295 ;č Já totiž nejsem 100% jist, že Hollywood ty řetězce nekopíruje
296 ; If Atom
297 Local guidpos = FindStr(xml$, "<updated", False, 0, #ENCODING_RAW)
298 If guidpos > 0
299 Local guidend = FindStr(xml$, "</updated>", False, guidpos, #ENCODING_RAW)
300 Local len = guidend - guidpos
301 If len > 0
302 guidsum = CRC32Str(MidStr(xml$, guidpos, len, #ENCODING_RAW))
303 EndIf
304 EndIf
305
306 ; If RSS
307 Local guidpos = FindStr(xml$, "<guid", False, 0, #ENCODING_RAW)
308 If guidpos > 0
309 Local guidend = FindStr(xml$, "</guid", False, guidpos, #ENCODING_RAW)
310 Local len = guidend - guidpos
311 If len > 0
312 guidsum = CRC32Str(MidStr(xml$, guidpos, len, #ENCODING_RAW))
313 EndIf
314 EndIf
315
316 ;č objevilo se, že některé RSS kanály žádné guidy nemají vůbec
317 ;č Když tak, v tuto chvíli už víme, že xml soubor je nový
318 ;č a můžeme s čistým svědomím prohlásit kanál za aktualizovaný
319 If guidsum = 0
320 Return(#FEED_STATUS_NEW)
321 EndIf
322
323 If fd_isEqualOrSet(url$, "guidsum", guidsum)
324 Return(#FEED_STATUS_SUCCESS)
325 EndIf
326
327 p_Replay(err_code, "\27".."5\27b" .. url$ .. " Updated!")
328 Return(#FEED_STATUS_NEW)
329 Else
284 p_Replay(err_code, "Updated XML file from " ..url$ .." saved")
285 If err_code <> #ERR_NONE
330 286 ;č Aha... Tak zpětně vynulujeme čeksumu, aby příště zkusil to uložit znovu ;č Aha... Tak zpětně vynulujeme čeksumu, aby příště zkusil to uložit znovu
331 287 fd_Set(url$, "checksum", False) fd_Set(url$, "checksum", False)
332 288 Return(#FEED_STATUS_ERROR) Return(#FEED_STATUS_ERROR)
333 EndIf
289 EndIf
290
291 ;č kolikrát weby dodají do RSS nějaký BuildDate,
292 ;č kterým se RSS formálně změní.
293 ;č Takže zde, na místě, když ještě máme xml v ruce,
294 ;č musíme rozhodnout, zda je v tom RSS doopravdy něco nového.
295 ;č Objevilo se, že kolikrát ty kanály žádné guid nemají,
296 ;č specifikace RSS totiž ustanovuje povinným pouze buď title,
297 ;č nebo description.
298 ;č Některé kanály navíc neumísťují nejnovější články na první místo.
299 ;č Napadlo mně, že by bylo možné počítat kontrolní sumu od prvního item
300 ;č až do konce souboru. Tím
301 ;č 1. odřízneme veškeré BuildDate kanálu atd.
302 ;č 2. zachytíme změny článků,
303 ;č a) aniž by byly na prvním místě
304 ;č b) aniž bychom celý obsah parsili a hlídali
305 ;č nové příspěvky ve slovnících.
306 ;
307 ;č nechcu to posílat do další funkce
308 ;č Já totiž nejsem 100% jist, že Hollywood ty řetězce nekopíruje
309 Local guidsum = 0
310 ;č Kódování nemusíme řešit, je to jen pro nás,
311 ;č žádný parser zde volat nebudeme.
312 Local guidpos = Max(FindStr(xml$, "<entry", False, 0, #ENCODING_RAW),
313 FindStr(xml$, "<item", False, 0, #ENCODING_RAW))
314
315
316 ;č XML-ko je nové, ale kanál neobsahuje nic?
317 ;č Tak já nevím...
318 If guidpos < 0
319 mui.Set("status", "Contents", "\27".."5\27i ".. url$ .. " is empty")
320 Return(#FEED_STATUS_SUCCESS)
321 EndIf
322
323 guidsum = CRC32Str(UnrightStr(xml$, guidpos, #ENCODING_RAW))
324 If fd_isEqualOrSet(url$, "guidsum", guidsum)
325 Return(#FEED_STATUS_SUCCESS)
326 EndIf
327
328 mui.Set("status", "Contents", "\27".."5\27b" .. url$ .. " Updated!")
329 Return(#FEED_STATUS_NEW)
334 330 EndFunction EndFunction
335 331
336 332
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