id3-go/id3.go

84 wiersze
1.4 KiB
Go
Czysty Zwykły widok Historia

2013-12-21 22:31:03 +00:00
// Copyright 2013 Michael Yang. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package id3
import (
"bufio"
"io/ioutil"
"os"
)
type File struct {
*Tag
2013-12-30 09:00:14 +00:00
name string
data []byte
2013-12-22 06:37:15 +00:00
Title, Artist, Album, Genre string
}
2013-12-21 22:31:03 +00:00
func Open(name string) (*File, error) {
fi, err := os.Open(name)
defer fi.Close()
if err != nil {
return nil, err
}
rd := bufio.NewReader(fi)
tag := NewTag(rd)
data, err := ioutil.ReadAll(rd)
if err != nil {
return nil, err
}
2013-12-30 09:00:14 +00:00
return &File{
tag,
name,
data,
2013-12-22 06:37:15 +00:00
tag.textFrame("TIT2"),
tag.textFrame("TPE1"),
tag.textFrame("TALB"),
tag.textFrame("TCON"),
2013-12-30 09:00:14 +00:00
}, nil
2013-12-21 22:31:03 +00:00
}
func (f *File) Close() {
2013-12-22 06:37:15 +00:00
f.setTextFrame("TIT2", f.Title)
f.setTextFrame("TPE1", f.Artist)
f.setTextFrame("TALB", f.Album)
f.setTextFrame("TCON", f.Genre)
2013-12-21 22:31:03 +00:00
fi, err := os.Create(f.name)
defer fi.Close()
if err != nil {
panic(err)
}
wr := bufio.NewWriter(fi)
wr.Write(f.Tag.Bytes())
wr.Write(f.data)
}
2013-12-22 06:37:15 +00:00
func (t Tag) textFrame(id string) string {
if frames, ok := t.Frames[id]; ok {
frame := frames[0]
switch frame.(type) {
case (*TextFrame):
return frame.(*TextFrame).Text()
default:
}
}
return ""
}
func (t *Tag) setTextFrame(id, text string) {
if frames, ok := t.Frames[id]; ok {
frame := frames[0]
switch frame.(type) {
case (*TextFrame):
frame.(*TextFrame).SetText(text)
default:
}
}
}