OnlineLibrary
86 строк · 1.7 Кб
1package library
2
3import (
4"OnlineLibrary/internal/config"
5"OnlineLibrary/internal/player"
6
7"gitverse.ru/kvark128/dodp"
8)
9
10type ContentItem struct {
11library *Library
12label string
13resources []dodp.Resource
14metadata *dodp.ContentMetadata
15conf config.Book
16}
17
18func NewContentItem(library *Library, id string) *ContentItem {
19return NewContentItemWithLabel(library, id, "")
20}
21
22func NewContentItemWithLabel(library *Library, id, label string) *ContentItem {
23return &ContentItem{
24library: library,
25label: label,
26conf: library.service.RecentBooks.Book(id, player.DEFAULT_SPEED),
27}
28}
29
30func (ci *ContentItem) Name() (string, error) {
31md, err := ci.ContentMetadata()
32if err != nil {
33return "", err
34}
35return md.Metadata.Title, nil
36}
37
38func (ci *ContentItem) Label() string {
39return ci.label
40}
41
42func (ci *ContentItem) ID() string {
43return ci.conf.ID
44}
45
46func (ci *ContentItem) Resources() ([]dodp.Resource, error) {
47if ci.resources != nil {
48return ci.resources, nil
49}
50r, err := ci.library.GetContentResources(ci.conf.ID)
51if err != nil {
52return nil, err
53}
54ci.resources = r.Resources
55return ci.resources, nil
56}
57
58func (ci *ContentItem) ContentMetadata() (*dodp.ContentMetadata, error) {
59if ci.metadata != nil {
60return ci.metadata, nil
61}
62md, err := ci.library.GetContentMetadata(ci.conf.ID)
63if err != nil {
64return nil, err
65}
66ci.metadata = md
67return ci.metadata, nil
68}
69
70func (ci *ContentItem) Issue() error {
71_, err := ci.library.IssueContent(ci.conf.ID)
72return err
73}
74
75func (ci *ContentItem) Return() error {
76_, err := ci.library.ReturnContent(ci.conf.ID)
77return err
78}
79
80func (ci *ContentItem) Config() *config.Book {
81return &ci.conf
82}
83
84func (ci *ContentItem) SaveConfig() {
85ci.library.service.RecentBooks.SetBook(ci.conf)
86}
87