File feedtree.hws changed (mode: 100755) (index 4bd0448..0211706) |
... |
... |
Function p_FetchCurrent() |
74 |
74 |
If t.Node |
If t.Node |
75 |
75 |
p_TimeFetch(t.muiid) |
p_TimeFetch(t.muiid) |
76 |
76 |
Else |
Else |
77 |
|
Local status = p_Fetch(t.id) |
|
|
77 |
|
Local status = p_Fetch(t.id, False) |
78 |
78 |
If status = #FEED_STATUS_NEW |
If status = #FEED_STATUS_NEW |
79 |
79 |
p_MarkFeed(t.id, #FEED_STATUS_READ) |
p_MarkFeed(t.id, #FEED_STATUS_READ) |
80 |
80 |
Ivor:Load(t.id) |
Ivor:Load(t.id) |
|
... |
... |
EndFunction |
123 |
123 |
;č označit buď jako nové, nebo jako přečtené |
;č označit buď jako nové, nebo jako přečtené |
124 |
124 |
;č smí se posílat JENOM fidy, nikoliv skupiny |
;č smí se posílat JENOM fidy, nikoliv skupiny |
125 |
125 |
Function p_FetchFeed(feedid$) |
Function p_FetchFeed(feedid$) |
126 |
|
Local status = p_Fetch(feedid$) |
|
|
126 |
|
Local status = p_Fetch(feedid$, True) |
127 |
127 |
If status = #FEED_STATUS_SUCCESS |
If status = #FEED_STATUS_SUCCESS |
128 |
128 |
If fd_Get(feedid$, "status") = #FEED_STATUS_NEW Then Return() |
If fd_Get(feedid$, "status") = #FEED_STATUS_NEW Then Return() |
129 |
129 |
status = #FEED_STATUS_READ |
status = #FEED_STATUS_READ |
|
... |
... |
EndFunction |
274 |
274 |
#FEED_STATUS_INTERRUPTED |
#FEED_STATUS_INTERRUPTED |
275 |
275 |
#FEED_STATUS_ERROR |
#FEED_STATUS_ERROR |
276 |
276 |
*/ |
*/ |
277 |
|
Function p_Fetch(url$) |
|
278 |
|
/*e = hurl.Easy({URL = url$, FollowLocation = True}) |
|
279 |
|
;e:SetOpt_Accept_Encoding("") |
|
280 |
|
;e:SetOpt_AutoReferer(1) |
|
281 |
|
e:SetOpt_FileTime(1) |
|
282 |
|
e:SetOpt_Nobody(1) |
|
283 |
|
Local err_code = ?e:Perform() |
|
284 |
|
p_Replay(err_code, "Performed!") |
|
|
277 |
|
Function p_Fetch(url$, fast) |
|
278 |
|
;č Já se bojím. Co kdyby nějaký server posílal blbosti? |
|
279 |
|
;č Uživatel bude cvakat Fetch a mu jen "Download skipped"? |
|
280 |
|
Local timestamp = -2 |
|
281 |
|
;č objevilo, že TCP handshake je šíleně dlouhá záležitost |
|
282 |
|
;č tohle, jako, skoro dvojnásobně prodlužuje stahování |
|
283 |
|
;č Na druhou stranu, psát v Hollywoodu něco jako kólbeky, |
|
284 |
|
;č které by alokovaly buffery je pěkný nesmysl |
|
285 |
|
If fast And fd_Get(url$, "timestamp") > -1 |
|
286 |
|
e = hurl.Easy({URL = url$, FollowLocation = True}) |
|
287 |
|
;e:SetOpt_Accept_Encoding("") |
|
288 |
|
;e:SetOpt_AutoReferer(1) |
|
289 |
|
e:SetOpt_FileTime(1) |
|
290 |
|
e:SetOpt_FailOnError(1) |
|
291 |
|
e:SetOpt_Forbid_Reuse(1) |
|
292 |
|
;e:SetOpt_SSL_FalseStart(1) |
|
293 |
|
;e:SetOpt_TCP_FastOpen(1) |
|
294 |
|
Function p_WriteData(data$) |
|
295 |
|
DebugPrint("Data: ", data$) |
|
296 |
|
EndFunction |
|
297 |
|
e:SetOpt_WriteFunction(p_WriteData) |
|
298 |
|
e:SetOpt_Nobody(1) |
|
299 |
|
Local err_code = ?e:Perform() |
|
300 |
|
timestamp = e:GetInfo_FileTime() |
|
301 |
|
; destroy easy object |
|
302 |
|
e:Close() |
|
303 |
|
DebugPrint(timestamp, fd_Get(url$, "timestamp"), url$) |
|
304 |
|
|
|
305 |
|
If timestamp > 0 And fd_Get(url$, "timestamp") = timestamp |
|
306 |
|
mui.Set("status", "Contents", "Skipped downloading from " ..url$) |
|
307 |
|
Return(#FEED_STATUS_SUCCESS) |
|
308 |
|
;č Když server nechce dát čas změny, tak si to zapíšeme |
|
309 |
|
;č a příště už na něj nebudeme utrácet čas |
|
310 |
|
ElseIf timestamp < 0 |
|
311 |
|
fd_Set(url$, "timestamp", timestamp) |
|
312 |
|
EndIf |
|
313 |
|
EndIf |
285 |
314 |
|
|
286 |
|
Local timep = e:GetInfo_FileTime() |
|
287 |
|
; destroy easy object |
|
288 |
|
e:Close() |
|
289 |
|
DebugPrint(timep) |
|
290 |
|
*/ |
|
291 |
315 |
;č zjednodušená kontrola, pokud řetězec obsahuje procenta, |
;č zjednodušená kontrola, pokud řetězec obsahuje procenta, |
292 |
316 |
;č považujeme ho za "eskejpnutý". |
;č považujeme ho za "eskejpnutý". |
293 |
317 |
;č Na případ, kdy uživatel strčí do URLu osamělý znak procenta vysereme |
;č Na případ, kdy uživatel strčí do URLu osamělý znak procenta vysereme |
|
... |
... |
Function p_Fetch(url$) |
308 |
332 |
p_Replay(err_code, "Updated XML file from " ..url$ .." saved") |
p_Replay(err_code, "Updated XML file from " ..url$ .." saved") |
309 |
333 |
If err_code <> #ERR_NONE |
If err_code <> #ERR_NONE |
310 |
334 |
;č 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 |
311 |
|
;fd_Set(url$, "timestamp", 0) |
|
312 |
335 |
fd_Set(url$, "checksum", False) |
fd_Set(url$, "checksum", False) |
313 |
336 |
Return(#FEED_STATUS_ERROR) |
Return(#FEED_STATUS_ERROR) |
314 |
337 |
EndIf |
EndIf |
315 |
338 |
|
|
|
339 |
|
;č teprve zde uložíme otisk času |
|
340 |
|
;č Pěkně si uvědomuji, že případná chyba v tomto kódu zablokuje |
|
341 |
|
;č uživateli normální stahování |
|
342 |
|
If fast Then fd_Set(url$, "timestamp", timestamp) |
|
343 |
|
|
|
344 |
|
|
|
345 |
|
|
316 |
346 |
;č kolikrát weby dodají do RSS nějaký BuildDate, |
;č kolikrát weby dodají do RSS nějaký BuildDate, |
317 |
347 |
;č kterým se RSS formálně změní. |
;č kterým se RSS formálně změní. |
318 |
348 |
;č Takže zde, na místě, když ještě máme xml v ruce, |
;č Takže zde, na místě, když ještě máme xml v ruce, |
|
... |
... |
Function p_Fetch(url$) |
349 |
379 |
If fd_isEqualOrSet(url$, "guidsum", guidsum) |
If fd_isEqualOrSet(url$, "guidsum", guidsum) |
350 |
380 |
Return(#FEED_STATUS_SUCCESS) |
Return(#FEED_STATUS_SUCCESS) |
351 |
381 |
EndIf |
EndIf |
352 |
|
|
|
|
382 |
|
DebugPrint(url$, guidsum) |
353 |
383 |
mui.Set("status", "Contents", "\27".."5\27b" .. url$ .. " Updated!") |
mui.Set("status", "Contents", "\27".."5\27b" .. url$ .. " Updated!") |
354 |
384 |
Return(#FEED_STATUS_NEW) |
Return(#FEED_STATUS_NEW) |
355 |
385 |
EndFunction |
EndFunction |