1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
import { AxiosResponse } from 'axios'
import axios from '@nextcloud/axios'
import { API_ROUTES } from '../types/ApiRoutes'
export enum FEED_ORDER {
OLDEST = 1,
NEWEST = 0,
DEFAULT = 2,
}
export enum FEED_UPDATE_MODE {
IGNORE = 1,
UNREAD = 0,
}
export class FeedService {
/**
* Retrieves all Feed info from the Nextcloud News backend
*
* @return {AxiosResponse} Feed info stored in array property data.feeds
*/
static fetchAllFeeds(): Promise<AxiosResponse> {
return axios.get(API_ROUTES.FEED)
}
/**
* Attempts to add a feed to the Nextcloud News backend
* NOTE: this can fail if feed URL is not resolvable
*
* @param param0 Data for the feed
* @param param0.url {String} url of the feed to add
* @param param0.folderId {number} id number of folder to add feed to
* @param param0.user {String} http auth username required for accessing feed
* @param param0.password {String} http auth password required for accessing feed
* @return {AxiosResponse} Feed info stored in data.feeds[0] property
*/
static addFeed({ url, folderId, user, password }: { url: string; folderId: number; user?: string; password?: string }): Promise<AxiosResponse> {
return axios.post(API_ROUTES.FEED, {
url,
parentFolderId: folderId,
title: null, // TODO: let user define feed title on create?
user: user || null,
password: password || null,
fullDiscover: undefined, // TODO: autodiscover?
})
}
/**
* Marks all items in feed, started with highestReadId
*
* @param param0 Data for the feed
* @param param0.feedId {Number} ID number of feed to mark items as read
* @param param0.highestItemId {Number} ID number of the (most recent?) feed item to mark as read (all older items will be marked as read)
* @return {AxiosResponse} Updated feed info (unreadCount = 0) stored in data.feeds[0] property
*/
static markRead({ feedId, highestItemId }: { feedId: number, highestItemId: number }): Promise<AxiosResponse> {
return axios.post(API_ROUTES.FEED + `/${feedId}/read`, {
highestItemId,
})
}
/**
* Update a feeds properties
*
* @param param0 Data for the feed
* @param param0.feedId {Number} ID number of feed to update
* @param param0.pinned {Boolean} should be pinned (true) or not pinned (flse)
* @param param0.ordering {FEED_ORDER} sets feed order (0 = NEWEST, 1 = OLDEST, 2 = DEFAULT)
* @param param0.fullTextEnabled {Boolean} should be full text be enabled (true) or not (flse)
* @param param0.updateMode {FEED_UPDATE_MODE} sets updateMode (0 = UNREAD, 1 = IGNORE)
* @param param0.title {String} title of feed to display
* @return {AxiosResponse} Null value is returned on success
*/
static updateFeed({ feedId, pinned, ordering, fullTextEnabled, updateMode, title }: { feedId: number, pinned?: boolean, ordering?: FEED_ORDER, fullTextEnabled?: boolean, updateMode?: FEED_UPDATE_MODE, title?: string }): Promise<AxiosResponse> {
return axios.patch(API_ROUTES.FEED + `/${feedId}`, {
pinned,
ordering,
fullTextEnabled,
updateMode,
title,
})
}
/**
* Deletes a feed
*
* @param param0 Data for the feed
* @param param0.feedId {Number} ID number of feed to delete
* @return {AxiosResponse} Null value is returned on success
*/
static deleteFeed({ feedId }: { feedId: number }): Promise<AxiosResponse> {
return axios.delete(API_ROUTES.FEED + `/${feedId}`)
}
}
|