diff --git a/room/user.go b/room/user.go index 49154ac..b04bffa 100644 --- a/room/user.go +++ b/room/user.go @@ -186,7 +186,7 @@ func (u *User) Movie(id uint64) (*pb.MovieInfo, error) { return movie, nil } -func (u *User) MovieList() []*pb.MovieInfo { +func (u *User) Movies() []*pb.MovieInfo { u.room.movies.lock.RLock() defer u.room.movies.lock.RUnlock() @@ -214,6 +214,27 @@ func (u *User) MovieList() []*pb.MovieInfo { return movies } +func (u *User) EditMovie(id uint64, movie BaseMovieInfo) error { + m, err := u.room.movies.GetMovie(id) + if err != nil { + return err + } + if !u.IsAdmin() && !u.IsRoot() && m.Creator().name != u.name { + return errors.New("you are not the creator of this movie, you can't edit it") + } + pre := m.BaseMovieInfo + m.BaseMovieInfo = movie + switch { + case pre.RtmpSource && !movie.RtmpSource: + u.room.rtmpa.DelChannel(m.PullKey) + m.PullKey = "" + // TODO: live proxy + case pre.Proxy && !movie.Proxy: + m.PullKey = "" + } + return nil +} + func (u *User) RegClient(conn *websocket.Conn) (*Client, error) { return u.room.RegClient(u, conn) } diff --git a/server/handlers/movie.go b/server/handlers/movie.go index 91de9db..01da9b3 100644 --- a/server/handlers/movie.go +++ b/server/handlers/movie.go @@ -52,7 +52,7 @@ func MovieList(ctx *gin.Context) { return } - ml := user.MovieList() + ml := user.Movies() movies, err := GetPageItems(ctx, ml) if err != nil { @@ -88,7 +88,7 @@ func Movies(ctx *gin.Context) { return } - ml := user.MovieList() + ml := user.Movies() movies, err := GetPageItems(ctx, ml) if err != nil { @@ -294,11 +294,8 @@ func NewPublishKey(ctx *gin.Context) { } type EditMovieReq struct { - Id uint64 `json:"id"` - Url string `json:"url"` - Name string `json:"name"` - Type string `json:"type"` - Headers map[string]string `json:"headers"` + Id uint64 `json:"id"` + room.BaseMovieInfo } func EditMovie(ctx *gin.Context) { @@ -315,19 +312,11 @@ func EditMovie(ctx *gin.Context) { return } - m, err := user.Room().GetMovie(req.Id) - if err != nil { + if err := user.EditMovie(req.Id, req.BaseMovieInfo); err != nil { ctx.AbortWithStatusJSON(http.StatusBadRequest, NewApiErrorResp(err)) return } - // Dont edit live and proxy - - m.Url = req.Url - m.Name = req.Name - m.Type = req.Type - m.Headers = req.Headers - if err := user.Broadcast(&room.ElementMessage{ ElementMessage: &pb.ElementMessage{ Type: pb.ElementMessageType_CHANGE_MOVIES,