package transcoder import ( "io" "log" "path/filepath" "os" ) type Repository struct { basePath string } func NewRepository(path string) *Repository { // 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) } r := new(Repository) r.basePath = path return r } func (r *Repository) SearchIngest() []os.FileInfo { ingestPath := filepath.Join(r.basePath, "ingest") log.Printf("Searching ingest directory for files to transcode...") 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 (r *Repository) CleanupFile(inFile string) { // create ingest path ingestPath := filepath.Join(r.basePath, "ingest", inFile) // remove the file os.Remove(ingestPath) } 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) } }