audio_addict 0.4.5 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +7 -14
- data/bin/radio +4 -4
- data/lib/audio_addict/commands/channels.rb +4 -4
- data/lib/audio_addict/commands/config.rb +13 -13
- data/lib/audio_addict/commands/download.rb +4 -4
- data/lib/audio_addict/commands/history.rb +2 -2
- data/lib/audio_addict/commands/log.rb +4 -4
- data/lib/audio_addict/commands/login.rb +3 -3
- data/lib/audio_addict/commands/now.rb +5 -5
- data/lib/audio_addict/commands/playlist.rb +5 -5
- data/lib/audio_addict/commands/set.rb +4 -4
- data/lib/audio_addict/commands/vote.rb +1 -1
- data/lib/audio_addict/version.rb +1 -1
- metadata +51 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa6aca6b2c17f49637c1047cec083c3734f15d6bcae20411d6d08ec948d76351
|
4
|
+
data.tar.gz: 882d4f3693907f19d7575c49d22e02bcb5d9f3bdc162d565545621ce32b9fff0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2855e5450ee8968f8cfd2c078f8678632e470d4483dcc1e8a7c355bfb03e565d66d6808ba67e4eaaeb28c41475efb5cc01bc769804dce0d98cd4445d42238851
|
7
|
+
data.tar.gz: 00bbaabd475d435f9e5cca1121a338c4f75bc734c1d5dc92c98b21d244353bb9732ccd334cbba38ac8e7705f4521d95e092530d3189e0e99ef379c39cd9a6edd
|
data/README.md
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
AudioAddict Command Line
|
2
|
-
==================================================
|
1
|
+
# AudioAddict Command Line
|
3
2
|
|
4
3
|
[](https://badge.fury.io/rb/audio_addict)
|
5
4
|
[](https://github.com/DannyBen/audio_addict/actions?query=workflow%3ATest)
|
@@ -14,14 +13,12 @@ radio network.
|
|
14
13
|
|
15
14
|
---
|
16
15
|
|
17
|
-
Demo
|
18
|
-
--------------------------------------------------
|
16
|
+
## Demo
|
19
17
|
|
20
|
-

|
21
19
|
|
22
20
|
|
23
|
-
Install
|
24
|
-
--------------------------------------------------
|
21
|
+
## Install
|
25
22
|
|
26
23
|
Please note that in order to use this gem you need to have an AUdioAddict
|
27
24
|
account (free or premium) at one of the AudioAddict networks.
|
@@ -31,8 +28,7 @@ $ gem install audio_addict
|
|
31
28
|
```
|
32
29
|
|
33
30
|
|
34
|
-
Features
|
35
|
-
--------------------------------------------------
|
31
|
+
## Features
|
36
32
|
|
37
33
|
- Easy to use command line interface
|
38
34
|
- Support for all the networks on the [AudioAddict Platform]:
|
@@ -50,8 +46,7 @@ Features
|
|
50
46
|
- Download songs from YouTube (requires [youtube-dl][youtube-dl])
|
51
47
|
|
52
48
|
|
53
|
-
Usage
|
54
|
-
--------------------------------------------------
|
49
|
+
## Usage
|
55
50
|
|
56
51
|
- Run the `radio` command to see a list of available subcommands.
|
57
52
|
- To see additional help, run `radio <subcommand> --help`
|
@@ -75,8 +70,6 @@ Commands:
|
|
75
70
|
|
76
71
|
```
|
77
72
|
|
78
|
-
---
|
79
|
-
|
80
73
|
[AudioAddict Platform]: http://www.audioaddict.com
|
81
74
|
[Digitally Imported]: http://di.fm
|
82
75
|
[RockRadio]: http://www.rockradio.com
|
@@ -84,4 +77,4 @@ Commands:
|
|
84
77
|
[JazzRadio]: http://www.jazzradio.com
|
85
78
|
[ClassicalRadio]: http://www.classicalradio.com
|
86
79
|
[ZenRadio]: http://www.zenradio.com
|
87
|
-
[youtube-dl]: https://github.com/
|
80
|
+
[youtube-dl]: https://github.com/yt-dlp/yt-dlp
|
data/bin/radio
CHANGED
@@ -11,20 +11,20 @@ rescue Interrupt, AudioAddict::Interrupt, TTY::Reader::InputInterrupt
|
|
11
11
|
say "\nGoodbye"
|
12
12
|
exit 1
|
13
13
|
rescue AudioAddict::ConfigError => e
|
14
|
-
say '
|
14
|
+
say 'ru`ERROR: Missing Configuration Values`'
|
15
15
|
say "#{e.message}:"
|
16
16
|
e.missing_keys.each do |key|
|
17
|
-
say "-
|
17
|
+
say "- b`#{key}`"
|
18
18
|
end
|
19
19
|
say ''
|
20
|
-
say 'Run
|
20
|
+
say 'Run m`radio config guide` for more information'
|
21
21
|
exit 1
|
22
22
|
rescue => e
|
23
23
|
if ENV['DEBUG']
|
24
24
|
puts e.backtrace.reverse
|
25
25
|
say ''
|
26
26
|
end
|
27
|
-
say "
|
27
|
+
say "ru`ERROR: #{e.class}`"
|
28
28
|
say e.message
|
29
29
|
exit 1
|
30
30
|
end
|
@@ -20,7 +20,7 @@ module AudioAddict
|
|
20
20
|
def run
|
21
21
|
needs :network
|
22
22
|
|
23
|
-
say "
|
23
|
+
say "gu`#{radio.name}`\n"
|
24
24
|
|
25
25
|
search = args['SEARCH']
|
26
26
|
|
@@ -39,7 +39,7 @@ module AudioAddict
|
|
39
39
|
def show_verbose(channels)
|
40
40
|
channels.each do |channel|
|
41
41
|
say ''
|
42
|
-
say "
|
42
|
+
say "g`#{channel.name.ljust 22} `# #{channel.key}"
|
43
43
|
say ''
|
44
44
|
say word_wrap channel.description.to_s
|
45
45
|
say ''
|
@@ -50,7 +50,7 @@ module AudioAddict
|
|
50
50
|
|
51
51
|
say 'Similar Channels:'
|
52
52
|
similar.each do |key, similar_channel|
|
53
|
-
say "-
|
53
|
+
say "- b`#{similar_channel.name.ljust 20}` # #{key}"
|
54
54
|
end
|
55
55
|
say ''
|
56
56
|
end
|
@@ -58,7 +58,7 @@ module AudioAddict
|
|
58
58
|
|
59
59
|
def show_compact(channels)
|
60
60
|
channels.each do |channel|
|
61
|
-
say "
|
61
|
+
say "b`#{channel.key.rjust 25}` g`#{channel.name.strip}`"
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
@@ -36,7 +36,7 @@ module AudioAddict
|
|
36
36
|
def get_command
|
37
37
|
key = args['KEY'].to_sym
|
38
38
|
value = Config.properties[key]
|
39
|
-
say value ? "
|
39
|
+
say value ? "g`#{value}`" : 'r`<Unset>`'
|
40
40
|
end
|
41
41
|
|
42
42
|
def set_command
|
@@ -44,22 +44,22 @@ module AudioAddict
|
|
44
44
|
value = args['VALUE']
|
45
45
|
Config.properties[key] = value
|
46
46
|
Config.save
|
47
|
-
say "
|
47
|
+
say "g`#{key}=#{value}`"
|
48
48
|
end
|
49
49
|
|
50
50
|
def del_command
|
51
51
|
key = args['KEY'].to_sym
|
52
52
|
Config.delete key
|
53
53
|
Config.save
|
54
|
-
say '
|
54
|
+
say 'g`Deleted`'
|
55
55
|
end
|
56
56
|
|
57
57
|
def show_command
|
58
|
-
say "
|
58
|
+
say "mu`# #{Config.path}`"
|
59
59
|
if File.exist? Config.path
|
60
60
|
puts File.read Config.path
|
61
61
|
else
|
62
|
-
say '
|
62
|
+
say 'r`File Not Found`'
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
@@ -70,7 +70,7 @@ module AudioAddict
|
|
70
70
|
|
71
71
|
def guide_command
|
72
72
|
key_guide.each do |key, value|
|
73
|
-
say "
|
73
|
+
say "g`#{key}`"
|
74
74
|
say word_wrap " #{value}"
|
75
75
|
say ''
|
76
76
|
end
|
@@ -88,12 +88,12 @@ module AudioAddict
|
|
88
88
|
|
89
89
|
def verify_and_show_keys(keys, critical: false)
|
90
90
|
problems = 0
|
91
|
-
prefix = critical ? '
|
91
|
+
prefix = critical ? 'r`Error `' : 'y`Warning`'
|
92
92
|
|
93
93
|
keys.each do |key, command|
|
94
94
|
unless Config.has_key? key
|
95
95
|
problems += 1
|
96
|
-
say "#{prefix} : Key
|
96
|
+
say "#{prefix} : Key g`#{key}` is not set. Fix with m`radio #{command}`."
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -102,11 +102,11 @@ module AudioAddict
|
|
102
102
|
|
103
103
|
def key_guide
|
104
104
|
{
|
105
|
-
email: "Last email used for logging in.\nUsually set with
|
106
|
-
session_key: "Used for authentication.\nUsually set with
|
107
|
-
listen_key: "Used for generating playlists.\nUsually set with
|
108
|
-
network: "Specify the AudioAddict network you are currently listening to.\nUsually set with
|
109
|
-
channel: "Specify the AudioAddict channel you are currently listening to.\nUsually set with
|
105
|
+
email: "Last email used for logging in.\nUsually set with m`radio login`.",
|
106
|
+
session_key: "Used for authentication.\nUsually set with m`radio login`.",
|
107
|
+
listen_key: "Used for generating playlists.\nUsually set with m`radio login`.",
|
108
|
+
network: "Specify the AudioAddict network you are currently listening to.\nUsually set with m`radio set`.",
|
109
|
+
channel: "Specify the AudioAddict channel you are currently listening to.\nUsually set with m`radio set`.",
|
110
110
|
like_log: "Specify the path to store all your positive votes.\nIf this is not set, votes will only be sent to AudioAddict and not logged locally.",
|
111
111
|
cache_dir: "Specify the path to store API response cache.\nDefault: ~/.audio_addict/cache",
|
112
112
|
cache_life: "Specify the cache life period.\nDefault: 6h.",
|
@@ -30,12 +30,12 @@ module AudioAddict
|
|
30
30
|
def current_command
|
31
31
|
needs :network, :channel
|
32
32
|
|
33
|
-
say '
|
33
|
+
say 'b`Downloading` : ... '
|
34
34
|
|
35
35
|
track = current_channel.current_track
|
36
36
|
query = track.search_string
|
37
37
|
|
38
|
-
|
38
|
+
say "b`Downloading` : g`#{query}`", replace: true
|
39
39
|
|
40
40
|
Youtube.new(query).get count
|
41
41
|
end
|
@@ -48,7 +48,7 @@ module AudioAddict
|
|
48
48
|
data.each do |line|
|
49
49
|
_network, _channel, artist, song = line.split(' :: ')
|
50
50
|
query = "#{artist}, #{song}"
|
51
|
-
say "\
|
51
|
+
say "\nb`Downloading` : g`#{query}`"
|
52
52
|
Youtube.new(query).get count
|
53
53
|
end
|
54
54
|
end
|
@@ -56,7 +56,7 @@ module AudioAddict
|
|
56
56
|
def search_command
|
57
57
|
query = args['QUERY']
|
58
58
|
|
59
|
-
say "\
|
59
|
+
say "\nb`Downloading` : g`#{query}`"
|
60
60
|
Youtube.new(query).get count
|
61
61
|
end
|
62
62
|
|
@@ -10,10 +10,10 @@ module AudioAddict
|
|
10
10
|
|
11
11
|
def run
|
12
12
|
needs :network, :channel
|
13
|
-
say "
|
13
|
+
say "gu`#{radio.name} > #{current_channel.name}`"
|
14
14
|
say ''
|
15
15
|
tracks.each do |track|
|
16
|
-
say "
|
16
|
+
say "g` #{track.artist.rjust max_artist_len}` : b`#{track.title}`"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -45,7 +45,7 @@ module AudioAddict
|
|
45
45
|
def sort_command
|
46
46
|
needs :like_log
|
47
47
|
log.sort
|
48
|
-
say '
|
48
|
+
say 'g`Sorted`'
|
49
49
|
end
|
50
50
|
|
51
51
|
def browse_command
|
@@ -59,7 +59,7 @@ module AudioAddict
|
|
59
59
|
per_page: page_size
|
60
60
|
|
61
61
|
say 'Songs:'
|
62
|
-
tree[network][channel][artist].each { |song| say "-
|
62
|
+
tree[network][channel][artist].each { |song| say "- g`#{song}`" }
|
63
63
|
say ''
|
64
64
|
|
65
65
|
browse_command if prompt.yes?('Again?')
|
@@ -71,7 +71,7 @@ module AudioAddict
|
|
71
71
|
|
72
72
|
if filename
|
73
73
|
File.write filename, yaml
|
74
|
-
say "
|
74
|
+
say "g`Saved #{filename}`"
|
75
75
|
else
|
76
76
|
puts yaml
|
77
77
|
end
|
@@ -84,7 +84,7 @@ module AudioAddict
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def page_size
|
87
|
-
@page_size ||=
|
87
|
+
@page_size ||= terminal_height - 4
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -12,7 +12,7 @@ module AudioAddict
|
|
12
12
|
proceed = true
|
13
13
|
|
14
14
|
if radio.api.logged_in?
|
15
|
-
say "
|
15
|
+
say "y`You are already logged in as` yu`#{Config.email}`"
|
16
16
|
proceed = prompt.yes? 'Login again?'
|
17
17
|
end
|
18
18
|
|
@@ -28,9 +28,9 @@ module AudioAddict
|
|
28
28
|
if user && pass
|
29
29
|
say 'Logging in... '
|
30
30
|
radio.api.login user, pass
|
31
|
-
|
31
|
+
say 'g`Saved`', replace: true
|
32
32
|
else
|
33
|
-
say '
|
33
|
+
say 'r`Cancelled`'
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -11,13 +11,13 @@ module AudioAddict
|
|
11
11
|
def run
|
12
12
|
needs :network, :channel
|
13
13
|
|
14
|
-
say "
|
15
|
-
say "
|
16
|
-
say '
|
14
|
+
say "b` Network `: g`#{radio.name}` # #{radio.network}"
|
15
|
+
say "b` Channel `: g`#{current_channel.name}` # #{current_channel.key}"
|
16
|
+
say 'b` Track `: ... '
|
17
17
|
|
18
18
|
track = current_channel.current_track
|
19
|
-
|
20
|
-
say "
|
19
|
+
say "b` Track `: g`#{track.title.strip}`", replace: true
|
20
|
+
say "b` By `: g`#{track.artist.strip}`"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -26,7 +26,7 @@ module AudioAddict
|
|
26
26
|
name = args['NAME']
|
27
27
|
outfile = "#{name}.yml"
|
28
28
|
|
29
|
-
say "
|
29
|
+
say "r`Warningr`: g`#{outfile}` already exists!" if File.exist? outfile
|
30
30
|
proceed = prompt.yes? "Create #{outfile}?"
|
31
31
|
return unless proceed
|
32
32
|
|
@@ -46,11 +46,11 @@ module AudioAddict
|
|
46
46
|
outfile = "#{name}.pls"
|
47
47
|
|
48
48
|
if File.exist? infile
|
49
|
-
say "
|
49
|
+
say "r`Warning`: g`#{outfile}` already exists!" if File.exist? outfile
|
50
50
|
proceed = prompt.yes? "Create #{outfile}?"
|
51
51
|
generate_playlist infile, outfile if proceed
|
52
52
|
else
|
53
|
-
say "
|
53
|
+
say "r`Cannot find #{infile}`"
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -68,7 +68,7 @@ module AudioAddict
|
|
68
68
|
data[:channels] = channels
|
69
69
|
|
70
70
|
File.write outfile, data.to_yaml
|
71
|
-
say "Saved
|
71
|
+
say "Saved g`#{outfile}`"
|
72
72
|
end
|
73
73
|
|
74
74
|
def generate_playlist(infile, outfile)
|
@@ -92,7 +92,7 @@ module AudioAddict
|
|
92
92
|
output = "#{output.join("\n")}\n"
|
93
93
|
|
94
94
|
File.write outfile, output
|
95
|
-
say "Saved
|
95
|
+
say "Saved g`#{outfile}`"
|
96
96
|
end
|
97
97
|
|
98
98
|
def template_params(channel_key)
|
@@ -3,7 +3,7 @@ module AudioAddict
|
|
3
3
|
class SetCmd < Base
|
4
4
|
summary 'Set the radio network and channel'
|
5
5
|
|
6
|
-
help 'This command provides both interactive and non-interactive means of storing the
|
6
|
+
help 'This command provides both interactive and non-interactive means of storing the currently active channel and network in the configuration file.'
|
7
7
|
|
8
8
|
usage 'radio set [CHANNEL NETWORK]'
|
9
9
|
usage 'radio set --help'
|
@@ -59,7 +59,7 @@ module AudioAddict
|
|
59
59
|
elsif radio.search(channel).any?
|
60
60
|
channel_menu channel
|
61
61
|
else
|
62
|
-
say "
|
62
|
+
say "r`Invalid channel: #{radio.name} > #{channel}`"
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
@@ -100,13 +100,13 @@ module AudioAddict
|
|
100
100
|
def save_channel(channel, echo: true)
|
101
101
|
Config.channel = channel
|
102
102
|
Config.save
|
103
|
-
say "Channel :
|
103
|
+
say "Channel : g`#{radio.name} > #{current_channel.name}` # #{channel}" if echo
|
104
104
|
end
|
105
105
|
|
106
106
|
def save_network(network, echo: true)
|
107
107
|
Config.network = network
|
108
108
|
Config.save
|
109
|
-
say "Network :
|
109
|
+
say "Network : g`#{radio.name}` # #{network}" if echo
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
data/lib/audio_addict/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: audio_addict
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Ben Shitrit
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colsole
|
@@ -16,20 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.8.1
|
19
|
+
version: 1.0.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 0.8.1
|
26
|
+
version: 1.0.0
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: httparty
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,6 +94,48 @@ dependencies:
|
|
100
94
|
- - "~>"
|
101
95
|
- !ruby/object:Gem::Version
|
102
96
|
version: '0.19'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: base64
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: bigdecimal
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: csv
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
103
139
|
description: Command line for playlist management and voting for AudioAddict radio
|
104
140
|
networks
|
105
141
|
email: db@dannyben.com
|
@@ -142,7 +178,7 @@ licenses:
|
|
142
178
|
- MIT
|
143
179
|
metadata:
|
144
180
|
rubygems_mfa_required: 'true'
|
145
|
-
post_install_message:
|
181
|
+
post_install_message:
|
146
182
|
rdoc_options: []
|
147
183
|
require_paths:
|
148
184
|
- lib
|
@@ -150,15 +186,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
150
186
|
requirements:
|
151
187
|
- - ">="
|
152
188
|
- !ruby/object:Gem::Version
|
153
|
-
version:
|
189
|
+
version: 3.0.0
|
154
190
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
191
|
requirements:
|
156
192
|
- - ">="
|
157
193
|
- !ruby/object:Gem::Version
|
158
194
|
version: '0'
|
159
195
|
requirements: []
|
160
|
-
rubygems_version: 3.
|
161
|
-
signing_key:
|
196
|
+
rubygems_version: 3.5.6
|
197
|
+
signing_key:
|
162
198
|
specification_version: 4
|
163
199
|
summary: AudioAddict Command Line
|
164
200
|
test_files: []
|