ruby-mpd-client 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8ca78849c735d15541f0f0e04e83ac1af66d71c3c3202739a0718f7cfc7860e4
4
- data.tar.gz: db532da5093220f87880cd0d47137866b089be98ba8d03a7aa89334869b6da9d
3
+ metadata.gz: 8418f0f9f6feb888fefb0c1bba3dc1d8992ac221b6e9381278d27091b945a1e6
4
+ data.tar.gz: 65b8aa6e6f008f339de0766f4f06def5b0f6255db86c60997b0ace019557d240
5
5
  SHA512:
6
- metadata.gz: 0d23063c2519c020bcf16009a1f6f1874b2d4f53ad41879fc023b5b460e9a531f13a5a665574399cef5836bd9fadbfd4213d2a64f8cef966fa2b8c2dd79194e4
7
- data.tar.gz: 0423b775979eb61f9eff55fcfd05d29e6375a17df5e1caf2bb6b9828d7b2d3c32e84e10c792ade9ab004f0462a91292d225e0851f9164a417c6f55c1b698504d
6
+ metadata.gz: a954040ae3a4828b5b456d4d006ba02d2017b798a03249426db0661ff5e3c16fd439f581f59f03a543ef3db0eed0871183012352d155189b0b337f931163dc8a
7
+ data.tar.gz: ada812509e41842636a482d76821e2d75f2d72424410ff8572c29d399f9efc8b8cfdc4bdf9d7d1a36240f73472d1aa4fb86c9d0f3dc25d9b7d0aa813294ef490
@@ -8,3 +8,4 @@ deploy:
8
8
  secure: CCtmgUnWoiG4tKRalp9kfEcaeDUfipES0mcWPV4K0D/K651nxZ0kHe+VV+3rpvV1KDs4i5W+TosVvpH5lDL7+oALLFTsYgo3iam+kzMLfoskkZUuizUDxYjXrWI0T+SM0gL3Ax1J9oJ0cd7j1sUGi5TZ/IHXrKknm1yqFIx83mgKCFxYKJUAwQuwpo924ukqyQ0IsJtYX7AJ31hQwFBZSscJbriaxsz3dN+ptmvYVt9/+oIowHrvZCFnlgejel/eZ9iKCMR8buxx1RF3Q3y7LZkpMb20UBfjMwUkz/XBXGFCFVUaCLEcdFnAuoRePJ8a+q3Qkd0wZp+5g2offguVycTWsPTGgSjSAXcPUK0fOnE6bsBZ9XnkAiwkPtxO3MeG7iBcGBX2XY/Tzl+8EW2FgGeIICBh5sg+UqmrGAuqzmtgrJJwOaBeyLEbAKemAdPRfN7M0Hq1DgbOHchttmiCAY1Ja/RBiYwbEkZsPn9VI2tH3CUvdqc0B4jPV05OKU1sv06hHKJTWoCjsmvd52Tr0Kbr5ofBvLMj+uHnyCx78SwfReVCPEb2PzK5GUBG6+Ufu8UOTFdlS8gDmSO09R/qd/kSILvxCLntNVQAn/aUlnZ0aBJURxhoTQkKRSBGcGrOUXhMKnj3jnwZw1othJ5xxiSXy6fM/8JrsxyPH7TalT8=
9
9
  on:
10
10
  branch: master
11
+ tags: true
data/README.md CHANGED
@@ -1,10 +1,15 @@
1
1
  # Ruby MPD client
2
2
 
3
+ master: [![Build Status](https://travis-ci.org/Nondv/ruby-mpd-client.svg?branch=master)](https://travis-ci.org/Nondv/ruby-mpd-client)
4
+ develop: [![Build Status](https://travis-ci.org/Nondv/ruby-mpd-client.svg?branch=develop)](https://travis-ci.org/Nondv/ruby-mpd-client)
5
+
3
6
  Yet another ruby mpd client.
4
7
 
5
8
  This gem is for my own usage (practicing my programming skills). But
6
9
  I would be glad to know if you found it useful.
7
10
 
11
+ See on [rubydoc](http://www.rubydoc.info/gems/ruby-mpd-client)
12
+
8
13
  ## Installation
9
14
 
10
15
  ```ruby
@@ -27,6 +32,7 @@ MPD::Commands::Next.new.execute
27
32
  #
28
33
  conn = MPD::Connection.new(host: 'localhost', port: 6600)
29
34
  conn.connect
35
+ conn.gets # first MPD response is always "OK <version>\n"
30
36
  MPD::Commands::Next.new(connection: conn).execute
31
37
  MPD::Commands::Pause.new(connection: conn).execute
32
38
  ```
@@ -44,18 +44,36 @@ module MPD
44
44
  const_set(class_name, klass)
45
45
  end
46
46
 
47
- define_trivial_command(:Pause, 'pause 1')
48
- define_trivial_command(:Stop, 'stop')
49
- define_trivial_command(:Previous, 'previous')
50
- define_trivial_command(:Next, 'next')
51
- define_trivial_command(:CurrentPlaylistClear, 'clear')
52
-
53
- define_text_argument_command :PlaylistDelete, :rm
54
- define_text_argument_command :PlaylistSave, :save
55
- define_text_argument_command :PlaylistLoad, :load
56
-
57
- %w[Consume Crossfade Random Repeat Single].each do |class_name|
58
- define_option_command(class_name, class_name.downcase)
59
- end
47
+ # @!macro [attach] define_trivial_command
48
+ # @!parse
49
+ # # Sends "$2" to MPD.
50
+ # class Commands::$1; end
51
+ define_trivial_command('Pause', 'pause 1')
52
+ define_trivial_command('Stop', 'stop')
53
+ define_trivial_command('Previous', 'previous')
54
+ define_trivial_command('Next', 'next')
55
+ define_trivial_command('CurrentPlaylistClear', 'clear')
56
+
57
+ # @!macro [attach] define_text_argument_command
58
+ # @!parse
59
+ # # Sends '$2 "<ARGUMENT>"' to MPD
60
+ # class Commands::$1; end
61
+ define_text_argument_command 'PlaylistDelete', :rm
62
+ define_text_argument_command 'PlaylistSave', :save
63
+ define_text_argument_command 'PlaylistLoad', :load
64
+ define_text_argument_command 'PlaylistClear', :playlistclear
65
+
66
+ # @!macro [attach] define_option_command
67
+ # @!parse
68
+ # # Sends '$2 <1/0>' to MPD
69
+ # class Commands::$1
70
+ # # @param state [Boolean]
71
+ # def execute(state); end
72
+ # end
73
+ define_option_command 'Consume', 'consume'
74
+ define_option_command 'Crossfade', 'crossfade'
75
+ define_option_command 'Random', 'random'
76
+ define_option_command 'Repeat', 'repeat'
77
+ define_option_command 'Single', 'single'
60
78
  end
61
79
  end
@@ -0,0 +1,20 @@
1
+ require 'mpd/commands/abstract'
2
+
3
+ module MPD
4
+ module Commands
5
+ #
6
+ # Adds song(s) to specific playlist
7
+ # `songs` is an array of URIs.
8
+ #
9
+ class PlaylistAdd < Abstract
10
+ #
11
+ # `name` is playlist name.
12
+ # `songs` is position (as int) or range.
13
+ #
14
+ def execute(name, songs)
15
+ return exec_command("playlistadd \"#{name}\" \"#{songs}\"") unless songs.is_a?(Array)
16
+ exec_command_list(songs.map { |s| "playlistadd \"#{name}\" \"#{s}\"" })
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ require 'mpd/commands/abstract'
2
+
3
+ module MPD
4
+ module Commands
5
+ #
6
+ # Info about songs in specific playlist.
7
+ # MPD command: "listplaylistinfo <NAME>"
8
+ #
9
+ class PlaylistInfo < Abstract
10
+ # `songs` can be range
11
+ # or integer (to show info about one song)
12
+ # or completely ommited (to show info about all songs)
13
+ def execute(name)
14
+ response = super("listplaylistinfo \"#{name}\"")
15
+ Playlist.from_response(response)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ require 'mpd/commands/abstract'
2
+
3
+ module MPD
4
+ module Commands
5
+ #
6
+ # List of saved playlists.
7
+ #
8
+ class PlaylistList < Abstract
9
+ def execute
10
+ exec_command('listplaylists')
11
+ .key_value_pairs
12
+ .select { |k, v| k == 'playlist' }
13
+ .map(&:last)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -3,6 +3,7 @@ module MPD
3
3
  # Just a frozen string with some useful methods
4
4
  #
5
5
  class ServerResponse < String
6
+ # Reads data from `MPD::Connection` instance to next OK/ACK
6
7
  def self.from_connection(conn)
7
8
  line = ''
8
9
  buffer = ''
@@ -24,6 +25,16 @@ module MPD
24
25
  key_value_pairs.to_h
25
26
  end
26
27
 
28
+ #
29
+ # MPD often sends data as:
30
+ #
31
+ # id: 1
32
+ # title: some title
33
+ # id: 2
34
+ # title: another title
35
+ #
36
+ # So this method comes useful.
37
+ #
27
38
  def key_value_pairs
28
39
  content.split("\n").map do |line|
29
40
  index = line.index(':')
@@ -39,6 +50,7 @@ module MPD
39
50
  lines[0..-2].join
40
51
  end
41
52
 
53
+ # last line of response
42
54
  def status
43
55
  lines.last.chomp
44
56
  end
@@ -1,3 +1,3 @@
1
1
  module MPD
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-mpd-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitriy Non
@@ -77,6 +77,9 @@ files:
77
77
  - lib/mpd/commands/current_song.rb
78
78
  - lib/mpd/commands/ping.rb
79
79
  - lib/mpd/commands/play.rb
80
+ - lib/mpd/commands/playlist_add.rb
81
+ - lib/mpd/commands/playlist_info.rb
82
+ - lib/mpd/commands/playlist_list.rb
80
83
  - lib/mpd/commands/set_volume.rb
81
84
  - lib/mpd/commands/status.rb
82
85
  - lib/mpd/connection.rb