Minimalist and opinionated feed reader https://miniflux.app/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
5.5 KiB
182 lines
5.5 KiB
// Copyright 2018 Frédéric Guillot. All rights reserved. |
|
// Use of this source code is governed by the Apache 2.0 |
|
// license that can be found in the LICENSE file. |
|
|
|
package client // import "miniflux.app/client" |
|
|
|
import ( |
|
"fmt" |
|
"time" |
|
) |
|
|
|
// Entry statuses. |
|
const ( |
|
EntryStatusUnread = "unread" |
|
EntryStatusRead = "read" |
|
EntryStatusRemoved = "removed" |
|
) |
|
|
|
// User represents a user in the system. |
|
type User struct { |
|
ID int64 `json:"id"` |
|
Username string `json:"username"` |
|
Password string `json:"password,omitempty"` |
|
IsAdmin bool `json:"is_admin"` |
|
Theme string `json:"theme"` |
|
Language string `json:"language"` |
|
Timezone string `json:"timezone"` |
|
EntryDirection string `json:"entry_sorting_direction"` |
|
EntriesPerPage int `json:"entries_per_page"` |
|
LastLoginAt *time.Time `json:"last_login_at"` |
|
Extra map[string]string `json:"extra"` |
|
} |
|
|
|
func (u User) String() string { |
|
return fmt.Sprintf("#%d - %s (admin=%v)", u.ID, u.Username, u.IsAdmin) |
|
} |
|
|
|
// UserModification is used to update a user. |
|
type UserModification struct { |
|
Username *string `json:"username"` |
|
Password *string `json:"password"` |
|
IsAdmin *bool `json:"is_admin"` |
|
Theme *string `json:"theme"` |
|
Language *string `json:"language"` |
|
Timezone *string `json:"timezone"` |
|
EntryDirection *string `json:"entry_sorting_direction"` |
|
EntriesPerPage *int `json:"entries_per_page"` |
|
} |
|
|
|
// Users represents a list of users. |
|
type Users []User |
|
|
|
// Category represents a feed category. |
|
type Category struct { |
|
ID int64 `json:"id,omitempty"` |
|
Title string `json:"title,omitempty"` |
|
UserID int64 `json:"user_id,omitempty"` |
|
} |
|
|
|
func (c Category) String() string { |
|
return fmt.Sprintf("#%d %s", c.ID, c.Title) |
|
} |
|
|
|
// Categories represents a list of categories. |
|
type Categories []*Category |
|
|
|
// Subscription represents a feed subscription. |
|
type Subscription struct { |
|
Title string `json:"title"` |
|
URL string `json:"url"` |
|
Type string `json:"type"` |
|
} |
|
|
|
func (s Subscription) String() string { |
|
return fmt.Sprintf(`Title="%s", URL="%s", Type="%s"`, s.Title, s.URL, s.Type) |
|
} |
|
|
|
// Subscriptions represents a list of subscriptions. |
|
type Subscriptions []*Subscription |
|
|
|
// Feed represents a Miniflux feed. |
|
type Feed struct { |
|
ID int64 `json:"id"` |
|
UserID int64 `json:"user_id"` |
|
FeedURL string `json:"feed_url"` |
|
SiteURL string `json:"site_url"` |
|
Title string `json:"title"` |
|
CheckedAt time.Time `json:"checked_at,omitempty"` |
|
EtagHeader string `json:"etag_header,omitempty"` |
|
LastModifiedHeader string `json:"last_modified_header,omitempty"` |
|
ParsingErrorMsg string `json:"parsing_error_message,omitempty"` |
|
ParsingErrorCount int `json:"parsing_error_count,omitempty"` |
|
ScraperRules string `json:"scraper_rules"` |
|
RewriteRules string `json:"rewrite_rules"` |
|
Crawler bool `json:"crawler"` |
|
UserAgent string `json:"user_agent"` |
|
Username string `json:"username"` |
|
Password string `json:"password"` |
|
Category *Category `json:"category,omitempty"` |
|
} |
|
|
|
// FeedModification represents changes for a feed. |
|
type FeedModification struct { |
|
FeedURL *string `json:"feed_url"` |
|
SiteURL *string `json:"site_url"` |
|
Title *string `json:"title"` |
|
ScraperRules *string `json:"scraper_rules"` |
|
RewriteRules *string `json:"rewrite_rules"` |
|
Crawler *bool `json:"crawler"` |
|
UserAgent *string `json:"user_agent"` |
|
Username *string `json:"username"` |
|
Password *string `json:"password"` |
|
CategoryID *int64 `json:"category_id"` |
|
} |
|
|
|
// FeedIcon represents the feed icon. |
|
type FeedIcon struct { |
|
ID int64 `json:"id"` |
|
MimeType string `json:"mime_type"` |
|
Data string `json:"data"` |
|
} |
|
|
|
// Feeds represents a list of feeds. |
|
type Feeds []*Feed |
|
|
|
// Entry represents a subscription 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"` |
|
Date time.Time `json:"published_at"` |
|
Content string `json:"content"` |
|
Author string `json:"author"` |
|
ShareCode string `json:"share_code"` |
|
Starred bool `json:"starred"` |
|
Enclosures Enclosures `json:"enclosures,omitempty"` |
|
Feed *Feed `json:"feed,omitempty"` |
|
} |
|
|
|
// Entries represents a list of entries. |
|
type Entries []*Entry |
|
|
|
// Enclosure represents an attachment. |
|
type Enclosure struct { |
|
ID int64 `json:"id"` |
|
UserID int64 `json:"user_id"` |
|
EntryID int64 `json:"entry_id"` |
|
URL string `json:"url"` |
|
MimeType string `json:"mime_type"` |
|
Size int `json:"size"` |
|
} |
|
|
|
// Enclosures represents a list of attachments. |
|
type Enclosures []*Enclosure |
|
|
|
// Filter is used to filter entries. |
|
type Filter struct { |
|
Status string |
|
Offset int |
|
Limit int |
|
Order string |
|
Direction string |
|
Starred bool |
|
Before int64 |
|
After int64 |
|
BeforeEntryID int64 |
|
AfterEntryID int64 |
|
Search string |
|
CategoryID int64 |
|
FeedID int64 |
|
Statuses []string |
|
} |
|
|
|
// EntryResultSet represents the response when fetching entries. |
|
type EntryResultSet struct { |
|
Total int `json:"total"` |
|
Entries Entries `json:"entries"` |
|
}
|
|
|