// // tank // // Import and Playlist Daemon for autoradio project // // // Copyright (C) 2017-2019 Christian Pointner <equinox@helsinki.at> // // This file is part of tank. // // tank is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // tank is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with tank. If not, see <http://www.gnu.org/licenses/>. // package store import ( "errors" "os" "path/filepath" ) func (st *Store) getShowPath(show string) string { return filepath.Join(st.basePath, show) } // this will not fail if the show already exists func (st *Store) CreateShow(name string) (show *Show, err error) { showDirPath := filepath.Join(st.basePath, name) if err := os.Mkdir(showDirPath, 0755); err != nil { if !os.IsExist(err) { return nil, errors.New("unable to create directory for show '" + name + "': " + err.Error()) } if stat, err := os.Stat(showDirPath); err != nil { return nil, errors.New("unable to create directory for show '" + name + "': " + err.Error()) } else if !stat.IsDir() { return nil, errors.New("unable to create directory for show '" + name + "': path exists and is not a directory") } } show = &Show{Name: name} err = st.db.FirstOrCreate(show).Error return } func (st *Store) CloneShow(name, from string) error { // TODO: // within transaction: { // check if show already exists -> error // st.CreateShow(name) // for file in files_of_show { // create file in show <name> -> <dest-id> // create hardlink for /store/base/path/<from>/<src-id> -> /store/base/path/<name>/<dest-id> // } // } return ErrNotImplemented } // this will also remove all files and playlists belonging to the show! func (st *Store) DeleteShow(name string) error { if err := st.db.Delete(&Show{Name: name}).Error; err != nil { return err } return os.RemoveAll(st.getShowPath(name)) } func (st *Store) ListShows() (shows Shows, err error) { err = st.db.Find(&shows).Error return }