groove-dl 0.2.0 → 0.3.0

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.
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ module GrooveDl
3
+ # Widgets components
4
+ module Widgets
5
+ # Search section
6
+ class Search < Events
7
+ attr_accessor :data, :store
8
+
9
+ TYPE_PLAYLISTS,
10
+ TYPE_SONGS,
11
+ TYPE_PLAYLIST_ID = *(0..2).to_a
12
+
13
+ COLUMN_CHECKBOX,
14
+ COLUMN_ID,
15
+ COLUMN_NAME,
16
+ COLUMN_AUTHOR,
17
+ COLUMN_SONG = *(0..4).to_a
18
+
19
+ def on_search_entry_activate
20
+ @app.get_object('search_button').signal_emit('clicked')
21
+ end
22
+
23
+ def on_search_button_clicked
24
+ type = @app.get_object('search_type').active_id.to_i
25
+ query = @app.get_object('search_entry').text
26
+ return if query.empty?
27
+
28
+ case type
29
+ when TYPE_PLAYLISTS
30
+ results = @client.search('Playlists', query)
31
+ when TYPE_SONGS
32
+ results = @client.search('Songs', query)
33
+ when TYPE_PLAYLIST_ID
34
+ playlist = Grooveshark::Playlist.new(@client, 'playlist_id' => query)
35
+ results = playlist.load_songs
36
+ end
37
+
38
+ @data = {}
39
+ @store = @app.get_object('search_list_store')
40
+ @store.clear
41
+ results.each do |element|
42
+ iter = @store.append
43
+ iter[COLUMN_CHECKBOX] = false
44
+ if element.is_a?(Grooveshark::Song)
45
+ @data[element.id.to_i] = element
46
+ iter[COLUMN_ID] = element.id.to_i
47
+ iter[COLUMN_NAME] = element.name
48
+ iter[COLUMN_AUTHOR] = element.artist
49
+ iter[COLUMN_SONG] = element.album
50
+ else
51
+ @data[element.id.to_i] = element
52
+ iter[COLUMN_ID] = element.id.to_i.to_i
53
+ iter[COLUMN_NAME] = element.name
54
+ iter[COLUMN_AUTHOR] = element.username
55
+ iter[COLUMN_SONG] = element.num_songs.to_s
56
+ end
57
+ end
58
+ end
59
+
60
+ def on_search_list_toggle_toggled(_cell, path_str)
61
+ path = Gtk::TreePath.new(path_str)
62
+ iter = @store.get_iter(path)
63
+ fixed = iter[COLUMN_CHECKBOX]
64
+ fixed ^= 1
65
+ iter[COLUMN_CHECKBOX] = fixed
66
+ end
67
+
68
+ def on_search_list_selected_clicked
69
+ @store.each do |_model, _path, iter|
70
+ fixed = iter[COLUMN_CHECKBOX]
71
+ fixed ^= 1
72
+ iter[COLUMN_CHECKBOX] = fixed
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -42,16 +42,17 @@ module GrooveDl
42
42
  end
43
43
 
44
44
  it 'should render songs' do
45
- playlist = { 'playlist_id' => 1,
46
- 'name' => 'Someting',
47
- 'f_name' => 'GoT',
48
- 'num_songs' => 1 }
45
+ playlist = Grooveshark::Playlist.new(double,
46
+ 'playlist_id' => 1,
47
+ 'name' => 'Someting',
48
+ 'f_name' => 'GoT',
49
+ 'num_songs' => 1)
49
50
  displayer = Displayer.new([playlist], 'Playlists')
50
51
 
51
52
  str = '+----+----------+--------+----------+
52
53
  | Playlists |
53
54
  +----+----------+--------+----------+
54
- | Id | Nam | Author | NumSongs |
55
+ | Id | Name | Author | NumSongs |
55
56
  +----+----------+--------+----------+
56
57
  | 1 | Someting | GoT | 1 |
57
58
  +----+----------+--------+----------+'
@@ -104,9 +104,9 @@ module GrooveDl
104
104
 
105
105
  it 'should process response in gui mode' do
106
106
  Dir.mkdir('/tmp')
107
- stub_const('Widgets::Download::List::Queue::COLUMN_PATH', 0)
108
- stub_const('Widgets::Download::List::Queue::COLUMN_PGBAR_VALUE', 1)
109
- stub_const('Widgets::Download::List::Queue::COLUMN_PGBAR_TEXT', 2)
107
+ stub_const('Widgets::Download::QUEUE_COLUMN_PATH', 0)
108
+ stub_const('Widgets::Download::QUEUE_COLUMN_PGBAR_VALUE', 1)
109
+ stub_const('Widgets::Download::QUEUE_COLUMN_PGBAR_TEXT', 2)
110
110
  iter = []
111
111
  iter[0] = '/tmp/got-test.mp3'
112
112
  response = double
@@ -128,9 +128,9 @@ module GrooveDl
128
128
 
129
129
  it 'should process response in gui mode and does not download twice' do
130
130
  Dir.mkdir('/tmp')
131
- stub_const('Widgets::Download::List::Queue::COLUMN_PATH', 0)
132
- stub_const('Widgets::Download::List::Queue::COLUMN_PGBAR_VALUE', 1)
133
- stub_const('Widgets::Download::List::Queue::COLUMN_PGBAR_TEXT', 2)
131
+ stub_const('Widgets::Download::QUEUE_COLUMN_PATH', 0)
132
+ stub_const('Widgets::Download::QUEUE_COLUMN_PGBAR_VALUE', 1)
133
+ stub_const('Widgets::Download::QUEUE_COLUMN_PGBAR_TEXT', 2)
134
134
  iter = []
135
135
  iter[0] = '/tmp/got-test.mp3'
136
136
  response = double
@@ -159,9 +159,9 @@ module GrooveDl
159
159
  it 'should download in gui mode' do
160
160
  @downloader.type = 'gui'
161
161
  Dir.mkdir('/tmp')
162
- stub_const('Widgets::Download::List::Queue::COLUMN_PATH', 0)
163
- stub_const('Widgets::Download::List::Queue::COLUMN_PGBAR_VALUE', 1)
164
- stub_const('Widgets::Download::List::Queue::COLUMN_PGBAR_TEXT', 2)
162
+ stub_const('Widgets::Download::QUEUE_COLUMN_PATH', 0)
163
+ stub_const('Widgets::Download::QUEUE_COLUMN_PGBAR_VALUE', 1)
164
+ stub_const('Widgets::Download::QUEUE_COLUMN_PGBAR_TEXT', 2)
165
165
  iter = []
166
166
  iter[0] = '/tmp/got-test.mp3'
167
167
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groove-dl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre Rambaud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-02 00:00:00.000000000 Z
11
+ date: 2015-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slop
@@ -164,7 +164,8 @@ dependencies:
164
164
  - - ~>
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0.25'
167
- description: Grooveshark downloader allow you to choosesongs and download them.
167
+ description: Grooveshark downloader allow you to search, choose playlists and songs
168
+ and download them.
168
169
  email: pierre.rambaud86@gmail.com
169
170
  executables:
170
171
  - groove-dl
@@ -182,6 +183,7 @@ files:
182
183
  - Rakefile
183
184
  - bin/groove-dl
184
185
  - bin/groove-dl-cli
186
+ - glade/groove-dl.glade
185
187
  - groove-dl.gemspec
186
188
  - lib/groove-dl.rb
187
189
  - lib/groove-dl/app.rb
@@ -192,14 +194,9 @@ files:
192
194
  - lib/groove-dl/downloader.rb
193
195
  - lib/groove-dl/errors.rb
194
196
  - lib/groove-dl/version.rb
195
- - lib/groove-dl/widgets/download/bar.rb
196
- - lib/groove-dl/widgets/download/book.rb
197
- - lib/groove-dl/widgets/download/list/failed.rb
198
- - lib/groove-dl/widgets/download/list/queue.rb
199
- - lib/groove-dl/widgets/download/list/success.rb
200
- - lib/groove-dl/widgets/menu/success.rb
201
- - lib/groove-dl/widgets/search/bar.rb
202
- - lib/groove-dl/widgets/search/list.rb
197
+ - lib/groove-dl/widgets/download.rb
198
+ - lib/groove-dl/widgets/events.rb
199
+ - lib/groove-dl/widgets/search.rb
203
200
  - spec/groove-dl/cli_spec.rb
204
201
  - spec/groove-dl/displayer_spec.rb
205
202
  - spec/groove-dl/downloader_spec.rb
@@ -219,7 +216,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
219
216
  requirements:
220
217
  - - '>='
221
218
  - !ruby/object:Gem::Version
222
- version: 1.9.2
219
+ version: 1.9.3
223
220
  required_rubygems_version: !ruby/object:Gem::Requirement
224
221
  requirements:
225
222
  - - '>='
@@ -230,6 +227,5 @@ rubyforge_project:
230
227
  rubygems_version: 2.0.14
231
228
  signing_key:
232
229
  specification_version: 4
233
- summary: Download grooveshark songs.
230
+ summary: Grooveshark songs downloader.
234
231
  test_files: []
235
- has_rdoc:
@@ -1,96 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module GrooveDl
3
- # Widgets components
4
- module Widgets
5
- # Download section
6
- module Download
7
- # Download bar
8
- class Bar < Gtk::Box
9
- attr_reader :type, :query
10
-
11
- ##
12
- # Initialize widgets
13
- #
14
- # @param [Grooveshark::Client] client Grooveshark client
15
- # @param [Gtk::Window] window Gtk app
16
- #
17
- def load(_client, window)
18
- set_name('download_bar')
19
-
20
- download_box = Gtk::Box.new(:horizontal, 6)
21
-
22
- add_button = Gtk::Button.new(stock_id: Gtk::Stock::ADD)
23
-
24
- add_button.signal_connect('released') do
25
- l = window.find_by_name('download_list')
26
- l.store.clear
27
- search_list = window.find_by_name('search_list')
28
- selected = {}
29
- column_id = GrooveDl::Widgets::Search::List::COLUMN_ID
30
- column_checkbox = GrooveDl::Widgets::Search::List::COLUMN_CHECKBOX
31
- search_list.store.each do |_model, _path, iter|
32
- next unless iter[column_checkbox]
33
- selected[iter[column_id]] = search_list.data[iter[column_id]]
34
- end
35
-
36
- l.create_model(selected)
37
- end
38
-
39
- download_box.pack_start(add_button,
40
- expand: false,
41
- fill: true,
42
- padding: 5)
43
-
44
- directory_chooser =
45
- Gtk::FileChooserButton.new('Select directory',
46
- Gtk::FileChooser::Action::SELECT_FOLDER)
47
- directory_chooser.filename = Dir.tmpdir
48
- directory_chooser.set_name('directory_chooser')
49
- download_box.pack_start(directory_chooser,
50
- expand: true,
51
- fill: true,
52
- padding: 5)
53
-
54
- concurrency_entry = Gtk::Entry.new
55
- concurrency_entry.set_name('concurrency_entry')
56
- concurrency_entry.text = '5'
57
-
58
- concurrency_label = Gtk::Label.new('Concurrency', true)
59
- concurrency_label.mnemonic_widget = concurrency_entry
60
-
61
- download_box.pack_start(concurrency_label,
62
- expand: false,
63
- fill: false,
64
- padding: 5)
65
- download_box.pack_start(concurrency_entry,
66
- expand: false,
67
- fill: false,
68
- padding: 5)
69
-
70
- concurrency_entry.signal_connect('changed') do
71
- value = concurrency_entry.text.to_i
72
- concurrency_entry.text = value.to_s unless value == 0
73
- end
74
-
75
- download_button = Gtk::Button.new(stock_id: Gtk::Stock::SAVE)
76
-
77
- download_button.signal_connect('released') do
78
- download_list = window.find_by_name('download_list')
79
- next if download_list.queue.zero?
80
- download_button.sensitive = false
81
- download_list.download
82
- end
83
-
84
- download_box.pack_start(download_button,
85
- expand: false,
86
- fill: true,
87
- padding: 5)
88
-
89
- pack_start(download_box,
90
- expand: false,
91
- padding: 10)
92
- end
93
- end
94
- end
95
- end
96
- end
@@ -1,77 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module GrooveDl
3
- # Widgets components
4
- module Widgets
5
- # Download section
6
- module Download
7
- # Download book
8
- class Book < Gtk::Notebook
9
- attr_reader :window
10
-
11
- QUEUE = 'Queue (%d)'
12
- SUCCESS = 'Success (%d)'
13
- FAILED = 'Failed (%d)'
14
-
15
- ##
16
- # Initialize widgets
17
- #
18
- # @param [Grooveshark::Client] client Grooveshark client
19
- # @param [Gtk::Window] window Gtk app
20
- #
21
- def load(client, window)
22
- @window = window
23
- set_name('download_book')
24
- set_tab_pos(Gtk::PositionType::TOP)
25
-
26
- # Download list
27
- download_list = Widgets::Download::List::Queue.new(:vertical, 6)
28
- download_list.set_name('download_list')
29
- download_list.load(client, window)
30
-
31
- @download_label = Gtk::Label.new(QUEUE % 0)
32
- @download_label.set_name('download_label')
33
- append_page(download_list, @download_label)
34
-
35
- # Success menu
36
- menu_success = Widgets::Menu::Success.new
37
- menu_success.load(client, window)
38
-
39
- # Success list
40
- download_success_list =
41
- Widgets::Download::List::Success.new(:vertical, 6)
42
- download_success_list.set_name('download_success_list')
43
- download_success_list.load(client, window, menu_success)
44
-
45
- @download_success_label = Gtk::Label.new(SUCCESS % 0)
46
- @download_success_label.set_name('download_success_label')
47
- append_page(download_success_list, @download_success_label)
48
-
49
- # Failed list
50
- download_failed_list =
51
- Widgets::Download::List::Failed.new(:vertical, 6)
52
- download_failed_list.set_name('download_failed_list')
53
- download_failed_list.load(client, window)
54
-
55
- @download_failed_label = Gtk::Label.new(FAILED % 0)
56
- @download_failed_label.set_name('download_failed_label')
57
- append_page(download_failed_list, @download_failed_label)
58
- end
59
-
60
- ##
61
- # Set label for page in notebook element
62
- #
63
- # @param [String] type Page type
64
- # @param [Integer] nb Number of element in this page
65
- #
66
- def set_label(type, nb)
67
- element = @download_label if type == 'QUEUE'
68
- element = @download_success_label if type == 'SUCCESS'
69
- element = @download_failed_label if type == 'FAILED'
70
-
71
- return if element.nil?
72
- element.set_text(Book.const_get(type.upcase) % nb)
73
- end
74
- end
75
- end
76
- end
77
- end
@@ -1,75 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module GrooveDl
3
- # Widgets components
4
- module Widgets
5
- # Download section
6
- module Download
7
- # List page
8
- module List
9
- # Failed tree
10
- class Failed < Gtk::Box
11
- attr_reader :store, :data
12
-
13
- COLUMN_PATH,
14
- COLUMN_REASON = *(0..1).to_a
15
-
16
- ##
17
- # Initialize widgets
18
- #
19
- # @param [Grooveshark::Client] client Grooveshark client
20
- # @param [Gtk::Window] window Gtk app
21
- #
22
- def load(_client, _window)
23
- @data = {}
24
- sw = Gtk::ScrolledWindow.new
25
- sw.shadow_type = Gtk::ShadowType::ETCHED_IN
26
- sw.set_policy(Gtk::PolicyType::AUTOMATIC,
27
- Gtk::PolicyType::AUTOMATIC)
28
- pack_start(sw, expand: true, fill: true, padding: 0)
29
-
30
- @store = Gtk::ListStore.new(String, String)
31
- treeview = Gtk::TreeView.new(@store)
32
- treeview.rules_hint = true
33
-
34
- sw.add(treeview)
35
-
36
- add_columns(treeview)
37
- end
38
-
39
- ##
40
- # Append row in list store
41
- #
42
- # @param [Gtk::TreeIter] i Iterable element
43
- # @param [String] reason Why this download have failed
44
- #
45
- def create_model(i, reason)
46
- iter = @store.append
47
- path = i[COLUMN_PATH]
48
- iter[COLUMN_PATH] = path
49
- iter[COLUMN_REASON] = reason
50
- end
51
-
52
- ##
53
- # Add columns on the treeview element
54
- #
55
- # @param [Gtk::Treeview] treeview Treeview
56
- #
57
- def add_columns(treeview)
58
- renderer = Gtk::CellRendererText.new
59
- column = Gtk::TreeViewColumn.new('Path',
60
- renderer,
61
- 'text' => COLUMN_PATH)
62
- column.fixed_width = 650
63
- treeview.append_column(column)
64
-
65
- renderer = Gtk::CellRendererText.new
66
- column = Gtk::TreeViewColumn.new('Reason',
67
- renderer,
68
- 'text' => COLUMN_REASON)
69
- treeview.append_column(column)
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end