mirror of
https://git.sr.ht/~phw/scotty
synced 2025-05-03 07:07:04 +02:00
scrobblerlog: implemented append mode
This commit is contained in:
parent
1af484e0f6
commit
56eae67292
4 changed files with 60 additions and 12 deletions
|
@ -22,6 +22,7 @@ THE SOFTWARE.
|
|||
package scrobblerlog
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"os"
|
||||
"sort"
|
||||
"time"
|
||||
|
@ -33,6 +34,7 @@ import (
|
|||
type ScrobblerLogBackend struct {
|
||||
filePath string
|
||||
includeSkipped bool
|
||||
append bool
|
||||
file *os.File
|
||||
log ScrobblerLog
|
||||
}
|
||||
|
@ -42,26 +44,57 @@ func (b *ScrobblerLogBackend) Name() string { return "scrobbler-log" }
|
|||
func (b *ScrobblerLogBackend) FromConfig(config *viper.Viper) models.Backend {
|
||||
b.filePath = config.GetString("file-path")
|
||||
b.includeSkipped = config.GetBool("include-skipped")
|
||||
return b
|
||||
}
|
||||
|
||||
func (b *ScrobblerLogBackend) StartImport() error {
|
||||
file, err := os.Create(b.filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
b.append = true
|
||||
if config.IsSet("append") {
|
||||
b.append = config.GetBool("append")
|
||||
}
|
||||
|
||||
b.log = ScrobblerLog{
|
||||
Timezone: "UNKNOWN",
|
||||
Client: "Rockbox unknown $Revision$",
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
err = WriteHeader(file, &b.log)
|
||||
func (b *ScrobblerLogBackend) StartImport() error {
|
||||
flags := os.O_RDWR | os.O_CREATE
|
||||
if !b.append {
|
||||
flags |= os.O_TRUNC
|
||||
}
|
||||
file, err := os.OpenFile(b.filePath, flags, 0666)
|
||||
if err != nil {
|
||||
file.Close()
|
||||
return err
|
||||
}
|
||||
|
||||
if b.append {
|
||||
stat, err := file.Stat()
|
||||
if err != nil {
|
||||
file.Close()
|
||||
return err
|
||||
}
|
||||
|
||||
if stat.Size() == 0 {
|
||||
// Zero length file, treat as a new file
|
||||
b.append = false
|
||||
} else {
|
||||
// Verify existing file is a scrobbler log
|
||||
reader := bufio.NewReader(file)
|
||||
err = ReadHeader(reader, &b.log)
|
||||
if err != nil {
|
||||
file.Close()
|
||||
return err
|
||||
}
|
||||
file.Seek(0, 2)
|
||||
}
|
||||
}
|
||||
|
||||
if !b.append {
|
||||
err = WriteHeader(file, &b.log)
|
||||
if err != nil {
|
||||
file.Close()
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
b.file = file
|
||||
return nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue