OnlineLibrary

Форк
0
86 строк · 1.7 Кб
1
package library
2

3
import (
4
	"OnlineLibrary/internal/config"
5
	"OnlineLibrary/internal/player"
6

7
	"gitverse.ru/kvark128/dodp"
8
)
9

10
type ContentItem struct {
11
	library   *Library
12
	label     string
13
	resources []dodp.Resource
14
	metadata  *dodp.ContentMetadata
15
	conf      config.Book
16
}
17

18
func NewContentItem(library *Library, id string) *ContentItem {
19
	return NewContentItemWithLabel(library, id, "")
20
}
21

22
func NewContentItemWithLabel(library *Library, id, label string) *ContentItem {
23
	return &ContentItem{
24
		library: library,
25
		label:   label,
26
		conf:    library.service.RecentBooks.Book(id, player.DEFAULT_SPEED),
27
	}
28
}
29

30
func (ci *ContentItem) Name() (string, error) {
31
	md, err := ci.ContentMetadata()
32
	if err != nil {
33
		return "", err
34
	}
35
	return md.Metadata.Title, nil
36
}
37

38
func (ci *ContentItem) Label() string {
39
	return ci.label
40
}
41

42
func (ci *ContentItem) ID() string {
43
	return ci.conf.ID
44
}
45

46
func (ci *ContentItem) Resources() ([]dodp.Resource, error) {
47
	if ci.resources != nil {
48
		return ci.resources, nil
49
	}
50
	r, err := ci.library.GetContentResources(ci.conf.ID)
51
	if err != nil {
52
		return nil, err
53
	}
54
	ci.resources = r.Resources
55
	return ci.resources, nil
56
}
57

58
func (ci *ContentItem) ContentMetadata() (*dodp.ContentMetadata, error) {
59
	if ci.metadata != nil {
60
		return ci.metadata, nil
61
	}
62
	md, err := ci.library.GetContentMetadata(ci.conf.ID)
63
	if err != nil {
64
		return nil, err
65
	}
66
	ci.metadata = md
67
	return ci.metadata, nil
68
}
69

70
func (ci *ContentItem) Issue() error {
71
	_, err := ci.library.IssueContent(ci.conf.ID)
72
	return err
73
}
74

75
func (ci *ContentItem) Return() error {
76
	_, err := ci.library.ReturnContent(ci.conf.ID)
77
	return err
78
}
79

80
func (ci *ContentItem) Config() *config.Book {
81
	return &ci.conf
82
}
83

84
func (ci *ContentItem) SaveConfig() {
85
	ci.library.service.RecentBooks.SetBook(ci.conf)
86
}
87

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.