forked from Archives/Athou_commafeed
add a setting to mark entries of a feed as read after a number of days (#2041)
This commit is contained in:
@@ -30,6 +30,7 @@ export interface Subscription {
|
||||
filter?: string
|
||||
filterLegacy?: string
|
||||
pushNotificationsEnabled: boolean
|
||||
autoMarkAsReadAfterDays?: number
|
||||
}
|
||||
|
||||
export interface Category {
|
||||
@@ -112,6 +113,7 @@ export interface FeedModificationRequest {
|
||||
position?: number
|
||||
filter?: string
|
||||
pushNotificationsEnabled: boolean
|
||||
autoMarkAsReadAfterDays?: number
|
||||
}
|
||||
|
||||
export interface GetEntriesRequest {
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "هل أنت متأكد أنك تريد إلغاء الاشتراك من
|
||||
msgid "Asc"
|
||||
msgstr "تصاعدي"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "العودة"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "تاريخ الإنشاء"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
@@ -600,6 +608,10 @@ msgstr "وضع علامة كمقروء"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "وضع علامة كمقروءة حتى هنا"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "المقاييس"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Esteu segur que voleu cancel·lar la subscripció a <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr "Asc"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Enrere"
|
||||
@@ -282,6 +286,10 @@ msgstr "Fosc"
|
||||
msgid "Date created"
|
||||
msgstr "Data de creació"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
@@ -600,6 +608,10 @@ msgstr "Marca com a llegit"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Marca com a llegit fins aquí"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "mètriques"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Opravdu se chcete odhlásit z odběru <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Zpět"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Datum vytvoření"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Smazat"
|
||||
@@ -600,6 +608,10 @@ msgstr "Označit jako přečtené"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Označit jako přečtené až sem"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metriky"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Ydych chi'n siŵr eich bod am ddad-danysgrifio o <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Yn ôl"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Dyddiad creu"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Dileu"
|
||||
@@ -600,6 +608,10 @@ msgstr "Marciwch ei fod wedi'i ddarllen"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Marciwch fel y darllenwyd hyd yma"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "metrigau"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Er du sikker på, at du vil afmelde <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Tilbage"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Dato oprettet"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Slet"
|
||||
@@ -600,6 +608,10 @@ msgstr "Markér som læst"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Markér som læst indtil her"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr ""
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Sind Sie sicher, dass Sie <0>{feedName}</0> abbestellen möchten?"
|
||||
msgid "Asc"
|
||||
msgstr "Aufsteigend"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
@@ -282,6 +286,10 @@ msgstr "Dunkel"
|
||||
msgid "Date created"
|
||||
msgstr "Erstellungsdatum"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
@@ -600,6 +608,10 @@ msgstr "Als gelesen markieren"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Bis hierhin als gelesen markieren"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metriken"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Are you sure you want to unsubscribe from <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr "Asc"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr "Auto-mark as read"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Back"
|
||||
@@ -282,6 +286,10 @@ msgstr "Dark"
|
||||
msgid "Date created"
|
||||
msgstr "Date created"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr "days"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Delete"
|
||||
@@ -600,6 +608,10 @@ msgstr "Mark as read"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Mark as read up to here"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metrics"
|
||||
|
||||
@@ -135,6 +135,10 @@ msgstr "¿Estás seguro de que deseas darte de baja de <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr "Asc"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Atrás"
|
||||
@@ -283,6 +287,10 @@ msgstr "Oscuro"
|
||||
msgid "Date created"
|
||||
msgstr "Fecha de creación"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Borrar"
|
||||
@@ -601,6 +609,10 @@ msgstr "Marcar como leído"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Marcar como leído hasta aquí"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Métricas"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "آیا مطمئن هستید که می خواهید اشتراک <0>{fee
|
||||
msgid "Asc"
|
||||
msgstr "صعودی"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "برگشت"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "تاریخ ایجاد"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "حذف کنید"
|
||||
@@ -600,6 +608,10 @@ msgstr "علامت گذاری به عنوان خوانده شده"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "تا اینجا به عنوان خوانده شده علامت بزنید"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "متریک"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Haluatko varmasti peruuttaa kohteen <0>{feedName}</0> tilauksen?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Takaisin"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Luontipäivämäärä"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Poista"
|
||||
@@ -600,6 +608,10 @@ msgstr "Merkitse luetuksi"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Merkitse luetuksi tähän asti"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr ""
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Êtes-vous sûr de vouloir vous désabonner de <0>{feedName}</0> ?"
|
||||
msgid "Asc"
|
||||
msgstr "Ascendant"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Retour"
|
||||
@@ -282,6 +286,10 @@ msgstr "Foncé"
|
||||
msgid "Date created"
|
||||
msgstr "Date de création"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Effacer"
|
||||
@@ -600,6 +608,10 @@ msgstr "Marquer comme lu"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Marquer comme lu jusqu'ici"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Métriques"
|
||||
|
||||
@@ -135,6 +135,10 @@ msgstr "Tes certeza de querer cancelar a subscrición a <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr "Asc"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Volver"
|
||||
@@ -283,6 +287,10 @@ msgstr "Escuro"
|
||||
msgid "Date created"
|
||||
msgstr "Data de creación"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
@@ -601,6 +609,10 @@ msgstr "Marcar como lido"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Marcar como lido ata aquí"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Estatísticas"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Biztosan le szeretne iratkozni a következőről: <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Vissza"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Létrehozás dátuma"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Törlés"
|
||||
@@ -600,6 +608,10 @@ msgstr "Megjelölés olvasottként"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Megjelölés idáig olvasottként"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr ""
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Yakin ingin berhenti berlangganan <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Kembali"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Tanggal dibuat"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Hapus"
|
||||
@@ -600,6 +608,10 @@ msgstr "Tandai sebagai telah dibaca"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Tandai sebagai telah dibaca sampai di sini"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metrik"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Sei sicuro di voler annullare l'iscrizione a <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Indietro"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Data di creazione"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
@@ -600,6 +608,10 @@ msgstr "Contrassegna come letto"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Contrassegna come letto fino a qui"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metriche"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "<0>{feedName}</0> の登録を解除してもよろしいですか?"
|
||||
msgid "Asc"
|
||||
msgstr "昇順"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "戻る"
|
||||
@@ -282,6 +286,10 @@ msgstr "ダーク"
|
||||
msgid "Date created"
|
||||
msgstr "作成日"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "削除"
|
||||
@@ -600,6 +608,10 @@ msgstr "既読にする"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "ここまで既読にする"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "メトリックス"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "<0>{feedName}</0> 구독을 취소하시겠습니까?"
|
||||
msgid "Asc"
|
||||
msgstr "오름차순"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "뒤로"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "생성 날짜"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "삭제"
|
||||
@@ -600,6 +608,10 @@ msgstr "읽은 상태로 표시"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "여기까지 읽은 것으로 표시"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "메트릭스"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Adakah anda pasti mahu berhenti melanggan <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Kembali"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Tarikh dibuat"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Padam"
|
||||
@@ -600,6 +608,10 @@ msgstr "Tandakan sebagai dibaca"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Tandai sebagai dibaca sehingga di sini"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metrik"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Er du sikker på at du vil avslutte abonnementet på <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Tilbake"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Dato opprettet"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Slett"
|
||||
@@ -600,6 +608,10 @@ msgstr "Merk som lest"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Merk som lest frem til her"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Beregninger"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Weet je zeker dat je je wilt afmelden voor <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Terug"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Datum gemaakt"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
@@ -600,6 +608,10 @@ msgstr "Markeren als gelezen"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Markeer als gelezen tot hier"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metrieken"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Er du sikker på at du vil avslutte abonnementet på <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Tilbake"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Dato opprettet"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Slett"
|
||||
@@ -600,6 +608,10 @@ msgstr "Merk som lest"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Merk som lest frem til her"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Beregninger"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Czy na pewno chcesz zrezygnować z subskrypcji <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Powrót"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Data utworzenia"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Usuń"
|
||||
@@ -600,6 +608,10 @@ msgstr "Oznacz jako przeczytane"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Oznacz jako przeczytane do tej pory"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metryki"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Tem certeza de que deseja cancelar a inscrição em <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr "Asc"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Voltar"
|
||||
@@ -282,6 +286,10 @@ msgstr "Escuro"
|
||||
msgid "Date created"
|
||||
msgstr "Data de criação"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
@@ -600,6 +608,10 @@ msgstr "Marcar como lido"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Marcar como lido até aqui"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Métricas"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Вы уверены, что хотите отказаться от по
|
||||
msgid "Asc"
|
||||
msgstr "По возрастанию"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Назад"
|
||||
@@ -282,6 +286,10 @@ msgstr "Темная"
|
||||
msgid "Date created"
|
||||
msgstr "Дата создания"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
@@ -600,6 +608,10 @@ msgstr "Отметить как прочитанное"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Отметить как прочитанное до этого места"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Метрики"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Naozaj chcete zrušiť odber kanála <0>{feedName}</0>?"
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Späť"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Dátum vytvorenia"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Vymazať"
|
||||
@@ -600,6 +608,10 @@ msgstr "Označiť ako prečítané"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Označiť ako prečítané až sem"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metriky"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "Är du säker på att du vill avsluta prenumerationen på <0>{feedName}<
|
||||
msgid "Asc"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Tillbaka"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Datum skapat"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
@@ -600,6 +608,10 @@ msgstr "Markera som läst"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Markera som läst hit"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Mätverk"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "<0>{feedName}</0> aboneliğinden çıkmak istediğinizden emin misiniz?"
|
||||
msgid "Asc"
|
||||
msgstr "Artan"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "Geri"
|
||||
@@ -282,6 +286,10 @@ msgstr ""
|
||||
msgid "Date created"
|
||||
msgstr "Oluşturulma tarihi"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "Sil"
|
||||
@@ -600,6 +608,10 @@ msgstr "Okundu olarak işaretle"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "Buraya kadar okundu olarak işaretle"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "Metrikler"
|
||||
|
||||
@@ -134,6 +134,10 @@ msgstr "您确定要退订 <0>{feedName}</0> 吗?"
|
||||
msgid "Asc"
|
||||
msgstr "升序"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Auto-mark as read"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Back"
|
||||
msgstr "返回"
|
||||
@@ -282,6 +286,10 @@ msgstr "暗黑"
|
||||
msgid "Date created"
|
||||
msgstr "创建日期"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "days"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
@@ -600,6 +608,10 @@ msgstr "标记为已读"
|
||||
msgid "Mark as read up to here"
|
||||
msgstr "标记为已读到这里"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Mark entries in this feed as read after this number of days. Leave empty to disable."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Metrics"
|
||||
msgstr "指标"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { msg } from "@lingui/core/macro"
|
||||
import { useLingui } from "@lingui/react"
|
||||
import { Trans } from "@lingui/react/macro"
|
||||
import {
|
||||
Anchor,
|
||||
@@ -38,6 +40,7 @@ export function FeedDetailsPage() {
|
||||
if (!id) throw new Error("id required")
|
||||
|
||||
const apiKey = useAppSelector(state => state.user.profile?.apiKey)
|
||||
const { _ } = useLingui()
|
||||
const dispatch = useAppDispatch()
|
||||
const query = useAsync(async () => await client.feed.get(id), [id])
|
||||
const feed = query.result?.data
|
||||
@@ -144,6 +147,14 @@ export function FeedDetailsPage() {
|
||||
<CategorySelect label={<Trans>Category</Trans>} {...form.getInputProps("categoryId")} clearable />
|
||||
<NumberInput label={<Trans>Position</Trans>} {...form.getInputProps("position")} required min={0} />
|
||||
<ReceivePushNotificationsChechbox {...form.getInputProps("pushNotificationsEnabled", { type: "checkbox" })} />
|
||||
<NumberInput
|
||||
label={<Trans>Auto-mark as read</Trans>}
|
||||
description={<Trans>Mark entries in this feed as read after this number of days. Leave empty to disable.</Trans>}
|
||||
suffix={` ${_(msg`days`)}`}
|
||||
{...form.getInputProps("autoMarkAsReadAfterDays")}
|
||||
min={1}
|
||||
max={3650}
|
||||
/>
|
||||
<Input.Wrapper
|
||||
label={<Trans>Filtering expression</Trans>}
|
||||
description={
|
||||
|
||||
@@ -18,15 +18,19 @@ import com.commafeed.backend.model.FeedEntry;
|
||||
import com.commafeed.backend.model.FeedEntryStatus;
|
||||
import com.commafeed.backend.model.FeedEntryTag;
|
||||
import com.commafeed.backend.model.FeedSubscription;
|
||||
import com.commafeed.backend.model.QFeed;
|
||||
import com.commafeed.backend.model.QFeedEntry;
|
||||
import com.commafeed.backend.model.QFeedEntryContent;
|
||||
import com.commafeed.backend.model.QFeedEntryStatus;
|
||||
import com.commafeed.backend.model.QFeedEntryTag;
|
||||
import com.commafeed.backend.model.QFeedSubscription;
|
||||
import com.commafeed.backend.model.User;
|
||||
import com.commafeed.backend.model.UserSettings.ReadingOrder;
|
||||
import com.commafeed.frontend.model.UnreadCount;
|
||||
import com.querydsl.core.BooleanBuilder;
|
||||
import com.querydsl.core.Tuple;
|
||||
import com.querydsl.core.types.dsl.Expressions;
|
||||
import com.querydsl.core.types.dsl.NumberExpression;
|
||||
import com.querydsl.jpa.impl.JPAQuery;
|
||||
|
||||
@Singleton
|
||||
@@ -34,8 +38,10 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
||||
|
||||
private static final QFeedEntryStatus STATUS = QFeedEntryStatus.feedEntryStatus;
|
||||
private static final QFeedEntry ENTRY = QFeedEntry.feedEntry;
|
||||
private static final QFeed FEED = QFeed.feed;
|
||||
private static final QFeedEntryContent CONTENT = QFeedEntryContent.feedEntryContent;
|
||||
private static final QFeedEntryTag TAG = QFeedEntryTag.feedEntryTag;
|
||||
private static final QFeedSubscription SUBSCRIPTION = QFeedSubscription.feedSubscription;
|
||||
|
||||
private final FeedEntryTagDAO feedEntryTagDAO;
|
||||
private final CommaFeedConfiguration config;
|
||||
@@ -232,4 +238,58 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
||||
return deleteQuery(STATUS).where(STATUS.id.in(ids)).execute();
|
||||
}
|
||||
|
||||
public long autoMarkAsRead(int limit) {
|
||||
Instant now = Instant.now();
|
||||
|
||||
BooleanBuilder where = new BooleanBuilder();
|
||||
where.and(SUBSCRIPTION.autoMarkAsReadAfterDays.isNotNull());
|
||||
where.and(SUBSCRIPTION.autoMarkAsReadAfterDays.gt(0));
|
||||
|
||||
NumberExpression<Integer> daysDiff = Expressions.numberTemplate(Integer.class, "TIMESTAMPDIFF(DAY, {0}, {1})", ENTRY.published,
|
||||
now);
|
||||
where.and(daysDiff.goe(SUBSCRIPTION.autoMarkAsReadAfterDays));
|
||||
|
||||
where.and(buildUnreadPredicate());
|
||||
|
||||
List<Tuple> tuples = query().select(ENTRY, STATUS, SUBSCRIPTION)
|
||||
.from(ENTRY)
|
||||
.join(ENTRY.feed, FEED)
|
||||
.join(SUBSCRIPTION)
|
||||
.on(SUBSCRIPTION.feed.eq(FEED))
|
||||
.leftJoin(ENTRY.statuses, STATUS)
|
||||
.on(STATUS.subscription.eq(SUBSCRIPTION))
|
||||
.where(where)
|
||||
.limit(limit)
|
||||
.fetch();
|
||||
|
||||
long updated = 0;
|
||||
|
||||
// Update existing statuses
|
||||
List<Long> statusIdsToUpdate = tuples.stream()
|
||||
.map(t -> t.get(STATUS))
|
||||
.filter(s -> s != null && s.getId() != null)
|
||||
.map(FeedEntryStatus::getId)
|
||||
.distinct()
|
||||
.toList();
|
||||
|
||||
if (!statusIdsToUpdate.isEmpty()) {
|
||||
updated += updateQuery(STATUS).where(STATUS.id.in(statusIdsToUpdate)).set(STATUS.read, true).execute();
|
||||
}
|
||||
|
||||
// Insert new statuses for entries without existing status
|
||||
for (Tuple tuple : tuples) {
|
||||
FeedEntryStatus status = tuple.get(STATUS);
|
||||
if (status == null || status.getId() == null) {
|
||||
FeedEntry entry = tuple.get(ENTRY);
|
||||
FeedSubscription sub = tuple.get(SUBSCRIPTION);
|
||||
FeedEntryStatus newStatus = new FeedEntryStatus(sub.getUser(), sub, entry);
|
||||
newStatus.setRead(true);
|
||||
persist(newStatus);
|
||||
updated++;
|
||||
}
|
||||
}
|
||||
|
||||
return updated;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -49,4 +49,7 @@ public class FeedSubscription extends AbstractModel {
|
||||
@Column(name = "push_notifications_enabled")
|
||||
private boolean pushNotificationsEnabled;
|
||||
|
||||
@Column(name = "auto_mark_as_read_after_days")
|
||||
private Integer autoMarkAsReadAfterDays;
|
||||
|
||||
}
|
||||
|
||||
@@ -133,4 +133,16 @@ public class DatabaseCleaningService {
|
||||
} while (deleted != 0);
|
||||
log.info("cleanup done: {} old read statuses deleted", total);
|
||||
}
|
||||
|
||||
public void autoMarkAsRead() {
|
||||
log.info("marking entries as read based on autoMarkAsReadAfterDays");
|
||||
long total = 0;
|
||||
long marked;
|
||||
do {
|
||||
marked = unitOfWork.call(() -> feedEntryStatusDAO.autoMarkAsRead(batchSize));
|
||||
total += marked;
|
||||
log.debug("marked {} entries as read", total);
|
||||
} while (marked != 0);
|
||||
log.info("cleanup done: marked {} entries as read", total);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.commafeed.backend.task;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import jakarta.inject.Singleton;
|
||||
|
||||
import com.commafeed.backend.service.db.DatabaseCleaningService;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Singleton
|
||||
public class AutoMarkAsReadTask extends ScheduledTask {
|
||||
|
||||
private final DatabaseCleaningService cleaner;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
cleaner.autoMarkAsRead();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getInitialDelay() {
|
||||
return 25;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getPeriod() {
|
||||
return 60;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimeUnit getTimeUnit() {
|
||||
return TimeUnit.MINUTES;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -68,6 +68,9 @@ public class Subscription implements Serializable {
|
||||
@Schema(description = "whether to send push notifications for new entries of this feed", required = true)
|
||||
private boolean pushNotificationsEnabled;
|
||||
|
||||
@Schema(description = "automatically mark entries as read after this many days (null to disable)")
|
||||
private Integer autoMarkAsReadAfterDays;
|
||||
|
||||
public static Subscription build(FeedSubscription subscription, UnreadCount unreadCount) {
|
||||
FeedCategory category = subscription.getCategory();
|
||||
Feed feed = subscription.getFeed();
|
||||
@@ -89,6 +92,7 @@ public class Subscription implements Serializable {
|
||||
sub.setFilter(subscription.getFilter());
|
||||
sub.setFilterLegacy(subscription.getFilterLegacy());
|
||||
sub.setPushNotificationsEnabled(subscription.isPushNotificationsEnabled());
|
||||
sub.setAutoMarkAsReadAfterDays(subscription.getAutoMarkAsReadAfterDays());
|
||||
return sub;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,4 +34,7 @@ public class FeedModificationRequest implements Serializable {
|
||||
@Schema(description = "whether to send push notifications for new entries of this feed")
|
||||
private boolean pushNotificationsEnabled;
|
||||
|
||||
@Schema(description = "automatically mark entries as read after this many days (null to disable)")
|
||||
private Integer autoMarkAsReadAfterDays;
|
||||
|
||||
}
|
||||
|
||||
@@ -437,6 +437,7 @@ public class FeedREST {
|
||||
}
|
||||
|
||||
subscription.setPushNotificationsEnabled(req.isPushNotificationsEnabled());
|
||||
subscription.setAutoMarkAsReadAfterDays(req.getAutoMarkAsReadAfterDays());
|
||||
|
||||
if (StringUtils.isNotBlank(req.getName())) {
|
||||
subscription.setTitle(req.getName());
|
||||
|
||||
@@ -32,5 +32,15 @@
|
||||
</addColumn>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
||||
<changeSet id="add-auto-mark-as-read-after-days" author="athou">
|
||||
<addColumn tableName="FEEDSUBSCRIPTIONS">
|
||||
<column name="auto_mark_as_read_after_days" type="INT">
|
||||
<constraints nullable="true" />
|
||||
</column>
|
||||
</addColumn>
|
||||
<createIndex indexName="feedsubscriptions_automark_index" tableName="FEEDSUBSCRIPTIONS">
|
||||
<column name="auto_mark_as_read_after_days" />
|
||||
</createIndex>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.commafeed.TestConstants;
|
||||
import com.commafeed.backend.service.db.DatabaseCleaningService;
|
||||
import com.commafeed.frontend.model.Entries;
|
||||
import com.commafeed.frontend.model.Entry;
|
||||
import com.commafeed.frontend.model.request.FeedModificationRequest;
|
||||
import com.commafeed.frontend.model.request.StarRequest;
|
||||
import com.commafeed.frontend.resource.CategoryREST;
|
||||
import com.commafeed.integration.BaseIT;
|
||||
@@ -182,4 +183,30 @@ class DatabaseCleaningIT extends BaseIT {
|
||||
Assertions.assertEquals(0, entriesAfter.getEntries().size());
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
class AutoMarkAsRead {
|
||||
@Test
|
||||
void entriesAreMarkedAsReadAfterSpecifiedDays() {
|
||||
// Subscribe to feed
|
||||
Long subscriptionId = subscribeAndWaitForEntries(getFeedUrl());
|
||||
|
||||
// verify we have 2 unread entries
|
||||
Entries entries = getFeedEntries(subscriptionId);
|
||||
Assertions.assertEquals(2, entries.getEntries().stream().filter(e -> !e.isRead()).count());
|
||||
|
||||
// set auto-mark as read
|
||||
FeedModificationRequest req = new FeedModificationRequest();
|
||||
req.setId(subscriptionId);
|
||||
req.setAutoMarkAsReadAfterDays(1);
|
||||
RestAssured.given().body(req).contentType(ContentType.JSON).post("rest/feed/modify").then().statusCode(200);
|
||||
|
||||
// run auto-mark as read
|
||||
databaseCleaningService.autoMarkAsRead();
|
||||
|
||||
// verify all entries are now read
|
||||
entries = getFeedEntries(subscriptionId);
|
||||
Assertions.assertEquals(0, entries.getEntries().stream().filter(e -> !e.isRead()).count());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user