/*
* MumbleDJ
* By Matthieu Grieger
* song.go
* Copyright (c) 2014 Matthieu Grieger (MIT License)
*/
package main
import (
//"github.com/layeh/gumble/gumble_ffmpeg"
"fmt"
"os/exec"
)
type Song struct {
submitter string
title string
youtubeId string
duration string
thumbnailUrl string
skippers []string
}
func NewSong(user, id string) *Song {
song := &Song{
submitter: user,
youtubeId: id,
return song
func (s *Song) Download() bool {
err := exec.Command(fmt.Sprintf("youtube-dl --output ~/.mumbledj/songs/%(id)s.%(ext)s --quiet --format bestaudio --audio-format vorbis --prefer-ffmpeg https://youtube.com/watch?v=%s", s.youtubeId))
if err == nil {
return true
} else {
return false
func (s *Song) Play() bool {
func (s *Song) Delete() bool {
func (s *Song) AddSkip(username string) bool {
for _, user := range s.skippers {
if username == user {
s.skippers = append(s.skippers, username)
func (s *Song) RemoveSkip(username string) bool {
for i, user := range s.skippers {
s.skippers = append(s.skippers[:i], s.skippers[i+1:]...)
func (s *Song) SkipReached(channelUsers int) bool {