diff --git a/adept.go b/adept.go index 2cb7b48..9a35a51 100644 --- a/adept.go +++ b/adept.go @@ -10,5 +10,15 @@ import ( func main() { config.LoadConfig() - transcoder.NewRepository(viper.GetString("transcoder.repository")) + r := transcoder.NewRepository(viper.GetString("transcoder.repository")) + + ingestFiles := r.SearchIngest() + for _, i := range ingestFiles { + // archive file + r.ArchiveFile(i.Name()) + // transcode file + // TODO - t.Transcode(i.Name()) + // clean up source file + // TODO - r.CleanupFile(i.Name()) + } } diff --git a/transcoder/repository.go b/transcoder/repository.go index 85d90c9..9c816db 100644 --- a/transcoder/repository.go +++ b/transcoder/repository.go @@ -1,37 +1,87 @@ package transcoder import ( - "log" - "path/filepath" - "os" + "io" + "log" + "path/filepath" + "os" ) type Repository struct { - basePath string + basePath string } func NewRepository(path string) *Repository { - // make sure repository base directory exists - create_repo_dir(path) + // make sure repository base directory exists + create_repo_dir(path) - // make sure the ingest, archive, and output directories exist - subDirs := []string{"ingest", "archive", "output"} - for _, d := range subDirs { - subPath := filepath.Join(path, d) - create_repo_dir(subPath) - } + // make sure the ingest, archive, and output directories exist + subDirs := []string{"ingest", "archive", "output"} + for _, d := range subDirs { + subPath := filepath.Join(path, d) + create_repo_dir(subPath) + } - r := new(Repository) - r.basePath = path - return r + r := new(Repository) + r.basePath = path + return r +} + +func (r *Repository) SearchIngest() []os.FileInfo { + ingestPath := filepath.Join(r.basePath, "ingest") + + ingestDir, err := os.Open(ingestPath) + if err != nil { + log.Fatalf("Error opening ingest directory: %s", err) + os.Exit(1) + } + files, err := ingestDir.Readdir(0) + if err != nil { + log.Fatalf("Error searching for files in ingest: %s", err) + os.Exit(1) + } + + return files +} + +func (r *Repository) ArchiveFile(inFile string) { + // create ingest and archive paths + ingestPath := filepath.Join(r.basePath, "ingest", inFile) + archivePath := filepath.Join(r.basePath, "archive", inFile) + + log.Printf("Copying %s to the archive.", ingestPath) + + // open ingest file + source, err := os.Open(ingestPath) + if err != nil { + log.Fatalf("Error opening file in ingest: %s.", err) + os.Exit(1) + } + defer source.Close() + + // attempt to create destination file + destination, err := os.Create(archivePath) + if err != nil { + log.Fatalf("Error opening archive file: %s.", err) + os.Exit(1) + } + defer destination.Close() + destination.Chmod(0755) + + // perform the file copy + _, err = io.Copy(destination, source) + if err != nil { + log.Fatalf("Error while archiving file from ingest: %s.", err) + os.Exit(1) + } } func create_repo_dir(path string) { - _, err := os.Stat(path) - if os.IsNotExist(err) { - log.Printf("Creating directory %s.\n", path) - os.Mkdir(path, 0755) - } else { - log.Printf("Directory %s already exists.\n", path) - } + _, err := os.Stat(path) + if os.IsNotExist(err) { + log.Printf("Creating directory %s.\n", path) + os.Mkdir(path, 0755) + } else { + log.Printf("Directory %s already exists.\n", path) + } } diff --git a/util/file.go b/util/file.go new file mode 100644 index 0000000..e2ca568 --- /dev/null +++ b/util/file.go @@ -0,0 +1,10 @@ +package util + +import ( + "path" + "strings" +) + +func FilenameWithoutExtension(filename string) string { + return strings.TrimSuffix(filename, path.Ext(filename)) +}