diff options
| author | 2024-12-15 12:34:18 +0100 | |
|---|---|---|
| committer | 2024-12-15 12:34:18 +0100 | |
| commit | 6b14a743ccfe5c14e15acac858c0906f4fccdf67 (patch) | |
| tree | 0a464e2cd74e2ca6a2cdcb0161a2c100c596acbc /app/Models | |
| parent | 066d92be3216cd5d3427072cbc410c19bf53f400 (diff) | |
New state: favorite or unread (#7088)
* New state: favorite or unread
https://github.com/FreshRSS/FreshRSS/discussions/7078#discussioncomment-11526292
* Experiment using this state by default
* Rework state
* Allow ANDS for typos
* Revert change unrelated to this PR
* Revert change of default state
* Add option *unread_or_favorite*
* Fix hide_read_feeds
* i18n: it
Co-authored-by: UserRoot-Luca <55756898+UserRoot-Luca@users.noreply.github.com>
* Update app/i18n/pl/conf.php
Co-authored-by: Zic <55097497+ZicPL@users.noreply.github.com>
* Update app/i18n/pl/conf.php
Co-authored-by: Zic <55097497+ZicPL@users.noreply.github.com>
* Fix i18n
* Fix auto_remove_article
* Fix mark_unread_enabled
---------
Co-authored-by: UserRoot-Luca <55756898+UserRoot-Luca@users.noreply.github.com>
Co-authored-by: Zic <55097497+ZicPL@users.noreply.github.com>
Diffstat (limited to 'app/Models')
| -rw-r--r-- | app/Models/Context.php | 28 | ||||
| -rw-r--r-- | app/Models/Entry.php | 4 | ||||
| -rw-r--r-- | app/Models/EntryDAO.php | 35 |
3 files changed, 39 insertions, 28 deletions
diff --git a/app/Models/Context.php b/app/Models/Context.php index f39fd0eca..eeb16f414 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -224,15 +224,15 @@ final class FreshRSS_Context { self::$state = Minz_Request::paramInt('state') ?: FreshRSS_Context::userConf()->default_state; $state_forced_by_user = Minz_Request::paramString('state') !== ''; - if (!$state_forced_by_user && !self::isStateEnabled(FreshRSS_Entry::STATE_READ)) { - if (FreshRSS_Context::userConf()->default_view === 'all') { - self::$state |= FreshRSS_Entry::STATE_ALL; + if (!$state_forced_by_user) { + if (FreshRSS_Context::userConf()->show_fav_unread && (self::isCurrentGet('s') || self::isCurrentGet('T') || self::isTag())) { + self::$state = FreshRSS_Entry::STATE_NOT_READ | FreshRSS_Entry::STATE_READ; + } elseif (FreshRSS_Context::userConf()->default_view === 'all') { + self::$state = FreshRSS_Entry::STATE_NOT_READ | FreshRSS_Entry::STATE_READ; + } elseif (FreshRSS_Context::userConf()->default_view === 'unread_or_favorite') { + self::$state = FreshRSS_Entry::STATE_OR_NOT_READ | FreshRSS_Entry::STATE_OR_FAVORITE; } elseif (FreshRSS_Context::userConf()->default_view === 'adaptive' && self::$get_unread <= 0) { - self::$state |= FreshRSS_Entry::STATE_READ; - } - if (FreshRSS_Context::userConf()->show_fav_unread && - (self::isCurrentGet('s') || self::isCurrentGet('T') || self::isTag())) { - self::$state |= FreshRSS_Entry::STATE_READ; + self::$state = FreshRSS_Entry::STATE_NOT_READ | FreshRSS_Entry::STATE_READ; } } @@ -553,16 +553,8 @@ final class FreshRSS_Context { * - the "unread" state is enable */ public static function isAutoRemoveAvailable(): bool { - if (!FreshRSS_Context::userConf()->auto_remove_article) { - return false; - } - if (self::isStateEnabled(FreshRSS_Entry::STATE_READ)) { - return false; - } - if (!self::isStateEnabled(FreshRSS_Entry::STATE_NOT_READ)) { - return false; - } - return true; + return FreshRSS_Context::userConf()->auto_remove_article && !self::isStateEnabled(FreshRSS_Entry::STATE_READ) && + (self::isStateEnabled(FreshRSS_Entry::STATE_NOT_READ) || self::isStateEnabled(FreshRSS_Entry::STATE_OR_NOT_READ)); } /** diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 47d244bee..36ed11b40 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -9,6 +9,10 @@ class FreshRSS_Entry extends Minz_Model { public const STATE_ALL = 3; public const STATE_FAVORITE = 4; public const STATE_NOT_FAVORITE = 8; + public const STATE_ANDS = self::STATE_READ | self::STATE_NOT_READ | self::STATE_FAVORITE | self::STATE_NOT_FAVORITE; + public const STATE_OR_NOT_READ = 32; + public const STATE_OR_FAVORITE = 64; + public const STATE_ORS = self::STATE_OR_NOT_READ | self::STATE_OR_FAVORITE; /** @var numeric-string */ private string $id = '0'; diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 23874a8e1..f9bf57220 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -1112,19 +1112,34 @@ SQL; string $order = 'DESC', string $firstId = '', int $date_min = 0): array { $search = ' '; $values = []; - if ($state & FreshRSS_Entry::STATE_NOT_READ) { - if (!($state & FreshRSS_Entry::STATE_READ)) { - $search .= 'AND ' . $alias . 'is_read=0 '; + if ($state & FreshRSS_Entry::STATE_ANDS) { + if ($state & FreshRSS_Entry::STATE_NOT_READ) { + if (!($state & FreshRSS_Entry::STATE_READ)) { + $search .= 'AND (' . $alias . 'is_read=0) '; + } + } elseif ($state & FreshRSS_Entry::STATE_READ) { + $search .= 'AND (' . $alias . 'is_read=1) '; + } + if ($state & FreshRSS_Entry::STATE_FAVORITE) { + if (!($state & FreshRSS_Entry::STATE_NOT_FAVORITE)) { + $search .= 'AND (' . $alias . 'is_favorite=1) '; + } + } elseif ($state & FreshRSS_Entry::STATE_NOT_FAVORITE) { + $search .= 'AND (' . $alias . 'is_favorite=0) '; } - } elseif ($state & FreshRSS_Entry::STATE_READ) { - $search .= 'AND ' . $alias . 'is_read=1 '; } - if ($state & FreshRSS_Entry::STATE_FAVORITE) { - if (!($state & FreshRSS_Entry::STATE_NOT_FAVORITE)) { - $search .= 'AND ' . $alias . 'is_favorite=1 '; + if ($state & FreshRSS_Entry::STATE_ORS) { + if (trim($search) === '') { + $search = 'AND (1=0) '; + } + if ($state & FreshRSS_Entry::STATE_OR_NOT_READ) { + $search = rtrim($search, ') '); + $search .= ' OR ' . $alias . 'is_read=0) '; + } + if ($state & FreshRSS_Entry::STATE_OR_FAVORITE) { + $search = rtrim($search, ') '); + $search .= ' OR ' . $alias . 'is_favorite=1) '; } - } elseif ($state & FreshRSS_Entry::STATE_NOT_FAVORITE) { - $search .= 'AND ' . $alias . 'is_favorite=0 '; } switch ($order) { |
