model

package
v1.0.2 Latest Latest
Warning

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

Go to latest
Published: May 17, 2025 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (

	// MainStore 带有层级关系的总书组,用于前端展示
	MainStore = Store{}
)

使用并发安全的 sync.Map 存储书籍和书组

Functions

func AddBook

func AddBook(b *Book, basePath string, minPageNum int) error

AddBook 添加一本书

func AddBooks

func AddBooks(list []*Book, basePath string, minPageNum int) error

AddBooks 添加一组书

func CheckAllBookFileExist

func CheckAllBookFileExist()

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

func CheckBookExist

func CheckBookExist(filePath string, bookType SupportFileType) bool

CheckBookExist 查看内存中是否已经有了这本书,有了就返回 true,让调用者跳过

func ClearAllBookData

func ClearAllBookData()

ClearAllBookData 清空所有书籍与虚拟书组数据

func ClearBookData

func ClearBookData()

ClearBookData 清空书籍数据

func ClearBookGroupData

func ClearBookGroupData()

ClearBookGroupData 清空书组相关数据

func ClearTempFilesALL

func ClearTempFilesALL(debug bool, cacheFilePath string)

ClearTempFilesALL 清理所有缓存的临时图片

func DeleteBookByID

func DeleteBookByID(bookID string)

DeleteBookByID 删除一本书

func GetBookGroupIDByBookID

func GetBookGroupIDByBookID(id string) (string, error)

GetBookGroupIDByBookID 通过子书籍 ID 获取所属书组 ID

func GetBooksNumber

func GetBooksNumber() int

GetBooksNumber 获取书籍总数,不包括 BookGroup

func ResetBookGroupData

func ResetBookGroupData()

ResetBookGroupData 重置虚拟书库

func RestoreDatabaseBooks

func RestoreDatabaseBooks(list []*Book)

RestoreDatabaseBooks 从数据库中读取的书籍信息,放到内存中

Types

type Book

type Book struct {
	BookInfo
	Pages Pages `json:"pages"`
}

Book 定义书籍结构

func GetAllBookList

func GetAllBookList() []*Book

GetAllBookList 获取所有书籍列表

func GetArchiveBooks

func GetArchiveBooks() []*Book

GetArchiveBooks 获取所有压缩包格式的书籍

func GetBookByAuthor

func GetBookByAuthor(author string, sortBy string) ([]*Book, error)

GetBookByAuthor 获取同一作者的书籍

func GetBookByID

func GetBookByID(id string, sortBy string) (*Book, error)

GetBookByID 根据 BookID 获取书籍

func GetRandomBook

func GetRandomBook() (*Book, error)

GetRandomBook 随机获取一本书

func NewBook

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

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

func (*Book) GetAuthor

func (b *Book) GetAuthor() string

GetAuthor 获取作者信息

func (*Book) GetBookID

func (b *Book) GetBookID() string

GetBookID 获取书籍的 ID

func (*Book) GetFilePath

func (b *Book) GetFilePath() string

GetFilePath 获取文件路径

func (*Book) GetPageCount

func (b *Book) GetPageCount() int

GetPageCount 获取页数

func (*Book) GuestCover

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

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 BookGroup

type BookGroup struct {
	BookInfo
	ChildBook sync.Map //key:BookID,value: *BookInfo
}

func GetBookGroupByBookID

func GetBookGroupByBookID(id string) (*BookGroup, error)

GetBookGroupByBookID 通过数组 ID 获取书组信息

func GetBookGroupInfoByChildBookID

func GetBookGroupInfoByChildBookID(id string) (*BookGroup, error)

GetBookGroupInfoByChildBookID 通过子书籍 ID 获取所属书组信息

func NewBookGroup

func NewBookGroup(filePath string, modified time.Time, fileSize int64, storePath string, depth int, bookType SupportFileType) (*BookGroup, error)

NewBookGroup 初始化BookGroup,设置文件路径、书名、BookID等等

type BookInfo

type BookInfo struct {
	Author          string          `json:"author"`         // 作者
	BookID          string          `json:"id"`             // 根据 FilePath 生成的唯一 ID
	BookStorePath   string          `json:"-"`              // 在哪个子书库
	ChildBookNum    int             `json:"child_book_num"` // 子书籍数量
	Cover           MediaFileInfo   `json:"cover"`          // 封面图
	Deleted         bool            `json:"deleted"`        // 源文件是否已删除
	Depth           int             `json:"depth"`          // 书籍深度
	ExtractPath     string          `json:"-"`              // 解压路径,7z 用,JSON 不解析
	ExtractNum      int             `json:"-"`              // 文件解压数
	FileSize        int64           `json:"file_size"`      // 文件大小
	FilePath        string          `json:"-"`              // 文件绝对路径,JSON 不解析
	ISBN            string          `json:"isbn"`           // ISBN
	InitComplete    bool            `json:"-"`              // 是否解压完成
	Modified        time.Time       `json:"modified_time"`  // 修改时间
	NonUTF8Zip      bool            `json:"-"`              // 是否为特殊编码 zip
	PageCount       int             `json:"page_count"`     // 总页数
	ParentFolder    string          `json:"parent_folder"`  // 父文件夹
	Press           string          `json:"press"`          // 出版社
	PublishedAt     string          `json:"published_at"`   // 出版日期
	ReadPercent     float64         `json:"read_percent"`   // 阅读进度
	Title           string          `json:"title"`          // 书名
	Type            SupportFileType `json:"type"`           // 书籍类型
	ZipTextEncoding string          `json:"-"`              // zip 文件编码
}

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

func NewBaseInfo

func NewBaseInfo(b *Book) *BookInfo

NewBaseInfo 创建新的 BookInfo 实例

func (*BookInfo) GetCover

func (b *BookInfo) GetCover() MediaFileInfo

GetCover 获取封面

func (*BookInfo) ShortName

func (b *BookInfo) ShortName() string

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

type BookInfoList

type BookInfoList struct {
	BookInfos []BookInfo
}

BookInfoList 表示 BookInfo 的列表

func GetAllBookInfoList

func GetAllBookInfoList(sortBy string) (*BookInfoList, error)

GetAllBookInfoList 获取所有 BookInfo,并根据 sortBy 参数进行排序

func GetBookInfoListByDepth

func GetBookInfoListByDepth(depth int, sortBy string) (*BookInfoList, error)

GetBookInfoListByDepth 根据深度获取书籍列表

func GetBookInfoListByID

func GetBookInfoListByID(BookID string, sortBy string) (*BookInfoList, error)

GetBookInfoListByID 根据 ID 获取书籍列表

func GetBookInfoListByMaxDepth

func GetBookInfoListByMaxDepth(depth int, sortBy string) (*BookInfoList, error)

GetBookInfoListByMaxDepth 获取指定最大深度的书籍列表

func GetBookInfoListByParentFolder

func GetBookInfoListByParentFolder(parentFolder string, sortBy string) (*BookInfoList, error)

GetBookInfoListByParentFolder 根据父文件夹获取书籍列表

func TopOfShelfInfo

func TopOfShelfInfo(sortBy string) (*BookInfoList, error)

TopOfShelfInfo 获取顶层书架信息

func (*BookInfoList) SortBooks

func (s *BookInfoList) SortBooks(sortBy string)

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

type DirNode

type DirNode struct {
	Name    string          `json:"name"`
	Path    string          `json:"path"`
	SubDirs []DirNode       `json:"sub_dirs"` // 子目录列表
	Files   []MediaFileInfo `json:"files"`    // 本目录下的图片文件列表
}

DirNode 表示目录树节点,用于 JSON 存储模式

type MediaFileInfo

type MediaFileInfo 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:"-"`        // 这个字段不解析
	Blurhash   string    `json:"-"`        // `json:"blurhash"` //blurhash占位符。扫描图片生成(util.GetImageDataBlurHash)
	Height     int       `json:"-"`        // 暂时用不着 这个字段不解析`json:"height"`   //blurhash用,图片高
	Width      int       `json:"-"`        // 暂时用不着 这个字段不解析`json:"width"`    //blurhash用,图片宽
	ImgType    string    `json:"-"`        // 这个字段不解析
	InsertHtml string    `json:"-"`        // 这个字段不解析
}

MediaFileInfo 单个媒体文件的信息

type Pages

type Pages struct {
	Images []MediaFileInfo `json:"images"`
	SortBy string          `json:"sort_by"`
}

Pages 定义页面结构

func (Pages) Len

func (s Pages) Len() int

Len 返回页面数量

func (Pages) Less

func (s Pages) Less(i, j int) bool

Less 按照排序方式比较页面

func (Pages) Swap

func (s Pages) Swap(i, j int)

Swap 交换页面

type ReadingProgress

type ReadingProgress struct {
	// 当前页
	NowPageNum int `json:"nowPageNum"`
	// 当前章节
	NowChapterNum int `json:"nowChapterNum"`
	// 阅读时间,单位为秒
	ReadingTime int `json:"readingTime"`
}

func GetReadingProgress

func GetReadingProgress(progress string) (ReadingProgress, error)

type Store

type Store struct {
	SubStores sync.Map //key为路径 存储 *subStore
}

Store 本地总书库,扫描后生成。可以有多个子书库。

func (*Store) AddBookToSubStore

func (folder *Store) AddBookToSubStore(searchPath string, b *BookInfo) error

AddBookToSubStore 将某一本书,放到BookMap里面去

func (*Store) AddSubStore

func (folder *Store) AddSubStore(basePath string) error

AddSubStore 创建一个新文件夹

func (*Store) AnalyzeStore

func (folder *Store) AnalyzeStore() (e error)

AnalyzeStore 分析并生成书籍组

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"
	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"`
	FirstName string `json:"first_name"`
	LastName  string `json:"last_name"`
	Email     string `json:"email"`
}

Jump to

Keyboard shortcuts

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