SEARCH
NEW RPMS
DIRECTORIES
ABOUT
FAQ
VARIOUS
BLOG

 
 
Changelog for tt-rss-19.8~git2241.df489df30-lp156.10.1.noarch.rpm :

* Wed Oct 02 2024 mrueckertAATTsuse.de- Update to version 19.8~git2241.df489df30:
* drop php-http/guzzle7-adapter
* drop OPENTELEMETRY_ global config entries
* composer dump-autoload --optimize
* drop opentelemetry
* disable absolute redirects & redirect port in phpdoc image
* Translated using Weblate (Spanish)
* Mon Sep 23 2024 mrueckertAATTsuse.de- Update to version 19.8~git2231.8a8ce0696:
* phpdoc - switch to nginx unprivileged
* Translated using Weblate (Galician)
* add another test for self url, split regex into two parts - one for plugins, one for everything else
* fix Config::get_self_url() invoked from plugin context, better deal with multiple trailing slashes in URL, update phpunit image path
* Translated using Weblate (Greek)
* Translated using Weblate (Spanish)
* Translated using Weblate (Greek)
* don\'t try to publish phpdoc image without creds
* Revert \"Update .gitlab-ci.yml file\"
* Update .gitlab-ci.yml file
* spacing fix
* Update nginx.conf to move the currently unused PATH_INFO configuration into a separate location rule for plugins to leverage
* Translated using Weblate (Spanish)
* Translated using Weblate (Spanish)
* Translated using Weblate (Galician)
* Make a search query \'feed title\' a link to get back to the search modal.
* Translated using Weblate (Spanish)
* Translated using Weblate (Spanish)
* Set \'str_getcsv\' escape param to empty string to avoid PHP 8.4 deprecation message.
* Fix some broken links and make minor wording tweaks.
* Remove extra PHP version checks.
* Translated using Weblate (Galician)
* enforce lowercase usernames while keeping backwards-compatibility for authentication
* fix build: directive missing in dev compose file for updater
* Remove unused \'dashboard feed\' code.
* Translated using Weblate (German)
* Replace basic \'isset()\' cases with the null coalescing operator.
* Translated using Weblate (Spanish)
* set proper stages for phpdoc jobs
* copy docs to subpath
* set phpdoc image name
* add phpdoc dockerfile
* exp - use phpdoc container
* Sun Jul 28 2024 mrueckertAATTsuse.de- Update to version 19.8~git2183.9d37158d8:
* Fix breakage when \'ALPINE_MIRROR\' is not provided.
* support optional mirror for alpine
* Add the \'Sessions\' class to the autoloader.
* update CONTRIBUTING
* Translated using Weblate (Portuguese (Portugal))
* Translated using Weblate (Chinese (Traditional))
* Move side effects out of the \'Sessions\' constructor.
* Add and use the \'Sessions\' class.
* retry selenium tests several times
* Translated using Weblate (Chinese (Traditional))
* Switch to the non-deprecated form of \'session_set_save_handler\'.
* Don\'t reuse the \'$matches\' array in \'RSSUtils::decode_srcset()\'.
* Tue Jul 09 2024 mrueckertAATTsuse.de- Update to version 19.8~git2165.59cf21814:
* Translated using Weblate (Polish)
* Translated using Weblate (Turkish)
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Dutch)
* Translated using Weblate (French)
* Translated using Weblate (German)
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Galician)
* add some time-related debugging output for feeds and users
* Translated using Weblate (Galician)
* set DAEMON_FEED_LIMIT to 50 by default and use it consistently between forking daemon and any other update methods
*
* pass arbitrary CLI arguments to update daemon via updater.sh entrypoint
* add configurable log level for update daemon (DAEMON_LOG_LEVEL)
* when daemon log level is set to LOG_EXTENDED (2) log queries for feed update selection
* add gitlab CR publish jobs
* wip split image build/push
* Translated using Weblate (Chinese (Simplified))
* Translated using Weblate (Italian)
* Translated using Weblate (Chinese (Simplified))
* Update translation files
* Translated using Weblate (Chinese (Simplified))
* update messages.pot
* fix untranslated strings
* Translated using Weblate (Galician)
* don\'t ask rsync to set ownership when copying to persistent volume in a container
* Bump to Alpine 3.20.
* drop es_LA, move es_ES to es
* Sun May 19 2024 mrueckertAATTsuse.de- Update to version 19.8~git2129.8b037e81d:
* Add option to debug feeds in \'Feeds with update errors\' dialog.
* Thu May 16 2024 mrueckertAATTsuse.de- Update to version 19.8~git2127.e2e161dec:
* Check \'head\' and \'body\' when searching HTML for feed links.
* Move \'include/functions.php\' require into Composer autoloader.
* Wed Apr 17 2024 mrueckertAATTsuse.de- Update to version 19.8~git2123.b1e3d660e:
* Switch 2 more implicitly nullable params to explicitly nullable.
* force-set absolute path for local cache if CACHE_DIR config value is relative
* Mon Apr 08 2024 mrueckertAATTsuse.de- Update to version 19.8~git2120.435c321ca:
* Make implicit nullable parameters explicitly nullable.
* Support doing a prefs page search via Enter.
* Wed Mar 06 2024 mrueckertAATTsuse.de- Update to version 19.8~git2116.536085c76:
* Update CONTRIBUTING.md
* Sat Feb 24 2024 mrueckertAATTsuse.de- Update to version 19.8~git2115.81f313999:
* add HOOK_VALIDATE_SESSION
* use update job template
* fix demo values file, drop .helm
* add demo job back
* more prod helm stuff
* unquote commit hash & add files to commit
* maybe fix placeholder git name
* set placeholder git email/name
* set image
* wip: update-prod
* Ensure correct permissions on the backup script.
* Fri Feb 09 2024 mrueckertAATTsuse.de- Update to version 19.8~git2103.373a2fec3:
* Fix passing auth credentials to plugins for HOOK_FETCH_FEED.
* implement above changes for 3 panel view, add basic tooltip
* make headline elements with feed title lead to originating site while RSS icon elements lead to the feed within tt-rss UI
* fix unfunctional rss icon in grouped-by-feed heading
* Thu Feb 01 2024 mrueckertAATTsuse.de- Update to version 19.8~git2098.3d70fb21f:
* use OCI for integration tests
* fix missing include
* switch to template helm ci
* Use FeedEnclosure throughout RSSUtils.
* Mon Jan 22 2024 mrueckertAATTsuse.de- Update to version 19.8~git2093.a86df7eac:
* Use APP_BASE in the web-nginx health check URL.
* Only include the exception message in \'UrlHelper::$fetch_last_error\'.
* shorten DIGEST_MIN_SCORE help text
*
* mark get_pref/set_pref wrappers as deprecated
* add per-user preference for minimal score required for digest
*
* mail test - fill user email address as default
* digest - fix some warnings
* Clean up some unused variables.
* Sun Jan 07 2024 Marcus Rueckert - the new curl based fetcher needs the temp directory redirected - create corresponding directories - set proper environment variables
* Sun Jan 07 2024 Marcus Rueckert - cleanup unused apparmor code
* Fri Jan 05 2024 mrueckertAATTsuse.de- Update to version 19.8~git2084.f0f22c23c:
* Update all UrlHelper::fetch() calls to use the associative array approach.
* Perform validation of redirect URLs during the redirect process.
* Fix specifying auth type in UrlHelper::fetch(), add a test for 403 auth retry.
* Appease PHPStan in UrlHelperTest
* Add some tests for UrlHelper::fetch()
* Ensure the feed name is easily visible when looking at the feeds with errors list.
* Rework content encoding error retrying in UrlHelper::fetch()
* Clean up UrlHelper::resolve_redirects().
* Add back \'any auth\' retry in UrlHelper::fetch()
* Use Guzzle
* sanitizer: add a test to make sure
is intact
* Revert \"Fix sanitizer with libxml2 >= 2.12.0\"
* bump CI jobs & utility scripts to php83
* Bump to Alpine 3.19 and PHP 8.3.
* add coverage-filter
* add phpunit code coverage driver
* add some unittest options for xmlrunner
* fix filename
* enable unit test results for selenium
* collect phpunit artifacts
* add env prefixes
* add db vars
* add cobertura args for phpunit-integration
* disable local rules for integration tests
* add sanitizer integration test
* Fix sanitizer with libxml2 >= 2.12.0
* set registry project
* Thu Nov 16 2023 mrueckertAATTsuse.de- Update to version 19.8~git2050.1fe1132a1:
* use variable for fastcgi_pass to force resolver usage
* explicitly set resolver in the nginx container (configurable envvar)
* add wip UI/backend stuff to filter feed tree
* add wait-for-element to selenium test
* remove .git before_scripts
* Revert \"pass .git to docker context so self-built images would have some way to determine version without CI variables\"
* forgot one job
* do the same for :publish jobs
* fix yaml indents
* add .git to .dockerignore when building master images
* pass .git to docker context so self-built images would have some way to determine version without CI variables
* Mon Oct 30 2023 mrueckertAATTsuse.de- Update to version 19.8~git2039.1be156408:
* add some more phpunit api tests
* pass API_URL to phpunit-integration CLI
* fix apitest
* fix circular dependency
* reduce targets
* add phpunit integration (wip)
* add stuff necessary to run integration tests using phpunit
* add always-failing mock of api test
* phpunit - skip integration tests
* use python unittest for selenium tests
* add a separate interface for auth modules w/ change_password() method
* unify test class naming
* replace some dirname horrors with a separate unit-tested method
* Fix class names in some more places.
* make phpstan happy
* add healthcheck public method, map by default to /healthz
* move to psr-4 autoloader
* Revert \"api: escape newlines in headline content HTML object\"
* add a workaround for make_self_url() when invoked off /api/ endpoint, add unit tests for this method
* disable xdebug tracing
* api: escape newlines in headline content HTML object
* add stub opentelemetry classes in case it is disabled
* Update docker-compose.yml
* Revert \"add a self url path hack to strip request path directories (needed for /api/index.php)\"
* Revert \"make phpstan happy\"
* make phpstan happy
* add a self url path hack to strip request path directories (needed for /api/index.php)
* set demo webroot values
* demo - enable auto restart
* remove helm debug, hide demo job behind CI var
* we don\'t need a separate demo stage now
* set imageTag
* move demo to later stage
* add demo k8s job
* make sure we fail properly
* add configurable ns
* un-mock test, use SELENIUM_IMAGE
* use CI_COMMIT_SHORT_SHA for selenium test mock
* remove startup checks for SELF_URL_PATH, rely on auto-detection instead
* update test filename
* add integration branch job
* add selenium mock
* fix local compose file typo, wait a bit before curling login page
* fix previous
* force create cache directories on app startup
* enable updater by default
* compose tweaks
* add simple dev compose
* test: run curl to get login page
* move phpdoc to publish stage
* set phpdoc to always run
* add publish jobs
* test stub
* switch to html2text() instead of strip_tags() when preparing FTS index
* cosmetic fix for root span name
* fix previous
* stop whining if _SESSION etc are not defined
* show logged in user as root span name
* make phpstan happy, run phpstan on all files on task startup
* a bit more tracing
* add placeholder instrumentation for public
* stop calling spans scopes
* make tracer field non-static
* OPENTELEMETRY_HOST -> OPENTELEMETRY_ENDPOINT
* make phpstan & watcher happy, stop running phpstan on vendor/
* jaeger-client -> opentelemetry
* unharcode proxy registry
* Revert \"Revert \"exp: switch to kaniko\"\"
* Revert \"exp: switch to kaniko\"
* exp: switch to kaniko
* update phpdoc image
* Fri Oct 13 2023 mrueckertAATTsuse.de- Update to version 19.8~git1964.9556519e6:
* fix content_preview not shown in JSON shared feed
* Wed Oct 11 2023 mrueckertAATTsuse.de- Update to version 19.8~git1963.c779e2ba0:
* batch feed editor: don\'t try to save feed_url or title, those aren\'t in the dialog
* fix feed_language being unnecessarily quoted in batch feed editor
* enable fpm status page
* Revert \"CI: use nexus alpine proxy\"
* phpstan fix
* feed debugger: add content regexp matches to filter debug output
* gitignore phpstan-tmp
* phpstan: set tmp dir
* CI: use nexus alpine proxy
* phpstan: exclude intervention from plugins/
* fix basename() being passed a NULL value
* add .dockerignore
* use non-deprecated variant of get_schema_version()
* phpstan: exclude psr/log
*
* logger: add optional HTML output
* feed debugger: add checkbox to dump feed XML
* use nginx envsubst to make tt-rss root configurable
* Sat Jun 17 2023 mrueckertAATTsuse.de- Update to version 19.8~git1945.dc25a9cf6:
* disable app passwords in the UI if auth_internal is not loaded
* move af_redditimgur to a separate repo
* keep two sets of content-insert size cookies for wide & normal mode
* public/getUnread: fix PHP8 warning if fresh optional parameter is not given
* Fix version string for unsupported installations
* Forgot delimiter
* Update API Add site_url property for 9e169dc3aa7c7e30c11d7d3d1bbc4bc66fa39760
* Thu May 18 2023 mrueckertAATTsuse.de- Update to version 19.8~git1936.a4543de3a:
* Bump to Alpine 3.18, PHP 8.2
* Fri May 12 2023 mrueckertAATTsuse.de- Update to version 19.8~git1934.11946f014:
* Update CONTRIBUTING.md
* _order_to_override_query: fix custom sort plugins overriding each other
* add Headlines.default_move_on_expand tunable
* fix 881f8805bd behaving improperly
* add APCu & opcache
* long year -> short year
* we don\'t need BUILD_TIMESTAMP either
* move branch to version tooltip
* use short sha CI envvar for version.json compatibility
* no more pointless txt files for version
* a bit more diskcache tracing
* don\'t try to pass array to span tags
* better static version
* add CI_COMMIT_TIMESTAMP to version-static file
* create version_static.txt on build
* fix typo
* make jaeger service name configurable
* add tracing to UrlHelper
* add php81-sockets
* a bit more tracing
* even more tracing
* more tracing
* Tracer: rework options to tags
* add icatchall
* make phpstan happy
* some tracer class fixes / unhardcode jaeger IP
* exp: jaeger tracing
* Revert \"docker: point xaccel plugin url to gitlab\"
* bump dojo to 1.16.5
* docker: point xaccel plugin url to gitlab
* add window.requestIdleCallback polyfill for safari
* Update config.php: $ttrss_version in private function _get_version() replaced by $this->version
* CI: phpstan: check for PHPDOC_DEPLOY_SSH_KEY
* phpstan task: analyze only modified files
* filters: allow matching on tags if there are no tags
* make phpstan happy
* add simple autocompleter for tags
* add branch targets
* remove .gitea workflows
* dockerfile cleanup
* fix eslint task extending .phpunit
* use common CI template
* Make edit feed dialog\'s \'remove icon\' button a regular button.
* add branch tasks
* more pipeline tweaks
* phpstan: depend on phpunit
* add some manual job triggers
* remove docs stage
* CI: set some job filters
* fix phpdoc stage
* add phpdoc job
* WIP: gitlab-ci
* isLoggedIn adds a message to the system log when it returns false, fix for php8+, removed empty test for bool conversion.
* lint job: remove useless cache hash
* isLoggedIn adds a message to the system log when it returns false, fix for php8+
* good idea to checkout code before trying to document it
* phpdoc job: verbosity
* simplify pipeline setup
* fix ssh for phpdoc pipeline
* add phpdoc job
* add docker build cache
* use action for image meta
* we don\'t need to do npm install either
* remove node_modules after eslint pass
* shorten pipeline
* update FROM links for harbor
* enable multiarch
* bring back nginx_xaccel
* add gitea-CI docker builder
* commit package-lock.json, add eslint task
* CI: add on PR
* jenkins lint -> gitea workflow
* add lint workflow
*
* auth_internal OTP form: fix double-urlencode
* post-login redirect: handle ?return in a less idiotic fashion
* combined mode: prevent left part of footer pushing right part out of viewport
* Change \'FEED_NOTHING\' to \'FEED_DASHBOARD\'.
* Also use friendly names for special feed+cat IDs in the frontend.
* Replace special feed and category numbers with constants.
* Revert 7ed4fa4c1dbdd9df552cf6dd28907c6769911a0e and use AATTvar instead.
* Remove unused \'Prefs::_delete()\'.
* Address PHPStan warning about unused private method \'Prefs::_delete()\'.
* Tweak to appease PHPStan in \'Pref_Feeds::_makefeedtree()\'.
* Address PHPStan \'right side always true\' in \'PluginHost::lookup_command()\'.
* Address PHPStan \'right side always true\' in FeedItem_RSS.
* Bump PHPStan from 1.8.2 to 1.10.3
* API: - sharedToPublished: add optional sanitize parameter (defaults to true) if disabled, allows inserting HTML into shared article content; - clean() already invokes strip_tags() so it\'s pointless to do both;
* tags display: instead of limiting to 5 tags, limit by container width %
* require PHP to have support for flock()
* add override links to utility views
* API: add getFeedIcon endpoint, bump version
* Mon Feb 20 2023 mrueckertAATTsuse.de- Update to version 19.8~git1835.fcfcb69a2:
* Handle fetch issues in \'RSSUtils::update_basic_info\'.
* Wed Feb 15 2023 mrueckertAATTsuse.de- Update to version 19.8~git1833.7bbe71b81:
* Fix calculating average color for
*.ico
* Thu Feb 09 2023 mrueckertAATTsuse.de- Update to version 19.8~git1831.0cd4abe4e:
* Minor tweak to favicon avg color debug log message.
* Don\'t set \'favicon_avg_color\' on feed obj unless it\'s valid.
* Fix logging favicon-related bools in \'RSSUtils::update_rss_feed()\'.
* Persist failure to detect favicon average color.
* Ensure custom favicon color detection happens.
* Mon Jan 23 2023 mrueckertAATTsuse.de- Update to version 19.8~git1825.c30b24d09:
* deal with type errors in batch feed editor properly, un-deprecate PDO wrapper functions and document them for posterity
* batch feed editor: silence some more php8.1 undefined field warnings
* batch feed editor: - fix some field changes not applying because of DB type errors - rework to use bound vars instead of sql query concatenation deprecate: checkbox_to_sql_bool(), bool_to_sql_bool()
* CI: use local registry php image
* show full commit timestamp with version information in prefs footer
* Translated using Weblate (German)
* Fix getting active feeds with errors.
* Only count updating (i.e. enabled) feeds when determining active feeds with errors.
* Only touch on send for expirable cache files.
* make phpstan happy
*
* bring back cache-busting for feed icons based on timestamp
* DiskCache: use singleton pattern to create less cache object instances
* DiskCache: implement ETag
* limit tree expando white color to prefs
* move af_readability out of master tree
* Add af_readability \'html5-php\' Jenkinsfile.
* Bump af_readability \'html5-php\' dependency to latest.
* phpstan: exclude tests in lib/
* Sun Dec 04 2022 mrueckertAATTsuse.de- Update to version 19.8~git1804.fa9c614ff:
* fix cleanup_feed_icons unlinking nonexistant files, limit it to actual feed icons
* Consistently get the self URL.
* get_self_url: strip all trailing slashes
* Sat Nov 26 2022 mrueckertAATTsuse.de- Update to version 19.8~git1799.52180c9f8:
* DiskCache: enforce basename() on filenames passed to cache adapter
* migrate favicons directly to new cache
* rework favicon storage to use DiskCache
* DiskCache: tweak how expiration is invoked
* deprecate DiskCache->touch()
* update_rss_feed: use DiskCache to store feed data
*
* split local cache implementation into a separate class
* allow custom implementations provided by plugins
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Translated using Weblate (Chinese (Traditional))
* Mon Nov 21 2022 mrueckertAATTsuse.de- Update to version 19.8~git1788.9a0dcdd6c:
* Address upcoming string interpolation deprecation.
* Wed Oct 19 2022 mrueckertAATTsuse.de- Update to version 19.8~git1786.602e86842:
* fix some PHP8 warnings generated while dragging feed tree items around
* fix tree expando being invisible on selected tree nodes
* Return true in custom error handler for proper suppression
* Jenkins: set discarder
* remove docker-on-docker hacks from Jenkinsfile
* add Jenkinsfile to enable separate CI for pull requests
* Fix PHP8 strtime warning if argument is null (addendum)
* Fix handling of suppressed errors
* make phpstan happy
* Thu Sep 29 2022 mrueckertAATTsuse.de- Update to version 19.8~git1772.3545d3ba8:
* Update \'CONTRIBUTING.md\'
* Added support for api plugins virtual feeds
* Fix PHP8 strtime warning if argument is null
* Mon Sep 05 2022 mrueckertAATTsuse.de- Update to version 19.8~git1766.d47b8c849:
* Set user related sessions for single user mode
* Add last_login to single user mode
* Fix PHP8 empty param problem
* update gl translation label (2)
* update gl translation label
* enable gl translation (Galician)
* Translated using Weblate (Dutch)
* Translated using Weblate (Czech)
* generate_syndicated_feed: add source section to JSON-formatted output
* amend logic flow to fix phpstan warning in previous
* Handle \'file_get_contents()\' failure in \'UrlHelper::fetch()\'.
* Handle valid HTTP responses with no response body.
* Use the null coalescing assignment operator in various places.
* Replace use of \'array_merge\' with the spread operator and \'array_push\' in various places.
* Use arrow functions in some places.
* minor: remove a PHP >= 5.6 check in \'af_redditimgur\'
* Remove a PHP < 7.1 branch in UrlHelper.
* Switch to direct type declarations of class properties.
* Sat Aug 06 2022 mrueckertAATTsuse.de- Update to version 19.8~git1741.ed2cbeffc:
* disable composer platform check
* update phpstan to 1.8.2
* rework phpstan task to use inotifywait
* enable phpstan task to run in background
* readability: import fixed html5-php
* add vscode task for phpstan
* fork masterminds html5-php
* properly check for baseline required PHP version (7.4)
* af_redditimgur: absolutize links before working on them (again)
* Revert \"af_redditimgur: absolutize links before working on them\"
* af_redditimgur: absolutize links before working on them
* af_redditimgur: don\'t try to check if null domain is blacklisted
*
* add HOOK_LOGINFORM_ADDITIONAL_BUTTONS
* allow plugins to inject JS code into login form
* public: allow system plugins to expose public methods
* make_self_url: properly strip out GET params
* readability: depend on psr/http-factory
* readability: add missing dependencies
* use correct namespace for forked readability-php
* Fix an error when disabling all user plugins
* add missing files for forked idiorm
* downgrade phpstan to 1.1.2
* af_redditimgur: absolutize links before processing them
* some very minor php8.1 warnings fixed
* upgrade idiorm to php8.1-patched version (aaronpk/idiorm)
* Update php-qrcode and php-settings-container for PHP 8.1
* Update beberlei/assert for PHP 8 compatibility
* fix: lower-case remote usernames before validation
* Fix MySQL search Queries
* schema: don\'t use \'create index if not exists\' syntax because mysql doesn\'t support it
* experimental, af_psql_trgm: attempt to pseudo-normalize returned mysql score values by dividing by match length
* implement native fulltext search on mysql
* schema: add fulltext indexes for mysql to support af_psql_trgm and possibly future fulltext search
* af_psql_trgm: add support for querying against mariadb FULLTEXT indexes
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Chinese (Simplified))
* fix rendering of articles with titles containing extremely long words
* userhelper: fix optional parameter being declared before a required one
* UserHelper, CLI: add a method to check user password
* phpstan: limit concurrency
* CLI: properly deal with --force-yes on schema update
* CLI: exit with error status when operation has failed
*
* add UserHelper methods to manipulate user database (add, modify, delete)
* expose said methods via CLI (update.php)
* fix several invocations of deprecated functions
* set stricter type hints on several method arguments
* Translated using Weblate (Galician)
* Translated using Weblate (Italian)
* throttle updates if received HTTP 429 (Too Many Requests)
* Translated using Weblate (French)
* Update translation files
* Tue Jun 07 2022 mrueckertAATTsuse.de- Update to version 19.8~git1687.7cd26272f:
* Revert \"minor: Support html content in mailer.php\"
* Revert \"trivia: coding style\"
* feeds-tree: move external onClick dojo/method to PrefFeedTree class
* filter-tree: move external dojo/method to PrefFilterTree class
* rebase translations
* prefs: move external filter tree onload method (which checks for inactive feeds, etc.) to FilterTree class
* pref-filters: add a button to hide or show rules in the filter list
* gulp task: add flatpak node16 sdk to path because it doesn\'t inherit launch environment
* fix PHP8 undefined array key warning when resetting prefs to defaults
* bookmarklets: fix wiki URL
* fix custom-set site URLs never used while updating feeds
* when determining feed-specific favicon, instead of using first match or generic fallback, go through entire list of determined favicon URLs
* trivia: coding style
* minor: Support html content in mailer.php
* use CURLAUTH_BASIC by default for password-protected feeds, keeping CURLAUTH_ANY as a fallback in case we got a 403.
* Fix typo
* Fix xml parsing error
* Update \'CONTRIBUTING.md\'
* make phpstan stfu about unmatcher ignored errors (seriously)
* add some more phpstan excludes
* Translated using Weblate (Belarusian)
* fix be locale label
* enable Belarusian translation (proper UI label pending)
* Translated using Weblate (Belarusian)
* Translated using Weblate (Belarusian)
* Translated using Weblate (Belarusian)
* Added translation using Weblate (Belarusian)
* Fri Apr 08 2022 mrueckertAATTsuse.de- Update to version 19.8~git1656.2654b3c6b:
* disable some pointless startup sanity checks when running under docker
* Sat Apr 02 2022 mrueckertAATTsuse.de- Update to version 19.8~git1655.41a52c833:
* update CONTRIBUTING.md re: gitea registration
* set last_login_update session variable immediately when logging in
* Fix af_comics for explosm after site changes
* rewrite_relative: deal with undefined path warning
* rewrite_relative: use isset() to check for relative path
* add phpunit configuration
* tests: add stub autoloader, add a few more rewrite_relative tests
*
* add phpunit as a dev dependency
* add some basic tests for UrlHelper::rewrite_relative()
* fix UrlHelper::rewrite_relative() to work better on non-absolute relative URL paths
* af_readability: ask readability-php library to fix relative URLs
* Fri Mar 11 2022 mrueckertAATTsuse.de- Update to version 19.8~git1644.170385021:
* Translated using Weblate (German)
* various fixes vor php 8.1 compatibility
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Translated using Weblate (Galician)
* Added translation using Weblate (Galician)
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Dutch)
* Mon Feb 28 2022 mrueckertAATTsuse.de- Update to version 19.8~git1632.a39557451:
* actions dropdown: add context-sensitive UI layout labels
* getAllCounters: set default value if frontend doesn\'t pass label or feed id count
*
* add actions dropdown to toggle combined mode
* hide \'toggle widescreen\' menu item when in combined mode
* unify some mode toggling code in App
* inline attachment links: break long words to prevent horizontal scrolling
* Mon Feb 21 2022 mrueckertAATTsuse.de- Update to version 19.8~git1628.9a5c21630:
* update.php: better error reporting if invoked with PHP SAPI other than CLI
* fix Feeds::_get_counters() used improperly as a replacement for getFeedUnread()
*
* Feeds::_get_counters - fix retrieving unread for tags
* mark several symbols as AATTdeprecated properly
* replace uses of (deprecated) getFeedUnread() with Feeds::_get_counters()
* Fri Feb 18 2022 mrueckertAATTsuse.de- Update to version 19.8~git1625.168dc6fe5:
* rewrite_relative: prevent php warning when checking for unset content type in EXTRA_SCHEMES_BY_CONTENT_TYPE
* rewrite_relative: whitelist specific schemes for URLs with \'known\' content-types i.e. specified for enclosures
* allow running as root in a container environment
* Tue Feb 08 2022 mrueckertAATTsuse.de- Update to version 19.8~git1622.079f6dfdd:
* note: use proper hook to set click handlers
* Replace deprecated `strftime`
* Tue Feb 01 2022 mrueckertAATTsuse.de- Update to version 19.8~git1618.4e35c44ad:
* plugins/note: allow editing note by clicking on it
* Add workaround for boolean values being intergers with MySQL/PHP 8.1
* make sure notification is closed when saving/creating filter
* fix filter last_triggered not updating
* Mon Jan 24 2022 mrueckertAATTsuse.de- Update to version 19.8~git1612.56fd06d61:
* make sure #headline-spacer click to open prompt is not obscured when mark as read on scroll is enabled
* Fix starred images not being deleted
* share plugin: fix previous
* rework several instances of translated strings being used with single quotes as HTML element attribute values
* update_rss_feed: juxtapose pdo and ORM commit on timestamp update
* Headlines: fix multiple article ids not passed to setScore as an array
* Mon Jan 10 2022 mrueckertAATTsuse.de- Update to version 19.8~git1602.4a4928ea2:
* af_readability: use data-src for images if available
* generate a warning if plugin-generated content of HOOK_ARTICLE_BUTTON or _LEFT_BUTTON can\'t be parsed as valid XML
* themes: Fix incorrect blur and opacity interaction
* process gallery media in the correct order
* fetch: return HTTP code when no curl_error() is available
* remove deprecated LOG_ constants
* Mon Dec 20 2021 mrueckertAATTsuse.de- Update to version 19.8~git1594.7aeaa1b03:
* rssutils: rewrite several invocations of (deprecated) rewrite_relative_url() to UrlHelper::rewrite_relative()
* filters:
* add filter action to ignore feed-provided tags
* simplify handling of various filter-provided tags
* bump schema to 146
* af_redditimgur: don\'t generate a warning if fallback video is not found for hosted:video post
*
* fox.form.Select: add several properties allowing it to better imitate other controls like DropDownButton, etc.
* rework several main toolbar items to use fox.form.Select instead of other controls
* replace HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM with HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM2 because of markup change (option instead of menuitem)
* PluginHost: add some explicit typecasts to make intellephense shut up
* PluginHost: add run_until() and HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM2
* Handle another potential \'SUM()\' null situation in Feeds.
* Add a note on why ed74c43f18 was needed.
* Handle the admin user not having any entries in \'Feeds::_get_global_unread\'.
* Translated using Weblate (Czech)
* Translated using Weblate (Chinese (Traditional))
* Tue Dec 07 2021 mrueckertAATTsuse.de- Update to version 19.8~git1582.53061d150:
*
* add HOOK_POST_LOGOUT
* auth_remote: add config option AUTH_REMOTE_POST_LOGOUT_URL
* af_comics: add Powerup Comics and Danby Draws
* Fixes declaration of Pref_Prefs::csrf_ignore to match IHandler::csrf_ignore
* Prevent \"Undefined index: version\" events for git version with open_basedir after 9dabfbfa11
* Thu Dec 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1576.5df8dacf9:
* api, getHeadlines: properly accept feed_id 0
* combined mode: add a hack (?) for .titleWrap width
* Revert \"various fixes vor php 8.1 compatibility\"
* Revert \"replace strftime with date\"
* replace strftime with date
* various fixes vor php 8.1 compatibility
* combined mode: limit feed title element to 25% width
* remove mixed type hints from function arguments because we still support PHP7
*
* fix showing headlines for tag-based virtual feeds
* API: allow retrieving headlines for tag-based feeds (bump api level to 18)
* Sun Nov 28 2021 mrueckertAATTsuse.de- Update to version 19.8~git1566.831648e3c:
* af_redditimgur: check content-type before downloading data for og:image and imgur pages
* urlhelper: add debugging output for download attempts
* mark clean() return value as nullable
* api: don\'t try to pass null login/password when subscribing to feed
* _get_version:
* Sun Nov 21 2021 mrueckertAATTsuse.de- Update to version 19.8~git1561.7cfc30ac2:
* format_backtrace: revise previous to only try truncating/adding actual strings
*
* sql_bool_to_bool: make parameter nullable
* errorhandler: don\'t try to truncate null strings
* UrlHelper::rewrite_relative: fix undefined offset warnings for URLs that lack schema/host (data: etc)
* sanitize: make force_remove_images nullable
* Fri Nov 19 2021 mrueckertAATTsuse.de- Update to version 19.8~git1558.2b4ba59a7:
* feeds/add: force cast category id to integer
* Don\'t type DiskCache\'s $mimeMap.
* Fix Undefined array key \"order_by\"
* Fix \'view_mode\' default in API#getHeadlines()
* Switch from null to false as the default for missing bool params.
* Actually, always clean in Handler._param_to_bool()
* Clean string params in Handler._param_to_bool()
* Consistently handle param string to bool conversions in handlers.
* config: use phpdoc comments for global options, etc
* API/catchupFeed: properly pass is_cat as bool
*
* base plugin class: correct description of hook_house_keeping()
* cache_starred_images: keep status files in a separate cache directory
* _format_headlines_list: fix phpstan warning properly
* API: fix unexpected null being passed to _order_to_override_query
* API: force methods to return bool to make wrap() mistakes easier to track
* api: a few more returns in login
* api: don\'t return errors on login success
* Minor correction to RSSUtils::cache_enclosures() $enclosures param type.
* Switch FeedParser back to described behavior for setting \'error\'.
* document a few more plugin hooks
* add descriptions for some plugin hooks
* schema: remove default subscription of admin to the forums rss feed
* better check for docker
* correctly show non-docker git installs as unsupported
* pluginhost: set stricter AATTparams
* adjust phpdoc tags for hook definitions/constants (make them reference each other)
* not dead: Article.assigntolabel etc are exported methods called by frontend (Headlines.js)
* mailer: don\'t crash if php mail() fails with no reported errors
* Minor fix in \'classes/articles.php\'.
*
* DiskCache: add download() helper
* Af_Comics_Gocomics_FarSide: cache linked images because it seems to be required anyway
* when uninstall plugins, refresh plugins index instead of reloading entire prefs pane
* update dojo/dijit to 1.16.4
* update phpstan to 1.1.2 (composer files)
* update phpstan to 1.1.2; update php-qrcode to 3.4.1
* Minor fix to DOMNodeList#item() potential type (null vs false)
* auth_internal: limit password throttling to failed login attempts not using OTP
* remove themes/Makefile (obsolete, replaced with gulp)
* deal with several DOMElement-related errors
* unignore several phpstan errors
* set better matching type hint on virtual feed object
* require virtual feed plugins to implement IVirtualFeed
* add IVirtualFeed interface for plugins implementing virtual feeds
* revise phpdoc annotations for hook_search()
* Fix a PHPStan warning in \'UrlHelper::rewrite_relative()\'.
* Address PHPStan warnings for FeedEnclosure.
* Address PHPStan warnings in FeedItem classes.
* Change the param type for UserHelper::hash_password() $algo to appease PHPStan.
* Also fix the param signature for Plugin#hook_hotkey_info()
* Fix the return signature for Plugin#hook_hotkey_info()
* Address PHPStan warnings in \'include/colors.php\'.
* Address PHPStan warning in \'classes/pref/users.php\'.
* Address PHPStan warning in \'classes/pref/system.php\'.
* Address PHPStan warning in \'classes/pref/prefs.php\'.
* Address PHPStan warning in \'classes/pref/labels.php\'.
* revise prototype for hook_enclosure_imported
* deal with most of warnings in plugins/af_readability
* deal with phpstan warnings in plugins/note, nsfw, and share
* deal with phpstan warnings in auto_assign_labels and bookmarklets
* deal with (most of) phpstan warnings in auth_internal and auth_remote
* Address PHPStan warning in \'classes/pref/filters.php\'.
* Address PHPStan warning in \'classes/mailer.php\'.
* deal with phpstan warnings in plugins/cache_starred_images.php
* adjust some return types in urlhelper
* deal with phpstan warnings in plugins/af_redditimgur.php
* set annotations/types in af_psql_trgm
* set missing annotations in af_comics
* set phpdoc annotations for auth_base
* revise phpdoc annotations for hook_sanitize()
* Handle potentially null link, title, etc. in FeedParser.
* plugin.php: add some minor method phpdoc corrections
* userhelper: add a phpdoc variable class hint
* deal with the rest of warnings in plugin.php
* deal with a few more phpstan warnings re: base plugin class
* fix HOOK_QUERY_HEADLINES being invoked with different argument lists, add some more phpdoc comments for base plugin class
*
* deal with some phpstan warnings in base plugin class
* arguably better hack for incompatible plugins causing E_COMPILE_ERROR
* deal with phpstan warnings in update.php
* prefs: properly report failures when loading plugin list
* show safe mode warning dialog in prefs
* xhr.json: properly pass failure callback to xhr.post()
* xhr.json: don\'t call resolve() on failed to parse data
* pluginhost: add a hack to not crash on an incompatible plugin more than once (per login) - UGLY
* normalize some mismatching hook function definitions to match base Plugin class
* deal with phpstan warnings related to base authentication modules
* Address PHPStan warnings in \'classes/pref/filters.php\'.
* set some annotations on Plugin hook methods
* experimental: bring back plugin hooks to Plugin base class once (to be improved/fixed with annotations later)
* deal with some warnings in plugins/trgm,readability and base plugin class
* no need to duplicate annotations
* phpstan: deal with plugins/share
* rework previous Plugin changes as phpdoc annotations
* revert all plugin base class related changes to keep compatibility with extant plugins (for the time being)
* minor: correct $cat type in Pref_Feeds#calculate_children_count()
* Address PHPStan warnings in \'classes/pref/feeds.php\'.
* Fix the type of Labels::update_cache()
* fix phpstan warnings in classes/plugin-template.php
* experimental: also don\'t keep base plugin template as a non-analyzed file
* experimental: auto-generate and add all plugin hook methods to Plugin class
* fix phpstan warnings in classes/sanitizer.php
* fix phpstan warnings in classes/api.php
* fix phpstan warnings in classes/feedparser.php
* fix phpstan warnings in classes/db/migrations.php
* Address PHPStan warnings in \'classes/api.php\'.
* Typing IHandler methods, typing Handler_Public, fix type of $feed_id (might be tag).
* Fix type of \'check_first_id\' in Feeds \'_format_headlines_list\'.
* Switch class properties from PHP typing to PHPDoc for compatibility with PHP < 7.4.0
* Address PHPStan warnings in \'classes/mailer.php\', \'classes/opml.php\', and \'classes/pluginhandler.php\'.
* Address PHPStan warnings in \'classes/rpc.php\'.
* Fix some PHPStan warnings in \'classes/db/migrations.php\', \'classes/db/prefs.php\', and \'classes/debug.php\'.
* Fix a warning in \'classes/counters.php\'.
* PHPStan warning fix in \'backend.php\'.
* Minor PHPStand warning fix in \'update.php\'.
* Address PHPStan warnings in \'classes/feeds.php\'.
* Update signature of handler \'csrf_ignore\' to include types.
* Address PHPStan warnings in \'classes/article.php\'.
* Address PHPStan warnings in \'classes/pluginhost.php\'.
* Address PHPStan warnings in \'classes/labels.php\'.
* Address PHPStan warnings in \'classes/diskcache.php\'.
* Address PHPStan warnings in \'inclasses/digest.php\'.
* Address PHPStan warnings in \'include/functions.php\'.
* Fix \'TimeHelper::make_local_datetime()\' (null is allowed).
* Address PHPStan warnings in \'classes/debug.php\'.
* Address PHPStan warnings in \'include/errorhandler.php\'.
* Address PHPStan warnings in \'include/controls_compat.php\'.
* Address PHPStan warnings in \'include/controls.php\'.
* Address PHPStan warnings in \'classes/userhelper.php\'.
* Address PHPStan warnings in \'classes/timehelper.php\'.
* Address PHPStan warnings in \'classes/sanitizer.php\'.
* Address PHPStan warnings in \'classes/rssutils.php\'.
* Address PHPStan warnings in \'classes/prefs.php\'.
* Address PHPStan warnings in \'include/sessions.php\'.
* Address PHPStan warnings in \'classes/counters.php\'.
* Address PHPStan warning and tweak \'tasks\'+\'interval\' handling in \'update_daemon2.php\'.
* Fix some additional PHPStan warnings in UrlHelper.
* Don\'t use \'mixed\' directly (PHP 8+).
* Initial go at PHPStan rule level 6.
* Mon Nov 15 2021 mrueckertAATTsuse.de- Update to version 19.8~git1417.3a3fde1a2:
* when uninstall plugins, refresh plugins index instead of reloading entire prefs pane
* add IVirtualFeed interface for plugins implementing virtual feeds
* xhr.json: properly pass failure callback to xhr.post()
* xhr.json: don\'t call resolve() on failed to parse data
* plugin cleanup re: phpstan 1.0 warnings
* add two helper account access levels: - read only - can\'t subscribe to more feeds, feed updates are skipped - disabled - can\'t login define used access levels as UserHelper constants and refactor code to use them instead of hardcoded numbers
* Tue Nov 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1411.7a52560e4:
* Address PHPStan warning in \'update.php\'.
* Address PHPStan warnings in \'include/colors.php\'.
* Address PHPStan warnings in \'classes/urlhelper.php\'.
* Address PHPStan warning in \'classes/pref/users.php\'.
* Address PHPStan warning in \'classes/pref/prefs.php\'.
* Address PHPStan warnings in \'classes/pluginhost.php\'.
* Address PHPStan warning in \'classes/logger/sql.php\'.
* Address PHPStan warning in \'classes/feeds.php\'.
* Address PHPStan warning in \'classes/feeditem/common.php\'.
* Address PHPStan warnings in \'classes/db.php\'.
* Address PHPStan warnings in \'classes/config.php\'.
* Bump PHPStan to 1.0.0
* HOOK_ARTICLE_BUTTON/HOOK_ARTICLE_LEFT_BUTTON: only try to parse markup if its actually there
* css: make plugin button container a flexbox backend: pass plugin button generated code through domdocument to ensure its correctness; set data-plugin-name attribute on children to make them sortable via css
* minor phpstan tweaks
* require phpstan via composer
* af_redditimgur: allow subscribing to teddit.net subreddits directly (rewriting to reddit.com)
* pluginhost: update comments for HOOK_ constants to use phpdoc syntax; add HOOK_PRE_SUBSCRIBE
* af_redditimgur: set some AATTvar hints
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Chinese (Simplified))
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Chinese (Traditional))
* Translated using Weblate (Chinese (Simplified))
* Translated using Weblate (Italian)
* Translated using Weblate (French)
* Thu Oct 21 2021 mrueckertAATTsuse.de- Update to version 19.8~git1380.377e0b812:
* add data-orig-feed-title to generated headline markup
* af_comics: pass PluginHost to filter constructors
* Fix undefined array key \"output\" when adding new label
* OPML improvements/fixes:
* fix vfeed menu in three panel mode
* fix wrongly renamed CLI options --debug-force-... to --force-...
* headlines: attach context menu to vfeed title node
* feed tree context menu: add an entry to open originating website
* Fri Oct 01 2021 mrueckertAATTsuse.de- Update to version 19.8~git1371.949e2ab4d:
* properly sanitize video poster attribute
* Fri Sep 17 2021 mrueckertAATTsuse.de- Update to version 19.8~git1370.8ed927dbd:
* OPML: multiple fixes
* classes/opml: fix indentation; when importing, don\'t produce warning on filters with no rules defined.
* Fix undefined index error
* Thu Sep 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1366.36e174750:
* fix label ordering in feed tree
* fix password recovery
* block useless usort() E_DEPRECATED for the time being
* remove SELF_USER_AGENT custom constant, replaced with configurable Config::HTTP_USER_AGENT / Config::get_user_agent()
* Pref_Feeds:calculate_children_count - fix operator precedence
* Thu Aug 19 2021 mrueckertAATTsuse.de- Update to version 19.8~git1360.080812317:
* fix broken feed tree generation when categories are disabled
* Make prefs feed search case-insensitive.
* Use ORM more in \'classes/pref/feeds.php\'.
* pull latest readability-php via composer
* Use ORM in some more parts of \'update.php\'.
* Tue Aug 03 2021 mrueckertAATTsuse.de- Update to version 19.8~git1352.73d14338a:
* fix rendering of category filters on Uncategorized
* Sat Jul 10 2021 mrueckertAATTsuse.de- Update to version 19.8~git1351.9f6237a1b:
* main toolbar: clarify element ordering, fix some indents
* prolong PHP session cookie automatically to stop hard logouts after SESSION_COOKIE_LIFETIME expires
* Mon Jun 21 2021 mrueckertAATTsuse.de- Update to version 19.8~git1349.9f6237a1b:
* Rewrite feed entry link as href content
* Fix operator precedence
* Update translation files
* rebase translations
* revise previous a little bit more
* revise previous a little bit
* UrlHelper::rewrite_relative():
* clarify some AATTdeprecation notices
* Skip URI base on ALLOWED_RELATIVE_SCHEMES in rewrite_relative
* add settings profile cloning
* Mon May 31 2021 mrueckertAATTsuse.de- Update to version 19.8~git1336.92c78beb9:
* apply usort workaround for readability-php because its authors were unable to do so for 3 months (https://github.com/andreskrey/readability.php/issues/99)
* add workaround for prefs feed tree favicon placement
* UrlHelper::rewrite_relative: don\'t try to feed NULL to with_trailing_slash()
* feeditem_atom: support xml:base for enclosures and entry content UrlHelper::rewrite_relative: use base URL path if relative url path is not absolute (experimental)
* split googlereaderkeys plugin into separate repo
* add hotkeys J/K to move between unread feeds
* Translated using Weblate (German)
* API: bump api level to 17
* provide base configuration object in login response to skip on initial getConfig
* Tue May 25 2021 mrueckertAATTsuse.de- Downgrade to version 19.8~git1326.9f6237a1b: https://github.com/nilsbraden/ttrss-reader-fork/issues/451
* Mon May 24 2021 mrueckertAATTsuse.de- Update to version 19.8~git1334.326850845:
* UrlHelper::rewrite_relative: don\'t try to feed NULL to with_trailing_slash()
* feeditem_atom: support xml:base for enclosures and entry content UrlHelper::rewrite_relative: use base URL path if relative url path is not absolute (experimental)
* split googlereaderkeys plugin into separate repo
* add hotkeys J/K to move between unread feeds
* Translated using Weblate (German)
* API: bump api level to 17
* provide base configuration object in login response to skip on initial getConfig
* API: return custom sort types in getConfig
* Fix:Plugins-share:init.php - site_url is NULL when share article by URL from archived
* checking for PDO there is rather useless
* sanity check: in single user mode, only test for admin user if migrations have been completed
* use database-backed sessions in single user mode
* Improve missing token check
* Fix:Plugins-share:init.php - site_url is NULL when share article by URL from archived
* include archived articles (which lack associated feed id) when browsing by tag
* af_redditimgur: use core youtube vid helper
* add urlhelper to extract youtube video id from url
* fix combined/three panel transition to expandable mode
* Fix:Plugins-share:init.php - site_url is NULL when share atircle by URL form archived
* Sun May 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1309.e8f78181f:
* af_redditimgur: instead of generating potentially blacklisted iframes (i.e. huge black boxes), save found youtube videos as post enclosures for af_youtube_... plugins to deal with later, if enabled
* fix for previous changeset that broke expanded mode
* Article.pack: add no-op for three panel mode
*
* cdm: render enclosures into content element
* deprecate cdm.intermediate
* implement lazy-load for rendered enclosures
* simplify pack/unpack logic for articles
* youtube_embed: use embed-responsive
* Translated using Weblate (German)
* FIX: public.php - Undefined index: feed_title
* Fix `getCategory` method.
* getPreviousFeed/getNextFeed: implement wrap around
* functions_enabled: trim spaces from disable_functions php ini setting
* if backend request \'op\' is empty fixed
* pluginhost: add profile_get/profile_set helpers
* fix noscript notifications
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Polish)
* Translated using Weblate (French)
* Thu Apr 08 2021 mrueckertAATTsuse.de- Update to version 19.8~git1287.49ef15f11:
*
* fonts-ui: use system font family instead of segoe, etc. by name
* disable segoe-specific baseline hack for the time being
* OTP: generate longer secrets, also make them easier to read/copy
* Adjust quotation marks in search query before \'str_getcsv\'.
* Fix automatically showing next feed on catchup
* revert back to lower contrast light theme by default, add separate light-high-contrast.less
* don\'t use css-defined .svg files because firefox
* fonts-ui: add Cantarell
* light theme: increase contrast
* fix previous issue properly
* Revert \"clip max displayed counter value to 9999 because of container node width\"
* clip max displayed counter value to 9999 because of container node width
* yet another flex feedtree attempt
* Revert \"Revert \"another attempt at flex-based feed tree\"\"
* don\'t try to j/k move to nonexistant feed
* unify return values for getPreviousFeed and usages of both prev/next
*
* Feeds.openNextUnread: fix
* model.getNextFeed: make sure return values are consistent, stop wrapping back to starred
* Revert \"another attempt at flex-based feed tree\"
* another attempt at flex-based feed tree
* share: move og:image back to head
* Switch most of API to ORM
* remove model.getNextUnreadFeed; unify code with feedTree.getNextFeed
* prefs: allow setting email if it was previously blank
* Minor cleanup in \'Handler_Public->getProfiles\'
* Fix a couple of array index warnings in \'Handler_Public->forgotpass\'
* fix excessive CPU usage on linux chromium caused by animated SVG icons
* Switch \'Handler_Public->forgotpass\' to ORM
* Switch \'Handler_Public->login\' to ORM, fix \'Handler_Public->getProfiles\'
* Switch \'Handler_Public->rss\' to ORM
* Switch \'Handler_Public->getProfiles\' to ORM
* feed tree: set cursor pointer on tree label
* fix loadingNode offset for feeds
* filter test dialog: remove .gif; cleanup markup
* Switch \'RSSUtils::update_basic_info\' to ORM
* use svg icon for headlines loadmore prompt
* use svg icon for the subscribe dialog (night mode)
* use svg icon for the subscribe dialog
* use svg icon for packed article placeholders
* update night theme re: previous
* add svg loading indicators
* simplify feed tree expando/loading/feed icon handling
* remove some hardcoded color values
* remove published opml (use CLI instead)
* fix selected feedtree item being invisible in dark theme
* Fix E_NOTICE in `add_handler()`.
* feed tree: css cleanup; set cursor
* error log: fix column widths
* nsfw: set cursor pointer
* mailer: stop warning if to_name is unset (it\'s optional anyway)
* Translated using Weblate (Czech)
* Translated using Weblate (Chinese (Simplified))
* Translated using Weblate (Italian)
* Update translation files
* Mon Mar 15 2021 mrueckertAATTsuse.de- Update to version 19.8~git1225.15b39a534:
* update editorconfig
* set orm and pdo mysql charset on connection
* only show right-side feed icon for vfeeds
*
* limit progressfunction debugging to size quota exceeded notifications
* af_redditimgur: reparent generated iframes outside of post table
* Add coalescing operator to otp_enabled when changing user password
* make description clickable in plugin list row
* api: don\'t try to pass null site_url to Article::_get_image()
* cdmToggleGridSpan: toggle classname instead of a style property
* add HOOK_HEADLINES_SCROLL_HANDLER
* sticky header: better positioning strategy
* gettextify previous
* throttle login attempts, controlled by Config::AUTH_MIN_INTERVAL
* schema: add ttrss_users.last_auth_attempt
* shorten_expanded: reduce log spam
* grid mode: limit word breaking to link elements
* get_override_links: actually return overrides
* valid OTP code should not be enough to login, oops
*
* shorten_expanded: use ResizeObserver (DUH)
* add HOOK_HEADLINES_RENDERED
* update zoom layout a bit
* add some media queries to improve main UI on small-width devices
* continuation of the css cleanup
* css cleanup, combined mode, fonts
* Article.cdmToggleGridSpan: also set as active
* grid: add a header icon (and a hotkey) to toggle article span entire row
* add Config::LOCAL_OVERRIDE_JS
* route Logger:log() to user_error() if there\'s no adapter
* remove previous spacer-specific hack, not needed anymore
* exp: set last odd grid child to span all columns
* nsfw plugin: we don\'t actually need any JS
* fix related to Promise.allSettled() returning a bit different result object
* grid: add workaround for a single loaded headline not spanning all columns
*
* it feels weird for requireIdleCallback() to be optional while more modern browser features are required
* simplify browser startup feature check a bit
* adjust grid view footer (3)
* adjust grid view footer (2)
* adjust grid view footer
* shorten stuff in af_zz_vidmute
* in grid mode, also force word-break .intermediate (enclosures)
* shorten_expanded: remove loading=lazy on the js side instead
* shorten_expanded: no need to hook on HOOK_SANITIZE anymore
* instead of a fixed column layout, fit based on minimum column size
* shorten_expanded: increase timeout
*
* shorten_expanded: use promises instead of a timeout hack
* normalize some icon colors
* stop setting specific background color on .cdm.expanded
* fix crash in preferences due to headlines-frame missing
* small stuck header fixes in grid mode
* fix headlines-spacer height in grid mode
* in grid mode, hide feed title from header
* grid view tweaks
* add hotkey to toggle grid view
* use proper syntax for equal-width columns
* fix vfeed group subtitle in grid mode
* some minor grid stuff
* set #headlines-spacer, etc, to span grid columns
* experimental: add preference to show combined mode headlines as a 2 column grid
* set border color on that too
* support coloring counters by feed-id/is-cat; set fresh counter to green
* add HOOK_HEADLINE_MUTATIONS, HOOK_HEADLINE_MUTATIONS_SYNCED
* show E_COMPILE_ERROR in event log at higher severity levels
* error log: allow wrapping long filenames
* reorganize update.php a bit, remove unneeded options
* add another coalesce for rule inverse
* get_article_filters: set coalesce values for inverse and match_any_rule
* app password list: fix th/td alignment
* af_redditimgur: import link flair as tags
* describe global settings in classes/config.php
* update messages.pot
* Default to null \'rv\' for plugin update check.
* cleanup javascript_tag and stylesheet_tag
* show user css editor before xhr is completed
* search dialog: add button icon
* api: add support for setting score (bump api level to 16)
* fix some php8 warnings
* minor cleanup related to toolbar-main (use dijit methods, etc)
* fix digest preview not working on mysql because of a quoted LIMIT argument
* add to previous a bit
* check updates one plugin at a time
*
* af_redditimgur: optionally import score
* add pluginhost->set_array() to set many plugin settings at once
* HOOK_ARTICLE_IMAGE: stop after first provided match
* nsfw: fix wrong return parameter count in hook article image
* add nsfw.png placeholder
* nsfw: support API clients
* fix previous to actually save enabled plugins
* prevent list of enabled plugins resetting if saved while in search results
* make rendered labels clickable
* logger: use constants instead of hardcoded string literals
* hide event log accordion pane if LOG_DESTINATION is not sql
* allow blank override values
* set plugin list name width same as preferences table
* add some icons, remove some words
* add some more dialog icons
* reduce overhead in hash set/get
* Fix \"array offset on value of type null\" for $error and $old_error
* fix plugins-list line height
* some small layout fixes, remove a few inline styles
* render list of plugins on the client
* set some more type hints
* general cleanup, set some type hints
* fix some leftover variables
*
* don\'t try to update custom set feed favicons
* cleanup update_rss_feed() a bit, use ORM
* fix plugins not shown as already installed if they have more than 1 dash
* The type hint for \'DAEMON_MAX_CHILD_RUNTIME\' should be T_INT
* use separate database column for OTP secrets (migrate previous format if needed)
* schema: add separate otp_secret column
* login page: fix a warning if return is unset
* add a bunch of button icons
* sessions: stop validating against hash of user agent because chromium is sending different agent headers for whatever reason, example:
* don\'t check for plugin updates automatically on pane open
* split af_zz_noautoplay into a separate repo
* af_comics filters: don\'t try to load empty html
* split no_url_hashes into a separate repo
* split scored_oldest_first into a separate repo
* rename unfairly prefixed get_enclosures() in feeditem
* plugin installer: show last commit timestamp
* Translated using Weblate (Czech)
* Translated using Weblate (Chinese (Simplified))
* Thu Mar 04 2021 mrueckertAATTsuse.de- Update to version 19.8~git1099.d016f7a49:
* show installed plugins in the installer list
* Fix Undefined index when using Single User Mode
* shorten plugin list action buttons
* split af_unburn
* a bit better search behavior for plugin installer
* shorten install button text
* reduce plugin installer entry height
* _get_available_plugins: decode as array
* split vf_shared
* add search to plugin installer
* split a bunch of plugins into separate repos
* use computed style for element.prototype.visible
* fix a bunch of bookmarklets login forms not leading back
* use orm for settings profiles stuff
* log applied migrations
* migrations: refuse to apply empty schema files
* migrations: don\'t try to use transactions on mysql
* remove ttrss_version from base schema
* bring back web dbupdate using new migrations system
* sessions: don\'t check schema version
* wip for db_migrations for core schema
* support loading base schema as latest version
* wip: initial for db_migrations
* Thu Mar 04 2021 mrueckertAATTsuse.de- Update to version 19.8~git1074.0cb719a40:
* add basic local plugin uninstaller
* add word wrap for git stdout/stderr pre elements
* add basic plugin installer (uses tt-rss.org)
* add update button for system plugins
* reduce Amount of Caps Used in Multiple Dialogs
* add a send test email button to prefs/system
* previous one was not good enough i guess
* config::make_self_url() strip index.php etc
*
* remove _SKIP_SELF_URL_PATH_CHECKS
* simplify SELF_URL_PATH checks wrt trailing slash
* show timing information in xhr.post/json
* reddit: import comment counts
* use orm in some more places; prevent _get_cat_title from hitting the db for uncategorized
* add digest preview button, also fix a bunch of bugs
* changed skip and limit to coalesce to 0 instead of \"\"
* Fix undefined array key warnings when using iOS app
* update previous (comment)
* initialize Db object early because otherwise ORM might be used unconfigured
* move dbupdater to db/updater; move base SCHEMA_VERSION constant inside db/updater class
* pluginhost: remove namespace classloader, plugins should use composer instead
* limit user data sent to frontend
* user editor: allow toggling otp
* use orm when setting personal data; fix some warnings in mailer class
* store widescreen mode setting in preferences instead of a cookie
* move around some methods in base plugins class
* use ORM for article _labels_of/_feeds_of
* use separate connection for logging
* Tue Mar 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1046.c4eaab8a3:
* feeds/_add_cat: use ORM
* use ORM when subscribing feeds
* sql logger: use orm
* revise behavior of Feeds::_cat_of
* article/redirect: use orm (cast id to int)
* article/redirect: use orm
* Tue Mar 02 2021 mrueckertAATTsuse.de- Update to version 19.8~git1040.f195e86be:
* don\'t rely on exit code when checking version (again)
* use orm for feed access keys
*
* sanitize: never rewrite relative links to our own prefix
* use Config::get_self_url() instead of get_self_url_prefix() in a bunch of places
* remove (unused) prefs/toggleAdvanced
* use orm for app password stuff
* use dash instead of space when invoking git to get version
* Get the version as an array in RPC->checkforupdates.
* don\'t try to pass string literal NOW() to ORM as a timestamp
* revert back load_filters-related changes
* delete Article getScore (seems to be unused)
* use orm for a bunch of short feed/cat queries
* userhelper: use orm for a few more user-related things
* userhelper: use orm for some things
* initial for idiorm
* Mon Mar 01 2021 mrueckertAATTsuse.de- Update to version 19.8~git1024.f96abd2b5:
* generate_syndicated_feed: timestamp is a strtotime() expression, not an integer
* come to think of it, we don\'t need it at all
* auth_internal: don\'t try to get otp_enabled on old schema
* simplify internal authentication code and bump default algo to SSHA-512
* move version-related stuff to Config; fix conditional feed requests
* hide version for bundled plugins because it\'s meaningless; for everything else support showing version using git (if about[0] is null)
* we don\'t need to initialize urlhelper properties
* move startup checks to Config, set a bunch of AATTdeprecated annotations
* speed up plugin updating a bit, fix some phpstan warnings
* check schema version on backend calls because session stuff does it anyway and it\'s already cached
* sanity_check: config.php is now optional, also cleanup some error messages
* move material-icons to composer
* OTP form: simplify layout, use dojo controls
* some plugin updater UI improvements
* move all $fetch globals to UrlHelper
* plugin updater: show changes before updating
* add plugin updates checker into normal updates checker
* disable plugin update checking if CHECK_FOR_UPDATES is disabled
* don\'t try to update all plugins
* reload prefs when plugin updater is closed
* only show plugin update buttons when needed
* feeds/add: hide php8 warning
* af_redditimgur: allow adding custom tags for NSFW posts
* add basic updater for stuff in plugins.local
* add an option to disable conditional counters
* bump schema for ttrss_user_labels2 indexes
* don\'t rely only on label_cache contents when displaying headline labels
* don\'t try to compare null value against anything
* use absolute namespace for readability
* exclude a bunch of phpunit test files
* remove a bunch of return type hints that didn\'t quite fit
*
* switch to composer for qrcode and otp dependencies
* move most OTP-related stuff into userhelper
* remove old phpqrcode and otphp libraries
* add missing composer files
* pull latest readability-php via composer
* when browsing by tags, return same set of columns as normally
* add pluginhost->get_array() shorthand
* Fix the type hint for \'_DEFAULT_VIEW_MODE\'.
* rebase-translations: disable everything except for messages.pot
* silence php8 warnings in otp secondary login form
* check if client-presented URL scheme is different from one configured in SELF_URL_PATH
* _get_headlines: don\'t try to use _SESSION uid
* we need to compile .mo files after all
* Translated using Weblate (Italian)
* Translated using Weblate (Russian)
* Update translation files
* match a few more translated strings
* rebase-translations: try only dealing with messages.pot, let weblate rebuild .po files
* Update translation files
* rebase translations, fixing a few JS strings not mached; remove obsolete scripts (2)
* rebase translations, fixing a few JS strings not mached; remove obsolete scripts
* Translated using Weblate (Russian)
* Translated using Weblate (Chinese (Simplified))
* Translated using Weblate (Italian)
* Translated using Weblate (French)
* upd previous
* add Prefs::DEBUG_HEADLINE_IDS
* add a separator before HEADLINES_NO_DISTINCT
* feeds/view: silence view_mode warning
* add an option to disable DISTINCT on headlines query (unless it\'s Labels category)
* silence phpstan warning
* cleanup previous
* pass translations to frontend as a json object
* prefs: migrate after cache has been filled to skip 1 pref request
* cache schema version better
* reduce overall amount of unnecessary database queries
* wrap prefs->migrate() into a transaction block
* userhelper: only notify failed login for actual logins
* fix crash caused by non-numeric non-null _SESSION[uid] passed to sql logger
* enforce some stricter type checking for loggers
* logger: shorter syntax
* api: remove base64 encoded passwords (wtf), log all authentication failures in userhelper
* stop caching schema version entirely, fix some session_start() related warnings
* prefs cleanup
* get_version: pass int to strftime()
* use constants in get_pref()/set_pref()
* pref-prefs: use constants instead of hardcoded strings
* prefs: don\'t try to do anything on schema < 141
* cleanup a bunch of old prefs code
* fix checkboxes shown as checked when they\'re not with mysql
* updater: show owner login instead of just uid
* deal with feed update scheduling w/ new prefs
* add fallback for feed_language on edit-feed-saving
* remove unused data from schema files
* fix get_pref always using default profile; remove unneeded code from db_prefs
* implement prefs UI based on new prefs class and a few more things
* add prefs caching
* bump schema for upcoming prefs overhaul
* initial (wip) for new prefs: add missing
* initial (wip) for new prefs
* reorder debug targets
* Update translation files
* rebase translations
* add hide/show events for feeds sidebar
* add a hack to position labels on a dijit toolbar better
* decouple runtime-info object from counters
* request label counters conditionally
* fix warning in counters::get_feeds()
* pass array to setScore
* pass a bunch of related arrays properly to backend
* fix typo
* only request counters once for headline mutations
* cats_of: enforce owner_uid
* no special counter handling for catchupAll
* _cats_of: only request parents if needed
* try to calculate counters conditionally based on feed ids
* add Errors.php
* drop errors.php and simplify error handling
* App.requestCounters() is not a thing
* rename TTRSS_SESSION_NAME to SESSION_NAME
* config: add a type hint system
* add some ;s
* floIcon: declare images property
* cleanup some defined-stuff
* af_redditimgur: fix an oopsie
* cleanup config.php-dist
* move db-prefs shortcut functions to functions.php
* allow adding custom config options
* update config.php-dist
* finalize config:: migration; make config.php optional
* update gitignore
* don\'t include config.php everywhere
* migrate the rest into Config::
* add config.php
* wip: initial for config object
* Check whether data is parsable by \'imagecreatefromstring\' in jimIcon.
* dirname(__FILE__) -> __DIR__
* do not use define_default() because it screws with static analyzers
* Remove check against the old file in \'RSSUtils::check_feed_favicon\'.
* fix several issues reported by phpstan
* add chrome configuration for debugging
* add launch.json for xdebug
* reinstate HOOK_RENDER_ENCLOSURE
* Try to limit max favicon size, don\'t store current/old in a var.
* add phpstan config
* pref-prefs: switch to new control shorthand in a few places
* Let \'RSSUtils::check_feed_favicon\' update existing favicons.
* move published opml JS code to pref helpers
* batch editor: comment out getChildByName
* batch feed editor: use tab layout, cleanup
* Open the default feed after unsubscribing.
* move published OPML endpoint to public.php
* minor filter UI layout fix
* prevent creation of filter rules matching no feeds
* Element visible: check for offsetHeight/offsetWidth
* deal with filter actions UI
* for the most part, deal with filter rules UI
* more filter stuff
* prevent filter selected text dialog from opening in wrong order
* a few more methods shuffled around
* first for filter frontend overhaul
* haven\'t i fixed this already
* also disable Article.completeTags
* rpc: disable completeLabels for now
* feed editor: use client dialog
* wip: feed editor client-side
* bookmarklets: cleanup some more markup
* Fix an undefined array key warning in \'catchupFeed\'.
* Translated using Weblate (Italian)
* Translated using Weblate (Chinese (Simplified))
* Fri Feb 19 2021 mrueckertAATTsuse.de- Update to version 19.8~git849.053b262aa:
* rename public.php/cached_url to cached
* move bookmarklet-related methods out of public.php into the plugin
* fix for startup crash because of classes containing spaces
* Fri Feb 19 2021 mrueckertAATTsuse.de- Update to version 19.8~git846.cf249d7e8:
* modify classname helpers to use element.classList; fix feed debugger & share--get
* headlines.select: maybe fix another one
* af_readability: fix selector
* fix height of dijit input boxes embedded into toolbars
* render feed icon markup on the client
* format note on the client
* setArticleTags: always return tags from the db
* add onTagsUpdated similar to onLabelsUpdated
* render tags on the client
* use template strings in a bunch of places instead of id concatenation
* render headline labels on the client
*
* switch to xhr.post() almost everywhere
* call App.handlerpcjson() automatically on json request (if possible)
* show net/log indicators in prefs
* migrate a bunch of xhrPost invocations
* migrate xhrJson invocations to the new helper
* add element fadeout/fadein and a shorter xhr helper
* table helpers: don\'t try to iterate over a single element
* use .closest() instead of .up() to lookup parent by selector
* fix some eslint-related stuff
* fix eslint configuration
* cleanup some unused code, fix App.byId() invoked by wrong name
* properly validate feed editor dialog
* move stuff in common.js around a bit
* bring back hash functions
* add $/423 shims
* get rid of a few more prototype-isms
* compat shim fixes
* compat shim fixes
* add Element toggleClassName
* initial for RIP prototype/scriptaculous
* fix hotkey help toolbar action
* rebase translations
* rework previous to be even less jumpy
* rework previous to be less jumpy
*
* use es5 (?) default parameter values for some functions
* when moving to next article, try to show hsp if its next
* af_psql_trgm: cleanup
* bookmarklets: cleanup
* user details: cleanup
* remove unneeded headings
* shorten many invocations of Ajax.Request in inline form methods
* af_proxy_http: markup cleanup
* small markup adjustment
* profiles: use client dialog; move related methods to pref-prefs
* cache_starred_images: don\'t try to use undefined array index
*
* add (disabled) shortcut syntax for plugin methods
* add controls shortcut for pluginhandler tags
* add similar shortcut for frontend
* allow plugins to selectively exclude their methods from CSRF checking
*
* App: rename hidden to hidden_tag
* search: use client dialog
* add some form field helpers
* search dialog: bring back id of language dropdown
* af_proxy_http: don\'t try to proxy back to ourselves
* cache_starred_images: minor fixes
* delete unused mail .pngs
* mail, mailto: cleanup markup
* pluginhandler: reject method requests without CSRF
* plugins: load dialogs via xhr instead of http
* fix some php8 warnings
* don\'t show E_USER_DEPRECATED on the frontpage
* af_psql_trgm: don\'t load dialog via http
* pluginhandlers: post notice if pluginmethod is requested without CSRF token
* af_readability: cleanup markup
* close_button: fix color not applying
* RIP af_tumblr_1280
* af_redditimgur: cleanup markup
* af_readability: cleanup markup
* af_comics: markup cleanup
* share: markup cleanup
*
* implement shortcut syntax for exposed plugin methods
* move shared article rendering code to share plugin
* share plugin: cleanup, fix icon not highlighting properly
* cleanup markup in some plugins, make nsfw generate dijit widgets
* Article.render: parse dojo widgets
* replace a few more controls to new style
* controls_compat: comment out most of them
* replace a few more controls to new style
* fix floicon not imported from global namespace
* move session-related functions to their own namespace
* move rgb/hsl functions to their own namespace
* rework controls to accept parameters as array
* amend previous to fix actual underlying problem (double escaping)
* hidden_tag: temporarily prevent htmlspecialchars() to stop embedded JSON from breaking
* use a few more control helpers for checkboxes
* login form: use control helpers
* remove backend helper and move its only function to rpc for the time being
* feed debugger: use hidden helpers; add button helpers
* replace print_hidden with hidden_tag
* add namespaced controls with unified naming; deprecated old-style control shortcuts
* pref-labels: remove unused code
* CommonDialogs.addLabel: remove long unused parameters
* _format_enclosures: always return entries array
* feeds/view: fix php8 warning
* shorten_expanded: fix for posts without attachments
* db-prefs: minor cleanup, add warnings if unknown prefs are requested
* pref-filters: fix some warnings
* counters: just merge everything at once
* move reset_password to UserHelper
* drop legacy DB interface and related sanity checks
* remove the rest of db.php; rename some leftover methods in feeds
* move bookmarklet-related subscribe_to_feed_url to bookmarklet plugin
* drop legacy db_ functions wrapper
* router: add additional logging for refused requests; reject requests for methods starting with _
* api: unify naming
* counters: one more
* dbupdater: unify naming
* diskcache: unify naming
* prefs: unify naming
* counters: unify naming
* article: unify naming
* feeds: unify naming
* subscribe to feed: use client dialog
* edit tags: use client dialog
* render enclosures on the client
* api: rewrite article urls at the very end to prevent plugins which expect source URLs from breaking
* Revert \"api: get flavor image from plugin-processed content\"
* api: get flavor image from plugin-processed content
* shared opml and feed dialogs: remove unique target element id, move associated methods into dialog
* renderToolbar: support empty data i.e. dashboard feed
* render headline-specific toolbar on the client
* Lazy load image attachments
* SingleUseDialog: destroy existing widget with same id on create
* remove old-style markup from exception dialog
* pref-users edit: use client dialog
* add Handler_Administrative
* pref-users/add: remove unused variable
*
* remove users/filters toolbar edit button (just click on it)
* fix title of edit filter dialog always showing create filter
* move logout_user() to UserHelper
* pref-users: cleanup index
* prefs system: load phpinfo using inline method
* pref prefs: load secondary tabs when needed
* appPasswordList: markup cleanup
* pref prefs: split index into manageable chunks
* use shortcut echo syntax for php templates
* pref-feeds: load error button via xhr
* remove getinactivefeeds (duplicate functionality)
* batch subscribe: use client dialog
* feeds with errors: use client dialog
* inactive feeds: use client dialog
* pref feeds: index cleanup, split into several methods, use tabs to maximize space for feed tree, persist feed tree state
* minor fixes re: previous
* pref filters index: markup cleanup
* prefs system: markup cleanup
* pref-labels index: use cleaner markup
* pref-labels/index: cleanup
* label editor: use client dialog
* fail better if requested article URL is blank
* Translated using Weblate (French)
* fix a bunch of warnings related to generated feeds
* pref helpers: move some methods to their own sections
* drop ENABLE_GZIP_OUTPUT; system prefs: load php info only if needed
* fix a few more session-related warnings
* validate_csrf: remove warning
* add HTTP_ACCEPT_LANGUAGE handling for php8
* Update translation files
* rebase translations
* silence some more eslint warnings
* prefs: fix published shared URL dialog
* silence (or fix) a bunch of eslint warnings
* RIP tag cloud: last of the vanilla popup dialog system
* batchsubscribe: xhr
* move some dialogs to xhr loading
* force _ENABLED_PLUGINS to string when passed to pluginhost
* RIP easy-installer
* RIP self-registration
* more dialog-related cleanup
*
* OPML import: don\'t reload everything, just feed tree
* dialogs: use auto-destroying dialog for almost all dialogs instead of destroying them manually
* some general dialog-related cleanup
* fix previous: secondary dialog not opening because of onLoad
*
* filters: remove duplicate code, overall cleanup
* check if some tres exist before trying to reload them
* Add defaults to api.php variables
* edit filter dialog: cleanup
* fix typo
* dialogOf: deal with both raw DOM elements and widgets
* remove customizecss from csrf-ignored methods
* various dialog-related fixes; stop referring to many dialogs by name; move filter test initial dialog to client side
* rework a few more dialogs to use App.dialogOf()
*
* customizeCSS: client dialog
* remove hardcoded width from most dialogs (move to css)
* add helper to easily get dialog from its widget
* rework some dialog buttons to use current object instead of calling dialog by name
* remove OPML.onImportComplete
* opml import: no more iframe, use client dialog
* fix typo introduced by 4182018cb7
* remove explainError server-side dlg
* generated feed: use client dialog
* publishedOPML: use client dialog
* disable themes in safe mode; rework safe mode warning/login prompt
* shorten pref tab names; make log-alert clickable
* format_backtrace: don\'t try to use resources as strings
* add UserHelper::find_user_by_login() and rewrite some user checks to invoke it instead of going through PDO
* authentication: make logins case-insensitive (force lowercase)
* fix warning in profile edit dialog (2)
* fix warning in profile edit dialog
* pref/prefs: fix warning when in non-default profile
* close_button: fix warning
* make feed/cat nested dropdowns a bit more readable
* fix 2 warnings in feed editor
* api: one more php8 warning
* pluginhost: a few more warnings and type hints
* api: pass hook object payload by reference
* api: fix some php8 warnings (4)
* api: fix some php8 warnings (3)
* make ARTICLE_KIND_ constants class members
* api: fix some php8 warnings (2)
* api: fix some php8 warnings
* rewrite some more hooks in classes/feeds
* rewrite some more hooks
* front page log checker: filter out idiotic GD warning
* login: fix profile warning
* opml: normalize class name
* pluginhost: add some type hints
* even more hooks
* db: add type hints
* more hooks, also add type hint for PluginHost::getInstance()
* some more hooks
* pluginhost: note hook function prototypes
* remove PHPMD.UnusedFormalParameter
* pluginhost: deny hook registration to plugins which lack relevant implementation methods
* fix hierarchy of authentication modules, make everything extend Auth_Base and implement hook_auth_user() for pluginhost
* log viewer: disable previous page on page 1
* api: rewrite a few more hooks
* rewrite a few more hooks
* move some old-style handlers to new callback ones
* prefs: fix user plugins shown by incorrect criteria
* pluginhost: rework run_hooks() to be shorter, add callback variant; implement exception handling for both
* Mon Feb 08 2021 mrueckertAATTsuse.de- Update to version 19.8~git625.20b56b5b2:
* pluginhost: catch errors while loading plugin source code
* pluginhost: catch fatal errors in plugin init
* af_psql_trgm: fix warning
* fix several warnings related to feed editor
* add phpstan dummy file
* dlg: fix unset param warning
* sanity checks: use better CLI detection, shorten most of the text
* revert jimIcon stuff
* oops, remove unneeded warnings
* jimIcon: hide GD warning
* public/subscribe: fix warnings
* bookmarklet: encode URL properly so special characters won\'t get lost
* fix even more warnings reported by phpstan
* fix some more warnings reported by phpstan
* fix several warnings reported by phpstan
* pref-users: css fixes
* error log: fix severity dropdown
* fix some warnings in prefs (filters, users)
* error log: make it more readable
* log viewer: show total pages
* af_redditimgur: don\'t try to load empty html; fix a warning in update debugger
* fix a few more warnings
* event log: add pagination
* check a few more php8 warnings
* _color_pack: define variable before using
* fix clean() for arrays and user plugin list
* more php8 fixes mostly related to login
* initial WIP for php8; bump php version requirement to 7.0
* add workaround for gulp4 not updating file timestamps on build
* Translated using Weblate (German)
* night theme: disable on-hover undimming
* night theme: dim images unless hovered over
* Wed Jan 27 2021 mrueckertAATTsuse.de- Update to version 19.8~git590.64f7ac0e7:
* dark theme: fix color of .dijitSplitterHover
* Update \'CONTRIBUTING.md\'
* update contributing.md due to gitea changes
* af_redditimgur: handle youtube /embed/ URLs
* feed debugger: wrap long lines
* af_redditimgur: add some last minute handling for generic preview media URLs provided in JSON
* af_redditimgur:
* draw a basic form for testurl() if no url is given
* only process specific JSON media files/child elements until something is found
* handle generic preview images for self posts (not link posts because link is handled afterwards)
* af_redditimgur: cleanup, rework to embed stuff from reddit-provided JSON first
* add a hack (Headlines.unpackVisible) to workaround against unpack observer sometimes missing articles
* af_redditimgur: add basic support for reddit galleries
* af_redditimgur: shorten href stuff
* Archive cleanup: - remove code to manually archive/unarchive articles - remove ttrss_archived_feeds/orig_feed_id handling - the whole thing was implemented for this data to be kept indefinitely; it doesn\'t make a lot of sense to deal with this stuff now that it is expired after one month anyway (same reasons as feed browser being removed - privacy) - remove \"originally from\"-related stuff because of the above - also remove unused remaining frontend/backend code related to feed browser (rip)
* remove CommonDialogs.feedBrowser()
* Select... dropdown: replace dijit Select with DropDownButton, simplify layout PluginHost: add HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM Headlines.onActionChanged: removed
* scored_oldest_first: update sort caption
* add plugins/scored_oldest_first
* remove show as feed from Select dropdown in main toolbar
* remove menu options to manually un/archive articles
* pluginhost: load_data: check schema last
* pluginhost: load plugin data automatically (also marks load_data method as private)
* pre: set white-space: pre-wrap to remove horizontal scrolling
* HOOK_ARTICLE_EXPORT_FEED: also pass owner_uid
* Translated using Weblate (Italian)
* af_psql_trgm:
* Include tags for HOOK_ARTICLE_EXPORT_FEED.
* Translated using Weblate (Chinese (Simplified))
* Update translation files
* rebase translations
* translations: rebase, add T_nsprintf
* feed editor: show purge interval correctly if FORCE_ARTICLE_PURGE is set
* auth_remote: use empty() instead of isset() while checking headers
* fix auth_remote broken by previous commit
* auth_remote: rewrite header checking to be more readable
* get_user_ip: remove REMOTEADDR for the time being
* use X-Real-IP headers if possible while authenticating
* af_redditimgur: also blacklist in-content links
* daemon: clarify some task-related messages
* event log: add severity filtering
* edit tags dialog: initialize autocomplete in onShow (instead of onLoad) because of xhr
* search dialog: populate current search values onShow instead of onLoad because the dialog is preloaded via xhr
* Translated using Weblate (Chinese (Simplified))
* Add support for HTTP_REMOTE_USER variable for user authentication
* BLACKLISTED_TAGS: use textarea for editing; normalize value when saving
* update_rss_feed: fix BLACKLISTED_TAGS not working properly, simplify tag-related code
* purge_feed: limit debugging to LOG_VERBOSE
* af_redditimgur: also rewrite in the API handler
* af_redditimgur: add option to rewrite reddit URLs to teddit.net
* Actually return the array of errors...
* redditimgur: blacklist github because it usually resolves to a huge profile photo of someone
* Switch from \'vsprintf\' to \'sprintf\' in another place.
* purge_feed: shorten one log message
* purge_feed: add more debugging output
* feed editor: properly show global purging interval as disabled
* purge_intervals global: set \'1 week old\' to mean 7 days instead of 5 (???)
* Use correct \'sprintf\' function and other minor fixes in Pref_Feeds.
* Remove duplicate block in \'classes/pref/filters.php\'.
* Fix some \'isset\' checks in \'classes/pref/prefs.php\'.
* Handle potential absence of a URL path in UrlHelper.
* Make \'ttrss_error_handler\' compatible w/ 8.
* Don\'t do deprecated \'libxml_disable_entity_loader(true)\' under PHP 8.
* Switch to \'get_error_types()\' to ensure availability in \'include/functions.php\'.
* Only do sanity checks for self URL if we can create a valid URL.
* Switch to recommended \'default_charset\' to fix \'gettext\' error.
* Address param order deprecation warning for \'af_redditimgur\'.
* Fix passing options to plugins in \'update.php\'.
* Mon Dec 14 2020 mrueckertAATTsuse.de- Update to version 19.8~git514.83962a856:
* feed debugger: allow setting log level to LOG_EXTENDED
* - move sphinx plugin to a separate repo - regenerate config checks without sphinx-related variables
* shorten_expanded: remove loading=lazy from images if enabled
* queryFeedHeadlines: - there should be no need for DISTINCT query when checking for first id - fix DISTINCT query part being undefined when browsing by tags - add query debugging for tags
* get_article_image: add support for ARTICLE_KIND_ALBUM
* setArticleTags: prevent duplicate tags being assigned if called twice editTagsDlg: prevent dialot from being submitted twice normalize_categories: filter out empty values that failed validation
* viewfeed debugger: open properly for categories
* queryFeedHeadlines: bring back DISTINCT for a limited set of columns
* get_article_image: return basic kind to which flavor image belongs
* viewfeed: reintroduce timestamps, fix debugging, fix some indents
* queryFeedHeadlines: properly define for a few more variables
* queryFeedHeadlines: make sure feed_check_qpart is always defined
* queryFeedHeadlines: no longer select DISTINCT headlines for performance reasons (this also removes _HEADLINES_QUERY_NO_DISTINCT)
* experimental: add optional _HEADLINES_QUERY_NO_DISTINCT to disable DISTINCT keyword in queryFeedHeadlines query
* add support for an override stylesheet which applies to all users
* feed editor: also show default value for purge interval
* feed editor: show actual value of default update interval
* don\'t select next unread feed when marking as read last week, etc.
* use more consistent margins for left toolbar icons
* prevent horizontal scrolling in filter editor dialog if rules are very long
* af_readability: allow appending to original summary instead of always replacing it, some minor code cleanup
* URLHelper: fix E_DEPRECATED error related to idn_to_ascii()
* allow audio to be sent to client from the cache
* Disable mobile Safari right-click menu on headlines.
* update jimIcon (https://github.com/jimparis/jimIcon/pull/4)
* Fix incorrect parenthesis placement in `count()`.
* Translated using Weblate (Polish)
* Translated using Weblate (Polish)
* Translated using Weblate (Polish)
* Translated using Weblate (Polish)
* Translated using Weblate (German)
* Translated using Weblate (Polish)
* Translated using Weblate (Dutch)
* Translated using Weblate (German)
* Revert \"fix HOOK_ARTICLE_RENDERED_CDM never being called\"
* Revert \"somewhat experimental: disable article packing/unpacking, render content immediately\"
* Wed Oct 21 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2652.8d75a542c:
* Translated using Weblate (Persian)
* mark feed as having an error if update task fails (and no last error is already stored for this feed)
* Translated using Weblate (French)
* Translated using Weblate (Chinese (Simplified))
* Translated using Weblate (Italian)
* Update translation files
* rebase translations
* Translated using Weblate (Italian)
* Ensure proxy_all setting is saved in database.
* fix HOOK_ARTICLE_RENDERED_CDM never being called
* somewhat experimental: disable article packing/unpacking, render content immediately
* Translated using Weblate (Persian)
* Translated using Weblate (Persian)
* Translated using Weblate (Ukrainian)
* Translated using Weblate (Persian)
* api: catchupfeed: allow passing \'mode\' (optional), bump api version
* when auto disabling feeds based on DAEMON_UNSUCCESSFUL_DAYS_LIMIT only consider feeds with recent attempts to update (to prevent clashes with not recently logged users, etc)
* hide uninteresting errors in several DOMDocument->loadHTML() invocations
* enable Farsi locale in the UI
* add DAEMON_UNSUCCESSFUL_DAYS_LIMIT tunable (defaults to 30 days)
* set ttrss_feeds.last_successful_update as needed
* Translated using Weblate (Persian)
* set session.cookie_lifetime to 0 initially instead of a rather useless min()
* updater: set --update-schema as optional-value
* housekeeping: add task to cleanup orphan feed icons
* Logger::log - allow specifying errno bump severity of PDO exception log messages to E_USER_WARNING
* exclude E_USER_NOTICE from recent events icon
* update_rss_feed: fallback to previous method if passthru() is not available
* validate url: feed urlencoded() URL to filter_var() only
* accept -1 as a valid exit code for per-feed update processes
* schema: add ttrss_feeds.last_successful_update
* allow updating database schema in batch mode
* don\'t mention last_updated in non-zero failure error message because that\'s not what it means
* improve logging for per-feed update task failures
* update_rss_feed: don\'t return as if failed on http 304
* update-feed: exit with non-zero exit code if update_rss_feed() failed daemon: log if per-feed update task terminated with non-zero exit code
* lock per-feed update processes based on feed ID to reduce possibilty of concurrent updates
* update individual feed in a separate process to prevent PHP fatal errors (for example, OOM) from stopping the entire batch this should also slightly increase memory budget for update processes
* Translated using Weblate (Persian)
* search_to_sql: use per-user default language instead of hardcoded english if isn\'t specified explicitly
* prev: add missing class
* move timestamp-related stuff to a separate class
* fix updater never scheduling feeds for update if they never been updated before while having default update interval set
* another hack for validation of URLs with invalid characters
* validate URLs: convert IDN to punycode before passing URL to filter_var()
* use self:: in some places to invoke static methods from the same class
* - don\'t fail on non-ascii characters when validating URLs - fix IDN hostnames not being converted properly
* router: only allow functions without required parameters as handler methods
* fix previous re: resolve_redirects
* remove a lot of stuff from global context (functions.php), add a few helper classes instead
* Translated using Weblate (French)
* Added translation using Weblate (Persian)
* clarify some URL validation-related error messages
* clarify some URL validation-related error messages
* update_rss_feed: log effective URL after fetching validate_url: treat scheme as case-insensitive
* resolve_redirects: fix previous
* resolve_redirects: only use three argument version of get_headers() on php 7.1+
* update URL pointing to version.json
* Remove `private` scope for class constants.
* add basic safe mode which doesn\'t load any user plugins
* - gettext: merge patch from Sunil Mohan Adapa which rewrites plural parser to not use eval() - fix typo in aforementioned patch which caused plurals to never load - update code again to newer PHP constructor syntax
* prevent source errors from crashing gulp watch
* add eslint to package.json
* add less to package.json
* validate_url: relax requirements for URLs, limit additional port/loopback filtering to fetch_file_contents()
* replace FALSE with false so that static analyzer shuts up about it
* rename gettext.inc to gettext.inc.php (cosmetic)
* auth_internal: cast OTP code to integer before trying to check it
* fetch_file_contents: validate effective URL (after redirects) without CURL
* fetch_file_contents: validate effective URL (after redirects) if using CURL
* don\'t try to update manually disabled feeds even if they haven\'t been updated before or are marked for a manual update
* add gulp task for less compilation
* add makefile for less to css compilation
* forgotpass: use type strict comparison for reset token
* don\'t try to call hash_equals() on unset user token
* use hash_equals() correctly
* fix several cases of Db class being invoked as wrong name (as DB)
* replace some plain http links with https
*
* use get_random_bytes() for CSRF token
* get_random_bytes: use PHP7 random_bytes() if it is available
* validate CSRF token using hash_equals
* auth_internal: use type-strict comparison when checking OTP code
* fix typo in previous
* fix OTP QR code not displayed because of CSRF token passed as a query parameter use type-strict comparison when validating CSRF token on the backend
* amend previous to 127/8 subnet
* fetch_file_contents: resolve requested hosts and check for possible loopback address
* build_url: also put query parameters and fragment in resulting URL rewrite_relative_url: simplify handling of relative URLs
* subscribe: allow pre-filling feed URL if passed via query string
* cached_url: block SVG images because of potential javascript inside
* pass CSRF token to opml import and feed icon replace dialogs
* fix default password nag dialog, load via xhr
* editFeed: only try to reload feed tree in preferences if its actually there
* comments link: load in new tab
* editarticletags: load dialog via XHR
* handler: default base csrf_ignore() to false
* backend handler: require CSRF, remove obsolete code
* public/logout: require valid CSRF token
* Feeds: load quickaddfeed and search dialogs via XHR w/ CSRF protection
* - backend: require CSRF token to be passed via POST - do not leak CSRF token via GET request in feed debugger - rework Article/redirect to use POST
* don\'t pass csrf token as a GET parameter to Article
* require CSRF token for Article/redirect
* - enable CSRF support earlier - remove rpc/sanityCheck from CSRF-excluded calls
* af_proxy_http: require separate token to access imgproxy
* rewrite_relative_url: validate resulting absolutized URLs
* validate_url: only allow safe ports (80, 443), disallow access to loopback
* validate_url: add clean()
* rename base64_img() to image_to_base64()
* af_proxy_http: never print received data directly, always redirect to cached_url cache/getUrl: basename() passed filename just in case
* cached_url: perform mimetype validation before possible HOOK_SEND_LOCAL_FILE hooks
* af_redditimgur: don\'t add embedded blank gif image for rewritten videos
* user preferences: forbid < and > characters when changing passwords (were silently stripped on save because of clean())
* public/subscribe: require valid CSRF token when validating the form
* remove csrf token from rpc method sanityCheck
* - fix multiple vulnerabilities in af_proxy_http - fix vulnerability in rewrite_relative_url() which prevented some URLs from being properly absolutized - fetch_file_contents: validate all URLs before requesting them - validate URLs: explicitly whitelist http and https scheme, forbid everything else - DiskCache/cached_url: only serve whitelisted content types (images, video) - simplify filename/URL handling code, remove and consolidate some less-used functions
* order_to_override_query: allow HOOK_HEADLINES_CUSTOM_SORT_OVERRIDE plugins to override built-in sorting
* Translated using Weblate (Czech)
* Translated using Weblate (Norwegian Bokmål)
* Translated using Weblate (Norwegian Bokmål)
* Translated using Weblate (Norwegian Bokmål)
* Translated using Weblate (Norwegian Bokmål)
* Sun Aug 30 2020 Marcus Rueckert - move apparmor profile to apparmor-profiles-nordisch (tt-rss-apparmor package)
* Sun Aug 30 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2524.67f02e2aa:
* properly return counters for labels with zero assigned articles refs https://community.tt-rss.org/t/label-counter-doesnt-update-when-count-goes-down-to-zero/3766
* Thu Aug 27 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2523.5497a137d:
* Silence php 7.2 error message generated in `session_set_cookie_params`.
* pluginhost: allow overriding default sort modes via HOOK_HEADLINES_CUSTOM_SORT_MAP etc
* move order_by to SQL override logic into a separate function
* Thu Aug 13 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2519.48be00577:
* instead of taking batch timestamp and score (?) into account, make oldest first sorting work consistently with newest first - i.e. rely on feed-provided timestamp
* OPML: export/import per-feed purge interval
* Thu Aug 13 2020 Marcus Rueckert - fix socket path
* Wed Aug 05 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2517.2b50aaed6:
* more int/string type mismatches on getCategories
* make sure all ints are casted (to int) on getCategories
* Update wiki and forums links in error message.
* Store FeedTree data in localStorage
* when exporting OPML via web UI, add user login to the filename
* prefs: show disabled filters properly on mysql
* prefs: show root of filter tree as enabled so it\'s not grayed out
* Properly check if OPML file was loaded during import.
* core: pass found enclosures to HOOK_ARTICLE_FILTER af_redditimgur: remove enclosures if we found something to embed because it\'s going to be a low-res thumbnail
* Fri Jun 19 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2503.6eb94f1e1:
* better support for image srcset attributes as discussed in https://community.tt-rss.org/t/problem-with-img-srcset/3519
* more eslint fixes
* eslint-related fixes; move a few things from global context to App
* fix various minor issues reported by eslint
* add eslintrc
* unify prefs/main App objects, remove fake classes, use single static App object instead
* same, but for preferences
* don\'t use declare() for static objects with no inheritance because apparently it\'s not actually needed by AMD
* Tue Jun 09 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2495.06cc6e3a2:
* move isCombinedMode to AppBase so we wouldn\'t crash in preferences
* Translated using Weblate (Dutch)
* Translated using Weblate (German)
* Translated using Weblate (German)
* Translated using Weblate (German)
* Translated using Weblate (German)
* Created hotkeys_force_top plugin
* add Headlines.default_force_previous, default_force_to_top
* only bind up/down in 3 panel mode
* Revert \"unbind up/down by default (use native scrolling for consistency with pgup/pgdn)\"
* unbind up/down by default (use native scrolling for consistency with pgup/pgdn)
* hide #toolbar-frame_splitter back again
* - RIP smooth scrolling and associated hacks - attempt to make Headlines.move() / Article.cdmMoveToId() behave a bit more intuitively
* when removing favicon, reset its auto-refresh timer
* Headlines.move: add params.force_previous to always move to previous article in CDM
* Headlines.move: use requestAnimationFrame in CDM :(
* Headlines.move: when going back to top of active article, use a smarter (?) offset calculation
* calculate_article_hash: don\'t die() on previous, woops
* calculate_article_hash: ignore some useless or read-only fields (i.e. GUID) when calculating hash
* rename Headlines.correctHeadlinesOffset() to scrollToArticleId() invoke it in Article.view() instead of all over the place
* Headlines.move: maybe glitch less when moving back to top, etc
*
* store UID in article hashed GUID separately so it could be migrated cleanly to a different instance
* store resulting GUID as a JSON object so it could be extended easier if needed
* Use more specific definitions for applying `stuck` effects.
* implement keyboard-related changes discussed in https://community.tt-rss.org/t/changing-the-amount-of-scroll-by-arrow-key/3452/7
* Keep header above iframes in CDM.
* Make iframes size responsively.
* only enable unpack observer in expanded mode
* add --opml-export to update.php
* use intersection observer to unpack visible articles, remove Headlines.unpackVisible()
* remove floating title, use position: sticky for cdm headers instead
* DiskCache: append fake file extension when sending cached files based on mime type to make saving files easier
* Article.cdmMoveToId: don\'t crash if params is not given
* sanitize: forbid \"allow\" attribute CSS: remove auto hyphens stuff, remove iframe width clipping to 98% because they get squished
* rename cdmScrollToId to cdmMoveToId prevent smooth scrolling when going directly to an article
* add hotkey \"\\\" to cancel current search
* Translated using Weblate (Italian)
* Translated using Weblate (Chinese (Simplified))
* Fri May 08 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2454.c8243b03c:
* Allow setting Insert (45) and Delete (46) as hotkeys These are not reported via keypress either, so handle them via keydown.
* DiskCache: properly deal with srcset attributes
* sanitize: simplify initial attribute processing
* sanitize: remove srcset plain-http hack, globally disallow width and height attributes for all elements
* sanitize: handle picture[AATTsrcset] elements properly, i.e. rewrite relative URLs
* remove unneeded var_dump()
*
* add HOOK_ENCLOSURE_IMPORTED
* pass feed id to HOOK_FEED_PARSED
* More fixes when installer generates config file.
* During install, HTML encode POST data for forms.
* Escape user-defined values during installation.
* Sat Apr 18 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2438.0d467973d:
* Article.pack: dispose of unpacked content properly
* Headlines.renderAgain: scroll instantly to active article when going back to combined mode on the fly
* in combined non-expanded mode, pack headline rows as they are unfocused to save RAM
* Fri Apr 10 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2435.afaac95d8:
* if comment URL is not specified but comment count is non-zero, show comments prompt leading to the article
* search: add support for label:XXX search keyword Labels: enforce case-insensitive lookups when creating/looking for labels
* remove atom-to-html XSLT
* Fix documentation for _noexpand commands
* Mon Mar 16 2020 mrueckertAATTsuse.de- Update to version 1.15.3~git2429.61be0b215:
* minitemplator->writeString: print always returns 1 in PHP
* minitemplator: fix deprecations for PHP 7.4
* allow overriding built-in templates via templates.local
* add support for video[AATTsrc] in media cache
* actually download
 
ICM