doubanfm 0.0.3 → 0.0.4

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
  SHA1:
3
- metadata.gz: 3861716d30ebf71c7ca9da1eff05c42655ee5165
4
- data.tar.gz: 1cf80994a730ed474c4cf8556c764980f14a297a
3
+ metadata.gz: 018dd831b6f7ca1807a4e81723a90243353bb69d
4
+ data.tar.gz: f817d7eceae4da6b6cd386f99235757f7ba316e1
5
5
  SHA512:
6
- metadata.gz: 95cbf1b10fe56afae46919d2bde967e83a775051a4faaa2504daefe055fd1e3750e0798c86c20a29400afb0911d84af76f25ba39a2eac803f06a28232e4f59f8
7
- data.tar.gz: 5017daacf5e6f2521707c98bf207c027e1973b2dee3c2dc777056969173c76d9c64fcb8540fc1cf6b8274d270b8fc2caa3969bfbffc1b9102b0e4720d07a127e
6
+ metadata.gz: 84ffd7bc2aa7cc3e0739e07f11ff6404a53c96b989edeb1a53f13409a837872f2239abaeeb76dc16e8be0bf721437efcfa3a9e403d8fcaec750f3e1021c4ad78
7
+ data.tar.gz: 8e26dd2c80f2c69a77fbd44607bc1288d3d6f556636a0efe5913db92d6b116989fedee951c8fbbbebdc36834b68a6d49b15b031d1b031bcaa372b56cf0c62df1
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Doubanfm
2
2
 
3
- A Ruby wrapper of douban.fm api.
3
+ Just another DoubanFM client.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,17 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ $ doubanfm
22
+ You can use \<Tab\> to list all valid command.
23
+
24
+ ## Todo
25
+
26
+ - [ ] Allow user to throw a song into trash bin
27
+ - [ ] Allow user to select specific channel
28
+ - [ ] Introduce a better console interface with `curses` or something similar
29
+ - [ ] Refactor all
30
+ - [ ] Use a audio play gem to replace `mpg123` program
31
+ - [ ] Maybe I'll use JRuby and SWT to implement GUI
22
32
 
23
33
  ## Contributing
24
34
 
@@ -47,13 +47,10 @@ module DoubanFM
47
47
  return true
48
48
  end
49
49
 
50
- def new_playlist
51
- fetch_playlist(NEW_PLAYLIST)
50
+ def set_channel(channel_id)
51
+ @current_channel = channel_id
52
52
  end
53
53
 
54
- def next_playlist
55
- fetch_playlist(NEXT_PLAYLIST)
56
- end
57
54
 
58
55
  def next_song
59
56
  if @current_song == @playlist.last
@@ -64,6 +61,56 @@ module DoubanFM
64
61
  @current_song = @playlist[next_song_pos]
65
62
  end
66
63
 
64
+ def rate
65
+ return unless user_logged?
66
+ return if like?
67
+
68
+ params = {
69
+ app_name: APP_NAME,
70
+ version: APP_VERSION,
71
+ user_id: @user_info[:user_id],
72
+ expire: @user_info[:expire],
73
+ token: @user_info[:token],
74
+ channel: @current_channel,
75
+ sid: @current_song[:sid],
76
+ type: RATE
77
+ }
78
+
79
+ rate_uri = URI('http://www.douban.com/j/app/radio/people')
80
+ rate_uri.query = URI.encode_www_form(params)
81
+
82
+ @playlist = JSON.parse(
83
+ @client.get(rate_uri),
84
+ symbolize_names: true
85
+ )[:song]
86
+ @current_song = @playlist.first
87
+ end
88
+
89
+ def unrate
90
+ return unless user_logged?
91
+ return unless like?
92
+
93
+ params = {
94
+ app_name: APP_NAME,
95
+ version: APP_VERSION,
96
+ user_id: @user_info[:user_id],
97
+ expire: @user_info[:expire],
98
+ token: @user_info[:token],
99
+ channel: @current_channel,
100
+ sid: @current_song[:sid],
101
+ type: UNRATE
102
+ }
103
+
104
+ rate_uri = URI('http://www.douban.com/j/app/radio/people')
105
+ rate_uri.query = URI.encode_www_form(params)
106
+
107
+ @playlist = JSON.parse(
108
+ @client.get(rate_uri),
109
+ symbolize_names: true
110
+ )[:song]
111
+ @current_song = @playlist.first
112
+ end
113
+
67
114
  private
68
115
  def fetch_channels
69
116
  @channels = JSON.parse(
@@ -75,6 +122,7 @@ module DoubanFM
75
122
  def fetch_playlist(type)
76
123
  if @current_channel == INVALID_CHANNEL_ID
77
124
  channel_id = select_random_channel
125
+ @current_channel = channel_id
78
126
  else
79
127
  channel_id = @current_channel
80
128
  end
@@ -107,5 +155,17 @@ module DoubanFM
107
155
  which = Random.new.rand(first_channel ... @channels.size)
108
156
  @channels[which][:channel_id]
109
157
  end
158
+
159
+ def new_playlist
160
+ fetch_playlist(NEW_PLAYLIST)
161
+ end
162
+
163
+ def next_playlist
164
+ fetch_playlist(NEXT_PLAYLIST)
165
+ end
166
+
167
+ def like?
168
+ return @current_song[:like] == 1 ? true : false;
169
+ end
110
170
  end
111
171
  end
@@ -8,23 +8,30 @@ module DoubanFM
8
8
  end
9
9
 
10
10
  def start
11
+ play
12
+
11
13
  loop do
12
- cmd = ask("DoubanFM> ", %w{login play skip quit}) do |q|
14
+ cmd = ask("DoubanFM> ", %w{login skip rate unrate quit}) do |q|
15
+ q.overwrite = true
13
16
  q.readline = true
14
17
  end
15
18
 
16
19
  case cmd
17
20
  when 'login'
18
21
  login
19
- when 'play'
20
- play
21
22
  when 'skip'
22
23
  skip
24
+ when 'rate'
25
+ say('请先登录') unless @client.user_logged?
26
+ @client.rate
27
+ when 'unrate'
28
+ say('请先登录') unless @client.user_logged?
29
+ @client.unrate
23
30
  when 'quit'
24
31
  kill_player_thread
25
32
  break
26
33
  else
27
- puts 'Nothing to do'
34
+ say('Nothing to do')
28
35
  end
29
36
  end
30
37
  end
@@ -66,9 +73,10 @@ module DoubanFM
66
73
 
67
74
  @waiting = false
68
75
 
76
+ say("Playing #{@client.current_song[:title]}")
69
77
  @player_pid = spawn("mpg123 #{@client.current_song[:url]} > /dev/null 2>&1")
70
78
 
71
- Process.wait
79
+ Process.wait(@player_pid)
72
80
  @waiting = true
73
81
 
74
82
  @semaphore.unlock
@@ -1,3 +1,3 @@
1
1
  module DoubanFM
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doubanfm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edgar Wang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-13 00:00:00.000000000 Z
11
+ date: 2013-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline