|
|
|
package integration
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"caj-larsson/bog/domain"
|
|
|
|
)
|
|
|
|
|
|
|
|
type FileSystemBogFileData struct {
|
|
|
|
path string
|
|
|
|
size int64
|
|
|
|
mod_time time.Time
|
|
|
|
file *os.File
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (f FileSystemBogFileData) Read(p []byte) (int, error) {
|
|
|
|
return f.file.Read(p)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogFileData) Write(p []byte) (int, error) {
|
|
|
|
return f.file.Write(p)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogFileData) Close() error {
|
|
|
|
return f.file.Close()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogFileData) Seek(offset int64, whence int) (int64, error) {
|
|
|
|
return f.file.Seek(offset, whence)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogFileData) Path() string {
|
|
|
|
return f.path
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogFileData) Size() int64 {
|
|
|
|
return f.size
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogFileData) Modified() time.Time{
|
|
|
|
return time.Now()
|
|
|
|
}
|
|
|
|
|
|
|
|
type FileSystemBogRepository struct {
|
|
|
|
Root string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogRepository) absPath(filename string, user_agent_label string) string {
|
|
|
|
return path.Join(f.Root, user_agent_label, filename)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogRepository) Create(filename string, user_agent_label string) (domain.BogInFile, error) {
|
|
|
|
abs_path := f.absPath(filename, user_agent_label)
|
|
|
|
|
|
|
|
dir := path.Dir(abs_path)
|
|
|
|
os.MkdirAll(dir, 0750)
|
|
|
|
file, err := os.OpenFile(abs_path, os.O_RDWR|os.O_CREATE, 0644)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
stat_info, err := file.Stat()
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
bfd := FileSystemBogFileData {filename, stat_info.Size(), stat_info.ModTime(), file}
|
|
|
|
|
|
|
|
return bfd, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogRepository) Open(filename string, user_agent_label string) (domain.BogOutFile, error) {
|
|
|
|
abs_path := f.absPath(filename, user_agent_label)
|
|
|
|
|
|
|
|
dir := path.Dir(abs_path)
|
|
|
|
os.MkdirAll(dir, 0750)
|
|
|
|
file, err := os.OpenFile(abs_path, os.O_RDONLY, 0644)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return nil, domain.ErrNotExists
|
|
|
|
}
|
|
|
|
|
|
|
|
bfd := FileSystemBogFileData {filename, 0, time.Now(), file}
|
|
|
|
|
|
|
|
return bfd, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (f FileSystemBogRepository) Delete(filename string, user_agent_label string) {
|
|
|
|
|
|
|
|
}
|