Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handling feed updates for manipulated entries #1706

Closed
kevinpapst opened this issue Dec 3, 2017 · 4 comments
Closed

Handling feed updates for manipulated entries #1706

kevinpapst opened this issue Dec 3, 2017 · 4 comments
Milestone

Comments

@kevinpapst
Copy link
Contributor

Hi guys,
sorry for the disturbing title, I couldn't come up with a better one ;-)

Here is my problem:
After submitting the Dilbert extension, I recognized that there seems to be a strange behaviour when updating the feed.

When add new entries, the extensions rewrites the author and title:
https://github.com/kevinpapst/freshrss-dilbert/blob/master/xExtension-Dilbert/extension.php#L63

After the Cron updated the feed (this one is updated on a daily base) all entries from the feed were marked as unread and title and content changed back to the original feed version:

bildschirmfoto 2017-12-03 um 14 19 52

The feed contains 7 entries, so the newest one was added correctly and the oldest one was kept as is, likely because it wasn't included in the feed anymore. The 6 other entries were switched back to their original state (title, author and read status). I could imagine that the update process somehow flips the entries content without calling the "entry_before_insert" hook => but why?

I cannot reproduce this behaviour with the "Actualize" button, maybe because there is no new feed entry.

Any idea what is going on here?
Which fields are used for the duplicate entry detection?
Can you point me in a code direction, so I can have a look whats going on?

@Alkarex
Copy link
Member

Alkarex commented Dec 3, 2017

Hum, indeed, we have to keep the hash of the unmodified entry.

public function hash() {
if ($this->hash === null) {
//Do not include $this->date because it may be automatically generated when lacking
$this->hash = md5($this->link . $this->title . $this->author . $this->content . $this->tags(true));
}
return $this->hash;
}

$existingHashForGuids = $entryDAO->listHashForFeedGuids($feed->id(), $newGuids);
$newGuids = array();
$oldGuids = array();
// Add entries in database if possible.
foreach ($entries as $entry) {
if (isset($newGuids[$entry->guid()])) {
continue; //Skip subsequent articles with same GUID
}
$newGuids[$entry->guid()] = true;
$entry_date = $entry->date(true);
if (isset($existingHashForGuids[$entry->guid()])) {
$existingHash = $existingHashForGuids[$entry->guid()];
if (strcasecmp($existingHash, $entry->hash()) === 0 || trim($existingHash, '0') == '') {
//This entry already exists and is unchanged. TODO: Remove the test with the zero'ed hash in FreshRSS v1.3
$oldGuids[] = $entry->guid();
} else { //This entry already exists but has been updated
//Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->id() .
//', old hash ' . $existingHash . ', new hash ' . $entry->hash());
//TODO: Make an updated/is_read policy by feed, in addition to the global one.
$needFeedCacheRefresh = FreshRSS_Context::$user_conf->mark_updated_article_unread;
$entry->_isRead(FreshRSS_Context::$user_conf->mark_updated_article_unread ? false : null); //Change is_read according to policy.
if (!$entryDAO->inTransaction()) {
$entryDAO->beginTransaction();
}
$entryDAO->updateEntry($entry->toArray());
}
} elseif ($feed_history == 0 && $entry_date < $date_min) {

Let me have a look.

@Alkarex Alkarex added this to the 1.9.0 milestone Dec 3, 2017
@kevinpapst
Copy link
Contributor Author

Understand, it sees the entry as updated and changes the content back.
Two quick ideas without checking the code:

  • introduce a hook to calculate/overwrite the entries hash in the extension, then I could easily handle it myself
  • calculate the hash from the original feed entry and not from the one that comes back from the extension ("entry_before_insert" hook)

@Alkarex
Copy link
Member

Alkarex commented Dec 3, 2017

Please see / test #1707
In your extension callback function:

$originalHash = $entry->hash();
// your code
$entry->_hash($originalHash);

@kevinpapst
Copy link
Contributor Author

kevinpapst commented Dec 3, 2017

Any idea on how to test that now? Using the "actualize" button didn't do anything before.
Can I reset the last updated status in the database on that feed?

Edit:
By manipulating the lastUpdate column and deleting single entries from the database, then updating I could reproduce the problem.
After making the adaptions and re-adding the feed the problem was gone!

Thanks for the quick help @Alkarex ! Shall I close the ticket or will it be closed when 1.9 is released?

@Alkarex Alkarex closed this as completed Dec 3, 2017
Alkarex added a commit to Alkarex/FreshRSS that referenced this issue Dec 3, 2017
Alkarex added a commit that referenced this issue Dec 3, 2017
Extension function to override entry hash
#1706
@Alkarex Alkarex modified the milestones: 1.9.0, 1.8.1 Dec 12, 2017
Alkarex added a commit to Alkarex/FreshRSS that referenced this issue Jan 2, 2018
FreshRSS#907

CURLOPT_FOLLOWLOCATION open_basedir bug (FreshRSS#1657)

CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is set
FreshRSS#1655 (comment)
https://stackoverflow.com/questions/6918623/curlopt-followlocation-cannot-be-activated
Manual merge dev

Add an entry in the subscription tool page

I reworked @Alkarex idea proposed in FreshRSS#1292. I though it was a good idea to merge everything in the same location.

Improve translation tools

I was not happy with the previous version. I refactored everything to make it reusable.
It allows me do do more verifications and to build a tool to handle the files themselves.

Merge pull request FreshRSS#1660 from aledeg/api-subscription-tool

Add an entry in the subscription tool page
Merge pull request FreshRSS#1658 from aledeg/improve-i18n-tools

Improve translation tools
Changelog 1247

FreshRSS#1660
FreshRSS#1292
FreshRSS#1247

Merge branch 'FreshRSS/dev' into github-update

[i18] nl/sub: add a few translations
Merge pull request FreshRSS#1661 from FreshRSS/Frenzie-patch-1

[i18] nl/sub: add a few translations
Reworded changelog 1247

FreshRSS#1660
FreshRSS#1292
FreshRSS#1247

Merge branch 'dev' of https://github.com/FreshRSS/FreshRSS into FreshRSS/dev

CLI optimize database (FreshRSS#1663)

CLI optimize database FreshRSS#1583
And VACUUM in SQLite FreshRSS#918
Add VACUUM for PostgreSQL (Not tested yet)
A bit of Apache documentation (FreshRSS#1670)

FreshRSS#1666
FreshRSS#1669
FreshRSS#908
Merge branch 'FreshRSS/dev' into github-update

Delete unneeded update files

Move update scripts

Merge branch 'staging-branch' into github-update

Fix Travis syntax

Fix typo in nl i18n (FreshRSS#1675)


improve zh-cn i18n (FreshRSS#1678)


Move translation tools into the cli folder (FreshRSS#1673)

Translation tools must be used on cli. It is better to have them in the cli folder.
Add a Mastodon share (FreshRSS#1674)

See FreshRSS#1521 
Minor language

Small fix Mastodon share

$a['method'] can be undefined.
FreshRSS#1674
FreshRSS#1521

Changelog Mastodon

Merge pull request FreshRSS#1682 from Alkarex/fix_mastodon_share

Small fix Mastodon share
Merge branch 'FreshRSS/dev' into github-update

More update

Split post-update in disctinct file

Post-update will thus contain code from the new version

Better case for git

Fix link encoding in API (FreshRSS#1686)

FreshRSS#1683
Alkarex/EasyRSS#35
A bit of documentation for the API (FreshRSS#1689)

FreshRSS#1687
FreshRSS#443 (comment)

Merge branch 'FreshRSS/dev' into github-update

[docs] Configuration: some stylistic improvements (FreshRSS#1693)

The main purpose is to fix the `imapcted` typo that was exposed by FreshRSS#1259 (comment)
[FIX] FreshRSS#1690 - Also check pdo_pgsql extension in check_install()

[ADD] 'blankoworld' as contributor in CREDITS

Changelog 1690

FreshRSS#1690
FreshRSS#1691
FreshRSS#1692

I18n - DE (FreshRSS#1698)

* added missing german translations
Call idn_to_ascii with INTL_IDNA_VARIANT_UTS46

Under PHP 7.2, calling `idn_to_ascii($idn)` results in a deprecation warning: 'INTL_IDNA_VARIANT_2003 is deprecated'
See https://secure.php.net/manual/en/function.idn-to-ascii.php 

Therefore, if possible, `idn_to_ascii($idn, 0, INTL_IDNA_VARIANT_UTS46)` should be used instead. `INTL_IDNA_VARIANT_UTS46` was introduced in PHP 5.4, so on versions before that, `idn_to_ascii($idn)` must still be used.

Fixed FreshRSS#1699
A bit more for git updates

Documentation updates (FreshRSS#1697)

* added documentation about updating FreshRSS
moved Installation to admin directory
linked some already existing documentation files
Update panel shows latest version message as success (FreshRSS#1701)

show latest version message as success, FIXES FreshRSS#1586
Merge branch 'FreshRSS/master' into FreshRSS/dev

Remove forgotten punycode line

Credits Craig Andrews

Merge pull request FreshRSS#1700 from candrews/patch-1

Call idn_to_ascii with INTL_IDNA_VARIANT_UTS46
Changelog  1586 1698 1699

FreshRSS#1586
FreshRSS#1701
FreshRSS#1698
FreshRSS#1699
FreshRSS#1700

Merge branch 'dev' of https://github.com/FreshRSS/FreshRSS into FreshRSS/dev

Merge branch 'FreshRSS/dev' into github-update

Add more glyphs for opensans font (FreshRSS#1032)

* Add more glyphs for opensans font

* Update .htaccess to support woff2 file format

* Fixed browser support for new font face

* Fixed Origine theme css and .htaccess

* Deleted unneeded fonts

* Added stylefiles for OpenSans font

* Fixed all themes with new font css

* Avoid additional CSS file

* htaccess cache control public

* Font casing bug

* Remove TTF font

Too big, low need https://caniuse.com/#search=woff

* Changelog 1032

FreshRSS#1032
FreshRSS#1028

Extension function to override entry hash (FreshRSS#1707)

Extension function to override entry hash
FreshRSS#1706


Merge branch 'FreshRSS/dev' into github-update

Show existing extensions in admin panel (FreshRSS#1708)

* first draft

* display installed extension state

* fixed whitespace vs tabs

* added translation in all languages

* added error checks and log messages

* fixed tabs vs whitespace

* another try in fixing whitespaces

* another try in fixing whitespaces

* improved extension list translations

* using JSON from official extension repo

* improved version compare

* updated translations

* French translation

make sure that we do not exceed a certain file size for the users log file

renamed method

incorporated code review feedback

added new extension hook
using hook for reading modes in navigation

refactored ReadingModes to Model

Log rotation, use Minz_Log, new log constants

ADMIN_LOG, API_LOG, PSHB_LOG

Check requirement in CLI script (FreshRSS#1711)

* check requirements in actualize_script before executing, fixes FreshRSS#1710

* removed empty whiteline

* testing all requirements

* incorporated code review feedback

* removed code that is already executed in _cli.php

* added newline at eof

* fixed include problems

* fixed include problems

Merge branch 'dev' into logfilesize
Merge branch 'dev' into logfilesize
Changelog 1708 1711

FreshRSS#1708
FreshRSS#1711

Merge pull request FreshRSS#1712 from kevinpapst/logfilesize

Prevent logfile from growing unlimited
Changelog 1712

FreshRSS#1712
FreshRSS#1562

Use __DIR__ for relative include and require

For uniformity, and to avoid having PHP searching in include_path.
http://php.net/manual/function.include.php
FreshRSS#1715
FreshRSS#1711 (comment)

Merge pull request FreshRSS#1717 from Alkarex/dir_in_require

Use __DIR__ for relative include and require
fixed bug in catch block
added types to docblocks

Merge pull request FreshRSS#1724 from kevinpapst/exception-bug

ExtensionManager fixes
[doc] Extensions: translate various sections from French

See FreshRSS#1697 (comment)

* lowercase dir as pointed out by @kevinpapst in FreshRSS#1704 (comment)

* Add French translation with improvements suggested by @aledeg

Merge branch 'dev' into hebrew-i18n
Fix whitespace

Add message after log rotation

FreshRSS#1712
FreshRSS#1562

Minz Dispatcher Controllers path

FreshRSS#1704

Customisable constants.local.php (FreshRSS#1725)

FreshRSS#1562
FreshRSS#1607
FreshRSS#1656
FreshRSS#1705
FreshRSS#1712
Merge pull request FreshRSS#1726 from Alkarex/message_log_rotation

Add message after log rotation
i18n hebrew more

18n Hebrew more 2

Changelog 1716 1724 1725

https://github.com/FreshRSS/FreshRSS/pull/1716
FreshRSS#1724
FreshRSS#1725

Merge branch 'FreshRSS/dev' into Minz_Dispatcher_paths

Changelog 1729

Merge pull request #1716 from FreshRSS/hebrew-i18n

Add hebrew translation
Changelog 1716

https://github.com/FreshRSS/FreshRSS/pull/1716

Merge pull request FreshRSS#1729 from Alkarex/Minz_Dispatcher_paths

Minz Dispatcher Controllers path
added .editorconfig with basic settings

Minz Controllers directory uppercase

FreshRSS#1729

Merge pull request FreshRSS#1704 from Frenzie/doc-translate-extensions

[doc] Extensions: translate various sections from French
Merge pull request FreshRSS#1732 from kevinpapst/editorconfig

Added .editorconfig
Changelog 1697, 1704, 1732

FreshRSS#1697
FreshRSS#1704
FreshRSS#1732

Merge branch 'dev' of https://github.com/FreshRSS/FreshRSS into FreshRSS/dev

fixed bug when adding a category and feed at the same time (FreshRSS#1731)

fixed bug when adding a category and feed at the same time

Changelog 1731

FreshRSS#1731

Fix favicon for open_basedir (FreshRSS#1733)

Remove open_basedir warning for CURLOPT_FOLLOWLOCATION with PHP 5.6.0- https://bugs.php.net/bug.php?id=65646
Remove warning for CURLOPT_FOLLOWLOCATION with open_basedir (FreshRSS#1734)

For PHP 5.6.0- http://www.php.net/ChangeLog-5.php#5.6.0
https://bugs.php.net/bug.php?id=65646
FreshRSS#1733
FreshRSS#1657
FreshRSS#1655
Prepare release of FreshRSS 1.9.0

Merge pull request FreshRSS#1720 from FreshRSS/dev

FreshRSS 1.9.0
Update FreshRSS version to 1.9.0

Merge branch 'FreshRSS/dev' into FreshRSS/master

[docs] Extensions: fix typo (FreshRSS#1735)


Merge branch 'FreshRSS/dev' into FreshRSS/master

New development version 1.9.1-dev

PHP 7.2: Fix a warning when retrieving the list of entries (FreshRSS#1739)

When retrieving the list of entries when the context was 'all' or 'starred', there was the following warning:

> Warning: count(): Parameter must be an array or an object that implements Countable in /home/alexis/FreshRSS/app/Controllers/indexController.php on line 206

I fixed that by changing how the array is tested.
Fixes link to the "update guidelines" (FreshRSS#1740)


Fixes link to the "update guidelines" (FreshRSS#1740)


Minor changes (FreshRSS#1747)


Tiny additions to .editorconfig (FreshRSS#1744)


Improving README in English and French (FreshRSS#1746)


Merge branch 'FreshRSS/master' into FreshRSS/dev

Adding new items to force-https.default.txt (FreshRSS#1745)


credits  RyDroid

FreshRSS#1747
FreshRSS#1746
FreshRSS#1745
FreshRSS#1744

[doc] Editing for better style (FreshRSS#1736)

* Also removed references to Persona authentication.
* Changed code comment about Persona because it's for HTTP auth
  in general. See FreshRSS@3d87609
  and FreshRSS#358 (comment)
[i18n] Add translation ignore/nl (FreshRSS#1752)


Add shortcuts to switch views (FreshRSS#1755)


Add mute strategy configuration (FreshRSS#1750)


Minor syntax

Merge pull request FreshRSS#1714 from kevinpapst/hook-readingmodes

Added extension hook for reading modes
Changelog 1739, 1745, 1750, 1755

FreshRSS#1739
FreshRSS#1745
FreshRSS#1750
FreshRSS#1755

Fix login bug when HTTP REMOTE_USER changes

YunoHost-Apps/freshrss_ynh#33

Merge pull request FreshRSS#1756 from Alkarex/YunoHost_HTTP_Auth

Fix login bug when HTTP REMOTE_USER changes
Changelog 1756

FreshRSS#1756
YunoHost-Apps/freshrss_ynh#33

Merge branch 'dev' of https://github.com/FreshRSS/FreshRSS into FreshRSS/dev

Fix shortcuts triggering view switching

Merge pull request FreshRSS#1758 from aledeg/fix-nav-buttons

Fix shortcuts triggering view switching
Merge branch 'dev' into github-update
Merge branch 'dev' into github-update
javerous pushed a commit to javerous/FreshRSS that referenced this issue Jan 20, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants