-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #40 from jmillerv/example-config
Add documentation
- Loading branch information
Showing
6 changed files
with
261 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
version: 0.0.1 | ||
content: | ||
PlayedPodcastTTL: "1m" # defaults to a month | ||
CheckInterval: "1m" # defaults to 1 minute | ||
Programs: | ||
- Name: "Indie Pop Rocks" | ||
Type: "web_radio" | ||
Source: "https://somafm.com/indiepop.pls" | ||
Timeslot: | ||
Begin: "12:00AM" | ||
End: "12:00PM" | ||
- Name: "Tech Won't Save Us" | ||
Type: "podcast" | ||
Timeslot: | ||
Begin: "12:00 AM" | ||
End: "11:59:00 PM" | ||
Source: "https://feeds.buzzsprout.com/1004689.rss" | ||
- Name: "Democracy Now!" | ||
Type: "podcast" | ||
Timeslot: | ||
Begin: "12:00 AM" | ||
End: "11:59:00 PM" | ||
Source: "https://www.democracynow.org/podcast.xml" | ||
- Name: "gettysburg10" | ||
Type: "file" | ||
Timeslot: | ||
Begin: "3:05:00 PM" | ||
End: "10:00:00 PM" | ||
Source: "./static/gettysburg10.wav" | ||
- Name: "Piano Six Seconds" | ||
Type: "file" | ||
Timeslot: | ||
Begin: "12:00:00 AM" | ||
End: "11:59:00 PM" | ||
Source: "./static/piano_six_seconds.mp3" | ||
- Name: "exile (feat. Bon Iver)" | ||
Type: "file" | ||
Timeslot: | ||
Begin: "9:54:00 PM" | ||
End: "9:58:00 PM" | ||
Source: "./static/04 exile (feat. bon iver).mp3" | ||
- Name: "Taylor Swift Folder" | ||
Type: "folder" | ||
Timeslot: "afternoon" | ||
Source: "./static/taylor_swift" |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
package content | ||
|
||
// file labeled _internal_test because none of these functions are public. | ||
|
||
import ( | ||
"github.com/mmcdole/gofeed" | ||
"github.com/stretchr/testify/assert" | ||
"testing" | ||
"time" | ||
) | ||
|
||
func Test_contains(t *testing.T) { | ||
type args struct { | ||
guids []string | ||
episodeGuid string | ||
} | ||
tests := []struct { | ||
name string | ||
args args | ||
want bool | ||
}{ | ||
{ | ||
name: "Success: Returns True", | ||
args: args{}, | ||
want: true, | ||
}, | ||
{ | ||
name: "Success: Returns False", | ||
args: args{}, | ||
want: false, | ||
}, | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
got := contains(tt.args.guids, tt.args.episodeGuid) | ||
assert.ObjectsAreEqual(tt.want, got) | ||
}) | ||
} | ||
} | ||
|
||
func Test_podcastCacheData_fromCache(t *testing.T) { | ||
type fields struct { | ||
Guids []string | ||
TTY string | ||
CacheDate time.Time | ||
} | ||
type args struct { | ||
cacheData any | ||
} | ||
tests := []struct { | ||
name string | ||
fields fields | ||
args args | ||
want *podcastCacheData | ||
}{ | ||
{}, | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
p := &podcastCacheData{ | ||
Guids: tt.fields.Guids, | ||
TTY: tt.fields.TTY, | ||
CacheDate: tt.fields.CacheDate, | ||
} | ||
assert.Equalf(t, tt.want, p.fromCache(tt.args.cacheData), "fromCache(%v)", tt.args.cacheData) | ||
}) | ||
} | ||
} | ||
|
||
func Test_podcasts_getNewestEpisode(t *testing.T) { | ||
type fields struct { | ||
Episodes []*gofeed.Item | ||
} | ||
tests := []struct { | ||
name string | ||
fields fields | ||
want episode | ||
}{ | ||
// TODO: Add test cases. | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
p := &podcasts{ | ||
Episodes: tt.fields.Episodes, | ||
} | ||
assert.Equalf(t, tt.want, p.getNewestEpisode(), "getNewestEpisode()") | ||
}) | ||
} | ||
} | ||
|
||
func Test_podcasts_getOldestEpisode(t *testing.T) { | ||
type fields struct { | ||
Episodes []*gofeed.Item | ||
} | ||
tests := []struct { | ||
name string | ||
fields fields | ||
want episode | ||
}{ | ||
// TODO: Add test cases. | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
p := &podcasts{ | ||
Episodes: tt.fields.Episodes, | ||
} | ||
assert.Equalf(t, tt.want, p.getOldestEpisode(), "getOldestEpisode()") | ||
}) | ||
} | ||
} | ||
|
||
func Test_podcasts_getRandomEpisode(t *testing.T) { | ||
type fields struct { | ||
Episodes []*gofeed.Item | ||
} | ||
tests := []struct { | ||
name string | ||
fields fields | ||
want episode | ||
}{ | ||
// TODO: Add test cases. | ||
} | ||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
p := &podcasts{ | ||
Episodes: tt.fields.Episodes, | ||
} | ||
assert.Equalf(t, tt.want, p.getRandomEpisode(), "getRandomEpisode()") | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
# Running go-dj on a fresh machine | ||
|
||
These instructions come from getting this working on a fresh install of [DietPi]() running on a [Raspberry Pi 3 B+]() There | ||
is an existing ticket to automate this process for ease of use. | ||
|
||
|
||
## Install Go | ||
1. mkdir ~/tmp | ||
2. cd ~/tmp | ||
3. wget https://go.dev/dl/go1.19.4.src.tar.gz | ||
4. sudo tar -C /usr/local -xzf go1.19.4.src.tar.gz | ||
5. add export PATH=$PATH:/usr/local/go/bin to .profile | ||
6. source ~/.profile | ||
7. go version | ||
returns `go version go1.19.4 linux/arm64` | ||
|
||
## Install dependencies | ||
These are the dependencies that I installed during the process of troubleshooting. I need to go through and confirm what is/is not needed. | ||
|
||
1. `sudo apt install libasound2 -y` | ||
2. `sudo apt install alsa-utils -y` | ||
3. `sudo apt-get install -y -qq libasound2-dev libssl-dev libpulse-dev libdbus-1-dev portaudio19-dev` | ||
4. `sudo apt install build-essential` | ||
5. `sudo apt install mpv` // this installs many of the previous packages, but I did this as step 5 when testing. | ||
|
||
## Clone Repo | ||
1. `cd ~/` | ||
2. `mkdir dev` | ||
3. `git clone https://github.com/jmillerv/go-dj` | ||
|
||
## Build | ||
1. `cd ~/dev/go-dj` | ||
2. `go build` | ||
3 chmod +x ./go-dj | ||
|
||
## Add a config | ||
1. cd ~/dev/go-dj | ||
2. `mv config.example.yml config.yml` | ||
3. populate the yaml with your desired content | ||
|
||
## Configure your timezone | ||
This will be different based on your OS and you may have done this during setup. I missed setting it to mine during the boot, so files weren't playing when I expected. | ||
|
||
## Configure audio outputs | ||
DietPi doesn't have the soundcards installed by default, I had to do this to get sound out of the 3.5mm jack. go-dj outputs to | ||
wherever the default audio is sent to. | ||
|
||
### Test your speakers | ||
The following command will test the speakers without playing loud noise | ||
`speaker-test -t wav -c 6` | ||
|
||
To end the test press `ctrl+c` | ||
|
||
## Run | ||
|
||
./go-dj s | ||
|
||
## Run on reboot | ||
Should your SBC go down, you'll likely not want to have to reboot the daemon yourself. | ||
|
||
1. open crontab | ||
`crontab -e` | ||
2. add command to file | ||
`@rebott cd ~/dev/go && ./go-dj s` | ||
|
||
## Killing the program | ||
### Kill Signal | ||
`Ctrl+C` will usually be enough to stop the program; however, there are known issues where it does not. | ||
|
||
### Kill the process | ||
|
||
Should you run into issues, knowing how to kill the program is useful | ||
|
||
1. Get the process ID | ||
|
||
`ps aux | grep go-dj` | ||
should yeild something that looks like | ||
`root 22328 0.0 1.2 1240808 12436 pts/0 Sl+ 02:03 0:00 ./go-dj s` | ||
|
||
2. stop the process with the procdess ID | ||
`kill -9 22328` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,7 +11,7 @@ import ( | |
) | ||
|
||
const ( | ||
configFile = "config.dev.yml" | ||
configFile = "config.yml" | ||
) | ||
|
||
func main() { | ||
|