aboutsummaryrefslogtreecommitdiff
path: root/app/Models
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2024-12-15 12:34:18 +0100
committerGravatar GitHub <noreply@github.com> 2024-12-15 12:34:18 +0100
commit6b14a743ccfe5c14e15acac858c0906f4fccdf67 (patch)
tree0a464e2cd74e2ca6a2cdcb0161a2c100c596acbc /app/Models
parent066d92be3216cd5d3427072cbc410c19bf53f400 (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.php28
-rw-r--r--app/Models/Entry.php4
-rw-r--r--app/Models/EntryDAO.php35
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) {