-
-
Notifications
You must be signed in to change notification settings - Fork 206
/
komga-books.service.ts
149 lines (135 loc) · 4.28 KB
/
komga-books.service.ts
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import { AxiosInstance } from 'axios'
const qs = require('qs')
const API_BOOKS = '/api/v1/books'
export default class KomgaBooksService {
private http: AxiosInstance;
constructor (http: AxiosInstance) {
this.http = http
}
async getBooks (libraryId?: number, pageRequest?: PageRequest, search?: string, mediaStatus?: string[], readStatus?: string[]): Promise<Page<BookDto>> {
try {
const params = { ...pageRequest } as any
if (libraryId) {
params.library_id = libraryId
}
if (search) {
params.search = search
}
if (mediaStatus) {
params.media_status = mediaStatus
}
if (readStatus) {
params.read_status = readStatus
}
return (await this.http.get(API_BOOKS, {
params: params,
paramsSerializer: params => qs.stringify(params, { indices: false }),
})).data
} catch (e) {
let msg = 'An error occurred while trying to retrieve books'
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async getBook (bookId: number): Promise<BookDto> {
try {
return (await this.http.get(`${API_BOOKS}/${bookId}`)).data
} catch (e) {
let msg = 'An error occurred while trying to retrieve book'
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async getBookSiblingNext (bookId: number): Promise<BookDto> {
try {
return (await this.http.get(`${API_BOOKS}/${bookId}/next`)).data
} catch (e) {
let msg = 'An error occurred while trying to retrieve book'
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async getBookSiblingPrevious (bookId: number): Promise<BookDto> {
try {
return (await this.http.get(`${API_BOOKS}/${bookId}/previous`)).data
} catch (e) {
let msg = 'An error occurred while trying to retrieve book'
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async getBookPages (bookId: number): Promise<PageDto[]> {
try {
return (await this.http.get(`${API_BOOKS}/${bookId}/pages`)).data
} catch (e) {
let msg = 'An error occurred while trying to retrieve book pages'
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async analyzeBook (book: BookDto) {
try {
await this.http.post(`${API_BOOKS}/${book.id}/analyze`)
} catch (e) {
let msg = `An error occurred while trying to analyze book '${book.name}'`
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async refreshMetadata (book: BookDto) {
try {
await this.http.post(`${API_BOOKS}/${book.id}/metadata/refresh`)
} catch (e) {
let msg = `An error occurred while trying to refresh metadata for book '${book.name}'`
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async updateMetadata (bookId: number, metadata: BookMetadataUpdateDto): Promise<BookDto> {
try {
return (await this.http.patch(`${API_BOOKS}/${bookId}/metadata`, metadata)).data
} catch (e) {
let msg = `An error occurred while trying to update book metadata`
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async updateReadProgress (bookId: number, readProgress: ReadProgressUpdateDto) {
try {
await this.http.patch(`${API_BOOKS}/${bookId}/read-progress`, readProgress)
} catch (e) {
let msg = `An error occurred while trying to update read progress`
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
async deleteReadProgress (bookId: number) {
try {
await this.http.delete(`${API_BOOKS}/${bookId}/read-progress`)
} catch (e) {
let msg = `An error occurred while trying to delete read progress`
if (e.response.data.message) {
msg += `: ${e.response.data.message}`
}
throw new Error(msg)
}
}
}