Ability to write artwork's tags into file xattrs.
This commit is contained in:
parent
7fc20571ba
commit
1b5a30b990
6
main.go
6
main.go
@ -22,6 +22,8 @@ type cmdlineT struct {
|
|||||||
test bool
|
test bool
|
||||||
logErrorsFile string
|
logErrorsFile string
|
||||||
threads int
|
threads int
|
||||||
|
setXAttrTags bool
|
||||||
|
setTagsFile string
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -32,7 +34,7 @@ var (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flags()
|
flags()
|
||||||
pix = pixiv.New(cmdline.setCookies, cmdline.logErrorsFile, cmdline.threads)
|
pix = pixiv.New(cmdline.setCookies, cmdline.logErrorsFile, cmdline.threads, cmdline.setXAttrTags)
|
||||||
defer pix.Close()
|
defer pix.Close()
|
||||||
if len(cmdline.setProxy) > 0 {
|
if len(cmdline.setProxy) > 0 {
|
||||||
pix.SetProxy(cmdline.setProxy)
|
pix.SetProxy(cmdline.setProxy)
|
||||||
@ -155,5 +157,7 @@ func flags() {
|
|||||||
flag.BoolVar(&cmdline.test, "test", false, "test")
|
flag.BoolVar(&cmdline.test, "test", false, "test")
|
||||||
flag.StringVar(&cmdline.logErrorsFile, "log-errors", "", "file to strore failed items")
|
flag.StringVar(&cmdline.logErrorsFile, "log-errors", "", "file to strore failed items")
|
||||||
flag.IntVar(&cmdline.threads, "threads", 1, "threads number")
|
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()
|
flag.Parse()
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,32 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"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 .
|
//DownloadIllust .
|
||||||
func (p *Pixiv) downloadIllust(i Illust) (err error) {
|
func (p *Pixiv) downloadIllust(i Illust) (err error) {
|
||||||
if !i.Complited() {
|
if !i.Complited() {
|
||||||
@ -17,20 +41,7 @@ func (p *Pixiv) downloadIllust(i Illust) (err error) {
|
|||||||
return
|
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
|
var art artwork
|
||||||
for _, tag := range i.Tags.Tags {
|
for _, tag := range i.Tags.Tags {
|
||||||
if len(tag.Translation.En) > 0 {
|
if len(tag.Translation.En) > 0 {
|
||||||
@ -66,7 +77,12 @@ func (p *Pixiv) downloadIllust(i Illust) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if p.setxattr {
|
||||||
|
err = syscall.Setxattr(outfile.Name(), "user.xdg.tags", []byte(art.tagsToString()), 0)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -19,16 +19,18 @@ type Pixiv struct {
|
|||||||
WorkDirectory string
|
WorkDirectory string
|
||||||
logChannel chan string
|
logChannel chan string
|
||||||
DownloadChannel chan Illust
|
DownloadChannel chan Illust
|
||||||
|
setxattr bool
|
||||||
}
|
}
|
||||||
|
|
||||||
//New returns object with methods to access API functions
|
//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.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.Ua = "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0"
|
||||||
p.client = &http.Client{}
|
p.client = &http.Client{}
|
||||||
p.RetryCount = 5
|
p.RetryCount = 5
|
||||||
p.ItemsPerRequest = 100
|
p.ItemsPerRequest = 100
|
||||||
p.WorkDirectory = fmt.Sprintf("%s/Pictures/pixiv", os.Getenv("HOME"))
|
p.WorkDirectory = fmt.Sprintf("%s/Pictures/pixiv", os.Getenv("HOME"))
|
||||||
|
p.setxattr = xattrs
|
||||||
if len(logFilePath) > 0 {
|
if len(logFilePath) > 0 {
|
||||||
logfile, err := os.OpenFile(logFilePath, os.O_APPEND, 664)
|
logfile, err := os.OpenFile(logFilePath, os.O_APPEND, 664)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user