]> Sergey Matveev's repositories - meta4ra.git/commitdiff
Ability to alter existing .meta4
authorSergey Matveev <stargrave@stargrave.org>
Wed, 18 Feb 2026 14:38:03 +0000 (17:38 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 18 Feb 2026 14:57:18 +0000 (17:57 +0300)
cmd/create.go
internal/common.go

index 18831b185a30bc9336ce4d6133c9dc128c88da7a..1ef2a832ffa93c173ccb0402e2373d2e95eac88c 100644 (file)
@@ -32,6 +32,7 @@ import (
 
 func runCreate() {
        fn := flag.String("fn", "", "Filename")
+       add := flag.String("add", "", "Add file to specified .meta4")
        mtime := flag.String("mtime", "", "Take that file's mtime as a Published date")
        desc := flag.String("desc", "", "Description")
        sigPGP := flag.String("sig-pgp", "",
@@ -123,26 +124,42 @@ will be the priority and "cc" (may be empty) is location.
        if *torrent != "" {
                f.MetaURLs = []meta4ra.MetaURL{{MediaType: "torrent", URL: *torrent}}
        }
-       var published time.Time
-       if *mtime == "" {
-               published = time.Now()
+
+       var meta meta4ra.Metalink
+       if *add == "" {
+               var published time.Time
+               if *mtime == "" {
+                       published = time.Now()
+               } else {
+                       var fi fs.FileInfo
+                       fi, err = os.Stat(*mtime)
+                       if err != nil {
+                               log.Fatal(err)
+                       }
+                       published = fi.ModTime()
+               }
+               meta.Files = []meta4ra.File{f}
+               if !*noPublished {
+                       t := published.UTC().Truncate(time.Second)
+                       meta.Published = &t
+               }
+               if !*noGenerator {
+                       meta.Generator = meta4ra.Generator
+               }
        } else {
-               var fi fs.FileInfo
-               fi, err = os.Stat(*mtime)
+               var data []byte
+               data, err = os.ReadFile(*add)
                if err != nil {
                        log.Fatal(err)
                }
-               published = fi.ModTime()
-       }
-       m := meta4ra.Metalink{Files: []meta4ra.File{f}}
-       if !*noPublished {
-               t := published.UTC().Truncate(time.Second)
-               m.Published = &t
-       }
-       if !*noGenerator {
-               m.Generator = meta4ra.Generator
+               err = xml.Unmarshal(data, &meta)
+               if err != nil {
+                       log.Fatal(err)
+               }
+               meta.Files = append(meta.Files, f)
        }
-       out, err := xml.MarshalIndent(&m, "", "  ")
+
+       out, err := xml.MarshalIndent(&meta, "", "  ")
        if err != nil {
                log.Fatal(err)
        }
index 869123e129b6e9b7d3fe0f2b45ee5828db6fd26a..afe18e1ab5efeed2eada45073c16bfe6df5c5d75 100644 (file)
@@ -21,7 +21,7 @@ import (
 )
 
 const (
-       Generator       = "meta4ra/1.2.0"
+       Generator       = "meta4ra/1.3.0"
        SigMediaTypePGP = "application/pgp-signature"
        SigMediaTypeSSH = "application/ssh-signature"
        BufLen          = 1 << 20