diff options
Diffstat (limited to 'client/core.go')
-rw-r--r-- | client/core.go | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/client/core.go b/client/core.go new file mode 100644 index 0000000..437af51 --- /dev/null +++ b/client/core.go @@ -0,0 +1,176 @@ +// Copyright 2018 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the MIT 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"` + 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"` +} + +// Users represents a list of users. +type Users []User + +// Category represents a category in the system. +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"` + Username string `json:"username"` + Password string `json:"password"` + Category *Category `json:"category,omitempty"` + Entries Entries `json:"entries,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"` + 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"` + Starred bool `json:"starred"` + Enclosures Enclosures `json:"enclosures,omitempty"` + Feed *Feed `json:"feed,omitempty"` + Category *Category `json:"category,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 +} + +// EntryResultSet represents the response when fetching entries. +type EntryResultSet struct { + Total int `json:"total"` + Entries Entries `json:"entries"` +} |