mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-11-25 19:37:41 +08:00
* Enable blank issue * chore(README.md): update docs (temporally) * Update FUNDING.yml * chore: purge README.md * chore: change module name to OpenListTeam/OpenList * fix: fix link errors * chore: remove v3 in module name * fix: resolve some conficts * fix: resolve conficts * docs: update with latest file --------- Co-authored-by: ShenLin <773933146@qq.com> Co-authored-by: Hantong Chen <cxwdyx620@gmail.com> Co-authored-by: joshua <i@joshua.su> Co-authored-by: Hantong Chen <70561268+cxw620@users.noreply.github.com>
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package sevenzip
|
|
|
|
import (
|
|
"io"
|
|
"strings"
|
|
|
|
"github.com/OpenListTeam/OpenList/internal/archive/tool"
|
|
"github.com/OpenListTeam/OpenList/internal/errs"
|
|
"github.com/OpenListTeam/OpenList/internal/model"
|
|
"github.com/OpenListTeam/OpenList/internal/stream"
|
|
)
|
|
|
|
type SevenZip struct{}
|
|
|
|
func (SevenZip) AcceptedExtensions() []string {
|
|
return []string{".7z"}
|
|
}
|
|
|
|
func (SevenZip) AcceptedMultipartExtensions() map[string]tool.MultipartExtension {
|
|
return map[string]tool.MultipartExtension{
|
|
".7z.001": {".7z.%.3d", 2},
|
|
}
|
|
}
|
|
|
|
func (SevenZip) GetMeta(ss []*stream.SeekableStream, args model.ArchiveArgs) (model.ArchiveMeta, error) {
|
|
reader, err := getReader(ss, args.Password)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
_, tree := tool.GenerateMetaTreeFromFolderTraversal(&WrapReader{Reader: reader})
|
|
return &model.ArchiveMetaInfo{
|
|
Comment: "",
|
|
Encrypted: args.Password != "",
|
|
Tree: tree,
|
|
}, nil
|
|
}
|
|
|
|
func (SevenZip) List(ss []*stream.SeekableStream, args model.ArchiveInnerArgs) ([]model.Obj, error) {
|
|
return nil, errs.NotSupport
|
|
}
|
|
|
|
func (SevenZip) Extract(ss []*stream.SeekableStream, args model.ArchiveInnerArgs) (io.ReadCloser, int64, error) {
|
|
reader, err := getReader(ss, args.Password)
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
innerPath := strings.TrimPrefix(args.InnerPath, "/")
|
|
for _, file := range reader.File {
|
|
if file.Name == innerPath {
|
|
r, e := file.Open()
|
|
if e != nil {
|
|
return nil, 0, e
|
|
}
|
|
return r, file.FileInfo().Size(), nil
|
|
}
|
|
}
|
|
return nil, 0, errs.ObjectNotFound
|
|
}
|
|
|
|
func (SevenZip) Decompress(ss []*stream.SeekableStream, outputPath string, args model.ArchiveInnerArgs, up model.UpdateProgress) error {
|
|
reader, err := getReader(ss, args.Password)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return tool.DecompressFromFolderTraversal(&WrapReader{Reader: reader}, outputPath, args, up)
|
|
}
|
|
|
|
var _ tool.Tool = (*SevenZip)(nil)
|
|
|
|
func init() {
|
|
tool.RegisterTool(SevenZip{})
|
|
}
|