model

package
v1.1.5 Latest Latest
Warning

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

Go to latest
Published: Dec 8, 2025 License: MIT Imports: 20 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 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 {
	Author          string          `json:"author"`            // 作者
	BookID          string          `json:"id"`                // 根据 BookPath 生成的唯一 ID
	StoreUrl        string          `json:"store_url"`         // 在哪个子书库
	ChildBooksNum   int             `json:"child_books_num"`   // 子书籍数量,只统计直接的子书籍
	ChildBooksID    []string        `json:"child_books_id"`    // 子书籍BookID
	Cover           PageInfo        `json:"cover"`             // 封面图
	Deleted         bool            `json:"deleted"`           // 源文件是否已删除
	Depth           int             `json:"depth"`             // 书籍深度
	ExtractPath     string          `json:"extract_path"`      // 解压路径,7z 用,JSON 不解析
	ExtractNum      int             `json:"extract_num"`       // 文件解压数
	FileSize        int64           `json:"file_size"`         // 文件大小
	BookPath        string          `json:"book_path"`         // 文件绝对路径,JSON 不解析
	ISBN            string          `json:"isbn"`              // ISBN
	BookComplete    bool            `json:"book_complete"`     // 书籍是否阅读完成
	InitComplete    bool            `json:"init_complete"`     // 是否初始化完成(todo:7z解压)
	Modified        time.Time       `json:"modified_time"`     // 修改时间
	NonUTF8Zip      bool            `json:"non_utf_8_zip"`     // 是否为特殊编码 zip
	PageCount       int             `json:"page_count"`        // 总页数
	ParentFolder    string          `json:"parent_folder"`     // 父文件夹
	Press           string          `json:"press"`             // 出版社
	PublishedAt     string          `json:"published_at"`      // 出版日期
	Title           string          `json:"title"`             // 书名
	Type            SupportFileType `json:"type"`              // 书籍类型
	ZipTextEncoding string          `json:"zip_text_encoding"` // zip 文件编码
}

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"`     //
	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 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)
}

StoreInterface 书库相关基本操作接口 x6

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