Ability to write artwork's tags into file xattrs.

This commit is contained in:
Mirror 2021-02-22 21:57:19 +03:00
parent 7fc20571ba
commit 1b5a30b990
3 changed files with 39 additions and 17 deletions

View File

@ -22,6 +22,8 @@ type cmdlineT struct {
test bool
logErrorsFile string
threads int
setXAttrTags bool
setTagsFile string
}
var (
@ -32,7 +34,7 @@ var (
func main() {
flags()
pix = pixiv.New(cmdline.setCookies, cmdline.logErrorsFile, cmdline.threads)
pix = pixiv.New(cmdline.setCookies, cmdline.logErrorsFile, cmdline.threads, cmdline.setXAttrTags)
defer pix.Close()
if len(cmdline.setProxy) > 0 {
pix.SetProxy(cmdline.setProxy)
@ -155,5 +157,7 @@ func flags() {
flag.BoolVar(&cmdline.test, "test", false, "test")
flag.StringVar(&cmdline.logErrorsFile, "log-errors", "", "file to strore failed items")
flag.IntVar(&cmdline.threads, "threads", 1, "threads number")
flag.StringVar(&cmdline.setTagsFile, "set-xattr-file", "", "[WIP] fetch illustration's tags and write them to xattrs of the specified file. Filename SHOULD be in following formats: <illust_id>_p<page_number>.<file_ext>, illust_<illust_id>_*")
flag.BoolVar(&cmdline.setXAttrTags, "set-xattr", false, "also write tags to xattrs")
flag.Parse()
}

View File

@ -7,8 +7,32 @@ import (
"net/http"
"os"
"strings"
"syscall"
)
type artworkFile struct {
directory string
filename string
url string
}
type artwork struct {
tags []string
files []artworkFile
}
func (a *artwork) tagsToString() (r string) {
for _, tag := range a.tags {
r = fmt.Sprintf("%s,%s", r, tag)
}
return
}
func getExtension(fullpath string) (ext string) {
parts := strings.Split(fullpath, ".")
ext = parts[len(parts)-1]
return
}
//DownloadIllust .
func (p *Pixiv) downloadIllust(i Illust) (err error) {
if !i.Complited() {
@ -17,20 +41,7 @@ func (p *Pixiv) downloadIllust(i Illust) (err error) {
return
}
}
getExtension := func(fullpath string) (ext string) {
parts := strings.Split(fullpath, ".")
ext = parts[len(parts)-1]
return
}
type artworkFile struct {
directory string
filename string
url string
}
type artwork struct {
tags []string
files []artworkFile
}
var art artwork
for _, tag := range i.Tags.Tags {
if len(tag.Translation.En) > 0 {
@ -66,7 +77,12 @@ func (p *Pixiv) downloadIllust(i Illust) (err error) {
if err != nil {
return err
}
if p.setxattr {
err = syscall.Setxattr(outfile.Name(), "user.xdg.tags", []byte(art.tagsToString()), 0)
if err != nil {
return err
}
}
}
return
}

View File

@ -19,16 +19,18 @@ type Pixiv struct {
WorkDirectory string
logChannel chan string
DownloadChannel chan Illust
setxattr bool
}
//New returns object with methods to access API functions
func New(cookies string, logFilePath string, threads int) (p Pixiv) {
func New(cookies string, logFilePath string, threads int, xattrs bool) (p Pixiv) {
p.phpsessid = http.Cookie{Name: "PHPSESSID", Value: cookies}
p.Ua = "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0"
p.client = &http.Client{}
p.RetryCount = 5
p.ItemsPerRequest = 100
p.WorkDirectory = fmt.Sprintf("%s/Pictures/pixiv", os.Getenv("HOME"))
p.setxattr = xattrs
if len(logFilePath) > 0 {
logfile, err := os.OpenFile(logFilePath, os.O_APPEND, 664)
if err != nil {