| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
- // SPDX-License-Identifier: Apache-2.0
- package model // import "miniflux.app/v2/internal/model"
- import (
- "time"
- )
- // Entry statuses and default sorting order.
- const (
- EntryStatusUnread = "unread"
- EntryStatusRead = "read"
- EntryStatusRemoved = "removed"
- DefaultSortingOrder = "published_at"
- DefaultSortingDirection = "asc"
- )
- // Entry represents a feed item in the system.
- type Entry struct {
- ID int64 `json:"id"`
- UserID int64 `json:"user_id"`
- FeedID int64 `json:"feed_id"`
- Status string `json:"status"`
- Hash string `json:"hash"`
- Title string `json:"title"`
- URL string `json:"url"`
- CommentsURL string `json:"comments_url"`
- Date time.Time `json:"published_at"`
- CreatedAt time.Time `json:"created_at"`
- ChangedAt time.Time `json:"changed_at"`
- Content string `json:"content"`
- Author string `json:"author"`
- ShareCode string `json:"share_code"`
- Starred bool `json:"starred"`
- ReadingTime int `json:"reading_time"`
- Enclosures EnclosureList `json:"enclosures"`
- Feed *Feed `json:"feed,omitempty"`
- Tags []string `json:"tags"`
- }
- func NewEntry() *Entry {
- return &Entry{
- Enclosures: make(EnclosureList, 0),
- Tags: make([]string, 0),
- Feed: &Feed{
- Category: &Category{},
- Icon: &FeedIcon{},
- },
- }
- }
- // ShouldMarkAsReadOnView Return whether the entry should be marked as viewed considering all user settings and entry state.
- func (e *Entry) ShouldMarkAsReadOnView(user *User) bool {
- // Already read, no need to mark as read again. Removed entries are not marked as read
- if e.Status != EntryStatusUnread {
- return false
- }
- // There is an enclosure, markAsRead will happen at enclosure completion time, no need to mark as read on view
- if user.MarkReadOnMediaPlayerCompletion && e.Enclosures.ContainsAudioOrVideo() {
- return false
- }
- // The user wants to mark as read on view
- return user.MarkReadOnView
- }
- // Entries represents a list of entries.
- type Entries []*Entry
- // EntriesStatusUpdateRequest represents a request to change entries status.
- type EntriesStatusUpdateRequest struct {
- EntryIDs []int64 `json:"entry_ids"`
- Status string `json:"status"`
- }
- // EntryUpdateRequest represents a request to update an entry.
- type EntryUpdateRequest struct {
- Title *string `json:"title"`
- Content *string `json:"content"`
- }
- func (e *EntryUpdateRequest) Patch(entry *Entry) {
- if e.Title != nil && *e.Title != "" {
- entry.Title = *e.Title
- }
- if e.Content != nil && *e.Content != "" {
- entry.Content = *e.Content
- }
- }
|