model

package
v1.2.25 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ClearBookNotExist added in v1.1.0

func ClearBookNotExist()

ClearBookNotExist 检查内存中的书的源文件是否存在,不存在就删掉

func ClearBookWhenStoreUrlNotExist added in v1.1.7

func ClearBookWhenStoreUrlNotExist(nowStoreUrls []string)

ClearBookWhenStoreUrlNotExist 清理书库中不存在的书籍源对应的书籍,传入的是当前存在的书籍源

func GenerateBookGroup added in v1.2.7

func GenerateBookGroup()

GenerateBookGroup 重新生成书组

func GetAllBooksNumber added in v1.1.0

func GetAllBooksNumber() int

GetAllBooksNumber 获取书籍总数,不包括 BookGroup 类型

Types

type Book

type Book struct {
	BookInfo  // 嵌入 BookInfo 结构体
	BookMarks // 书签信息
	PageInfos // 书籍内所有页面的信息
}

Book 定义书籍结构

func NewBook

func NewBook(bookPath string, modified time.Time, fileSize int64, storePath string, depth int, bookType SupportFileType) (*Book, error)

NewBook 初始化 Book,设置文件路径、书名、BookID 等

func (*Book) GetPageCount

func (b *Book) GetPageCount() int

GetPageCount 获取页数

func (*Book) GetStoreID added in v1.1.0

func (b *Book) GetStoreID() string

GetStoreID 获取编码后的书库ID,StoreID是书库URL路径的 base62 编码

func (*Book) GuestCover

func (b *Book) GuestCover() (cover PageInfo)

GuestCover 猜测书籍的封面

func (*Book) ScanAllImage

func (b *Book) ScanAllImage()

ScanAllImage 服务器端分析分辨率、漫画单双页,只适合已解压文件

func (*Book) ScanAllImageGo

func (b *Book) ScanAllImageGo()

ScanAllImageGo 并发分析图片

func (*Book) SortPages

func (b *Book) SortPages(s string)

SortPages 对页面进行排序

func (*Book) SortPagesByImageList

func (b *Book) SortPagesByImageList(imageList []string)

SortPagesByImageList 根据给定的文件列表排序页面(用于 EPUB)

type BookInfo

type BookInfo struct {
	// ===== 基本标识 =====
	BookID string          `json:"id"`     // 根据 BookPath 生成的唯一 ID
	Title  string          `json:"title"`  // 书名
	Author string          `json:"author"` // 作者
	Type   SupportFileType `json:"type"`   // 书籍类型

	// ===== 文件路径 =====
	BookPath     string `json:"book_path"`     // 文件绝对路径,JSON 不解析
	ParentFolder string `json:"parent_folder"` // 父文件夹
	StoreUrl     string `json:"store_url"`     // 在哪个子书库

	// ===== 远程存储 =====
	IsRemote  bool   `json:"is_remote"`  // 是否为远程书籍(WebDAV 等)
	RemoteURL string `json:"remote_url"` // 远程存储的基础 URL

	// ===== 文件属性 =====
	FileSize  int64     `json:"file_size"`     // 文件大小
	Modified  time.Time `json:"modified_time"` // 修改时间
	PageCount int       `json:"page_count"`    // 总页数
	Cover     PageInfo  `json:"cover"`         // 封面图

	// ===== 出版信息 =====
	ISBN        string `json:"isbn"`         // ISBN
	Press       string `json:"press"`        // 出版社
	PublishedAt string `json:"published_at"` // 出版日期

	// ===== 书组相关 =====
	ChildBooksNum int      `json:"child_books_num"` // 子书籍数量,只统计直接的子书籍
	ChildBooksID  []string `json:"child_books_id"`  // 子书籍 BookID
	Depth         int      `json:"depth"`           // 书籍深度

	// ===== 压缩包相关 =====
	ExtractPath     string `json:"extract_path"`      // 解压路径,7z 用,JSON 不解析
	ExtractNum      int    `json:"extract_num"`       // 文件解压数
	NonUTF8Zip      bool   `json:"non_utf_8_zip"`     // 是否为特殊编码 zip
	ZipTextEncoding string `json:"zip_text_encoding"` // zip 文件编码

	// ===== 状态标记 =====
	InitComplete bool `json:"init_complete"` // 是否初始化完成(todo:7z解压)
	BookComplete bool `json:"book_complete"` // 书籍是否阅读完成
	Deleted      bool `json:"deleted"`       // 源文件是否已删除

	// ===== 元数据 =====
	CreatedByVersion string `json:"created_by_version"` // 生成数据的 Comigo 版本
}

BookInfo 与 Book 唯一的区别是没有 AllPageInfo,而是封面图 URL,减小 JSON 文件的大小

func (*BookInfo) GetAllChildBooksNum added in v1.1.0

func (b *BookInfo) GetAllChildBooksNum() int

GetAllChildBooksNum 递归获取所有子书籍的数量

func (*BookInfo) GetCover

func (b *BookInfo) GetCover() PageInfo

GetCover 获取封面

func (*BookInfo) ShortName

func (b *BookInfo) ShortName() string

ShortName 返回简短的标题(文件名)

type BookInfos added in v1.1.0

type BookInfos []BookInfo

BookInfos 表示 BookInfo 的列表,排序用 在 Go 中,方法接收器必须是命名类型,这是为了确保类型具有一个唯一的标识和类型身份,从而可以在包级作用域中明确地定义和调用这些方法。 使用类型别名 BookInfos []BookInfo 来提供排序方法,这样可以确保 BookInfos 具有明确的类型身份,并且可以在包级作用域中使用和扩展。

func (*BookInfos) SortBooks added in v1.1.0

func (s *BookInfos) SortBooks(sortBy string)

SortBooks 根据 sortBy 参数对 BookInfos 进行排序

type BookMark added in v1.1.0

type BookMark struct {
	Type        MarkType  `json:"mark_type"`     // 书签类型,auto 表示自动书签,user 表示用户书签
	BookID      string    `json:"book_id"`       // 书籍 ID
	BookStoreID string    `json:"book_store_id"` // 书籍所属书库 ID
	PageIndex   int       `json:"page_index"`    // 书签页码,从 0 开始,理论上不会超过 PageCount - 1 ,但是现实中可能会有
	Description string    `json:"description"`   // 用户添加的备注
	CreatedAt   time.Time `json:"created_at"`    // 创建时间
	UpdatedAt   time.Time `json:"updated_at"`    // 更新时间
}

func NewBookMark added in v1.1.0

func NewBookMark(markType MarkType, bookID string, bookStoreID string, pageIndex int, description string) *BookMark

type BookMarks added in v1.1.0

type BookMarks []BookMark

func (*BookMarks) GetLastReadPage added in v1.1.0

func (s *BookMarks) GetLastReadPage() int

func (*BookMarks) GetLastReadTime added in v1.1.5

func (s *BookMarks) GetLastReadTime() time.Time

func (*BookMarks) SortBookmarks added in v1.1.0

func (s *BookMarks) SortBookmarks(sortBy string)

SortBookmarks 根据 sortBy 参数对 BookInfos 进行排序

type BookinfoWithBookMark added in v1.1.8

type BookinfoWithBookMark struct {
	BookInfo BookInfo `json:"book_info"` // 书籍信息
	BookMark BookMark `json:"book_mark"` // 书签信息
}

type MarkType added in v1.1.0

type MarkType string
const (
	AutoMark MarkType = "auto"
	UserMark MarkType = "user"
)

type PageInfo added in v1.1.0

type PageInfo struct {
	Name       string    `json:"name"`     // 用于解压的压缩文件内文件路径,或图片名,为了适应特殊字符,经过一次转义
	Path       string    `json:"path"`     // 文件路径
	Size       int64     `json:"size"`     // 文件大小
	ModTime    time.Time `json:"mod_time"` // 修改时间
	Url        string    `json:"url"`      // 远程用户读取图片的URL,为了适应特殊字符,经过转义
	PageNum    int       `json:"page_num"` // 图片在原始文件中的页码位置,这个字段不解析。用来按照原始顺序排序
	Blurhash   string    `json:"-"`        // `json:"blurhash"` //blurhash占位符。扫描图片生成(tools.GetImageDataBlurHash)
	Height     int       `json:"-"`        // 暂时用不着 这个字段不解析`json:"height"`   //blurhash用,图片高
	Width      int       `json:"-"`        // 暂时用不着 这个字段不解析`json:"width"`    //blurhash用,图片宽
	ImgType    string    `json:"-"`        // 这个字段不解析
	InsertHtml string    `json:"-"`        // 这个字段不解析
}

PageInfo 单个媒体文件的信息

type PageInfos added in v1.1.0

type PageInfos []PageInfo

PageInfos 定义页面列表,排序用 在 Go 中,方法接收器必须是命名类型,这是为了确保类型具有一个唯一的标识和类型身份,从而可以在包级作用域中明确地定义和调用这些方法。 使用类型别名 PageInfos []PageInfo 来提供排序方法,这样可以确保 PageInfos 具有明确的类型身份,并且可以在包级作用域中使用和扩展。

func (*PageInfos) SortImages added in v1.1.0

func (s *PageInfos) SortImages(sortBy string)

SortImages 根据 sortBy 参数对 PageInfos 进行排序

type StoreBookInfo added in v1.1.0

type StoreBookInfo struct {
	StoreUrl     string    `json:"store_url"`
	ChildBookNum int       `json:"child_book_num"`
	BookInfos    BookInfos `json:"book_infos"`
}

type StoreInterface added in v1.1.0

type StoreInterface interface {
	StoreBook(b *Book) error
	GetBook(id string) (*Book, error)
	DeleteBook(id string) error
	ListBooks() ([]*Book, error)
	GenerateBookGroup() error
	StoreBookMark(mark *BookMark) error
	GetBookMarks(bookID string) (*BookMarks, error)
	DeleteBookMark(bookID string, markType MarkType, pageIndex int) error
}

StoreInterface 书库相关基本操作接口

var IStore StoreInterface

type SupportFileType

type SupportFileType string
const (
	TypeDir         SupportFileType = "dir"
	TypeZip         SupportFileType = ".zip"
	TypeRar         SupportFileType = ".rar"
	TypeBooksGroup  SupportFileType = "book_group"
	TypeCbz         SupportFileType = ".cbz"
	TypeCbr         SupportFileType = ".cbr"
	TypeTar         SupportFileType = ".tar"
	TypeEpub        SupportFileType = ".epub"
	TypePDF         SupportFileType = ".pdf"
	TypeHTML        SupportFileType = ".html"
	TypeVideo       SupportFileType = "video"
	TypeAudio       SupportFileType = "audio"
	TypeUnknownFile SupportFileType = "unknown"
)

书籍类型

func GetBookTypeByFilename

func GetBookTypeByFilename(filename string) SupportFileType

GetBookTypeByFilename 初始化Book时,取得BookType

type User

type User struct {
	ID       int    `json:"id"`
	Username string `json:"username"`
	Password string `json:"password"`
	Role     string `json:"role"` // 角色: admin, user, guest
	Email    string `json:"email"`
	Key      string `json:"key"` // login key
	ExpireAt string `json:"expireAt"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL