groove-dl 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/MANIFEST +1 -0
- data/README.md +1 -0
- data/bin/groove-dl +2 -0
- data/lib/groove-dl/app.rb +1 -0
- data/lib/groove-dl/version.rb +1 -1
- data/lib/groove-dl/widgets/download/bar.rb +15 -6
- data/lib/groove-dl/widgets/download/book.rb +5 -1
- data/lib/groove-dl/widgets/download/list/failed.rb +1 -1
- data/lib/groove-dl/widgets/download/list/success.rb +18 -11
- data/lib/groove-dl/widgets/menu/success.rb +32 -0
- data/lib/groove-dl/widgets/search/bar.rb +17 -10
- data/lib/groove-dl/widgets/search/list.rb +15 -10
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5028c609beb9b031385ea3eb3a68241a291e3267
|
4
|
+
data.tar.gz: 093121e998733df06134ac4de8bbcb91ea576a3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 197f460fe260071fe4e11a4a8722eddfce7ea5aa269e164d115b457f91cb96333b197d994e9034e8750b5e4a259ca32118e9b1599eba0d16097cf58231820b5c
|
7
|
+
data.tar.gz: bad6b3830e84dd377831990aec0f505bae9d3cf7c937a78054a025ab9148697a1e51668902318363d6099a145cea3de86cd8172e9e19d9f976af4a97ac248fd5
|
data/.gitignore
CHANGED
data/MANIFEST
CHANGED
@@ -23,6 +23,7 @@ lib/groove-dl/widgets/download/book.rb
|
|
23
23
|
lib/groove-dl/widgets/download/list/failed.rb
|
24
24
|
lib/groove-dl/widgets/download/list/queue.rb
|
25
25
|
lib/groove-dl/widgets/download/list/success.rb
|
26
|
+
lib/groove-dl/widgets/menu/success.rb
|
26
27
|
lib/groove-dl/widgets/search/bar.rb
|
27
28
|
lib/groove-dl/widgets/search/list.rb
|
28
29
|
spec/groove-dl/cli_spec.rb
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#Grooveshark song downloader
|
2
2
|
|
3
3
|
[](https://travis-ci.org/PierreRambaud/groove-dl)
|
4
|
+
[](http://badge.fury.io/rb/groove-dl)
|
4
5
|
|
5
6
|
##Requirements
|
6
7
|
|
data/bin/groove-dl
CHANGED
@@ -4,7 +4,9 @@
|
|
4
4
|
require File.expand_path('../../lib/groove-dl', __FILE__)
|
5
5
|
|
6
6
|
require 'gtk3'
|
7
|
+
require 'shellwords'
|
7
8
|
require 'groove-dl/app'
|
9
|
+
require 'groove-dl/widgets/menu/success'
|
8
10
|
require 'groove-dl/widgets/download/bar'
|
9
11
|
require 'groove-dl/widgets/download/list/queue'
|
10
12
|
require 'groove-dl/widgets/download/list/failed'
|
data/lib/groove-dl/app.rb
CHANGED
data/lib/groove-dl/version.rb
CHANGED
@@ -19,13 +19,21 @@ module GrooveDl
|
|
19
19
|
|
20
20
|
download_box = Gtk::Box.new(:horizontal, 6)
|
21
21
|
|
22
|
-
add_button = Gtk::Button.new(
|
23
|
-
stock_id: Gtk::Stock::SAVE)
|
22
|
+
add_button = Gtk::Button.new(stock_id: Gtk::Stock::ADD)
|
24
23
|
|
25
24
|
add_button.signal_connect('released') do
|
26
25
|
l = window.find_by_name('download_list')
|
27
26
|
l.store.clear
|
28
|
-
|
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)
|
29
37
|
end
|
30
38
|
|
31
39
|
download_box.pack_start(add_button,
|
@@ -64,12 +72,13 @@ module GrooveDl
|
|
64
72
|
concurrency_entry.text = value.to_s unless value == 0
|
65
73
|
end
|
66
74
|
|
67
|
-
download_button = Gtk::Button.new(
|
68
|
-
stock_id: Gtk::Stock::SAVE)
|
75
|
+
download_button = Gtk::Button.new(stock_id: Gtk::Stock::SAVE)
|
69
76
|
|
70
77
|
download_button.signal_connect('released') do
|
78
|
+
download_list = window.find_by_name('download_list')
|
79
|
+
next if download_list.queue.zero?
|
71
80
|
download_button.sensitive = false
|
72
|
-
|
81
|
+
download_list.download
|
73
82
|
end
|
74
83
|
|
75
84
|
download_box.pack_start(download_button,
|
@@ -32,11 +32,15 @@ module GrooveDl
|
|
32
32
|
@download_label.set_name('download_label')
|
33
33
|
append_page(download_list, @download_label)
|
34
34
|
|
35
|
+
# Success menu
|
36
|
+
menu_success = Widgets::Menu::Success.new
|
37
|
+
menu_success.load(client, window)
|
38
|
+
|
35
39
|
# Success list
|
36
40
|
download_success_list =
|
37
41
|
Widgets::Download::List::Success.new(:vertical, 6)
|
38
42
|
download_success_list.set_name('download_success_list')
|
39
|
-
download_success_list.load(client, window)
|
43
|
+
download_success_list.load(client, window, menu_success)
|
40
44
|
|
41
45
|
@download_success_label = Gtk::Label.new(SUCCESS % 0)
|
42
46
|
@download_success_label.set_name('download_success_label')
|
@@ -8,10 +8,11 @@ module GrooveDl
|
|
8
8
|
module List
|
9
9
|
# Success tree
|
10
10
|
class Success < Gtk::Box
|
11
|
-
attr_reader :store, :data
|
11
|
+
attr_reader :store, :data, :treeview
|
12
12
|
|
13
13
|
COLUMN_PATH,
|
14
14
|
COLUMN_SIZE = *(0..1).to_a
|
15
|
+
RIGHT_CLICK = 3
|
15
16
|
|
16
17
|
##
|
17
18
|
# Initialize widgets
|
@@ -19,7 +20,7 @@ module GrooveDl
|
|
19
20
|
# @param [Grooveshark::Client] client Grooveshark client
|
20
21
|
# @param [Gtk::Window] window Gtk app
|
21
22
|
#
|
22
|
-
def load(_client, _window)
|
23
|
+
def load(_client, _window, menu)
|
23
24
|
@data = {}
|
24
25
|
sw = Gtk::ScrolledWindow.new
|
25
26
|
sw.shadow_type = Gtk::ShadowType::ETCHED_IN
|
@@ -28,12 +29,20 @@ module GrooveDl
|
|
28
29
|
pack_start(sw, expand: true, fill: true, padding: 0)
|
29
30
|
|
30
31
|
@store = Gtk::ListStore.new(String, String)
|
31
|
-
treeview = Gtk::TreeView.new(@store)
|
32
|
-
treeview.rules_hint = true
|
32
|
+
@treeview = Gtk::TreeView.new(@store)
|
33
|
+
@treeview.rules_hint = true
|
33
34
|
|
34
|
-
|
35
|
+
@treeview.signal_connect('button_press_event') do |widget, event|
|
36
|
+
if event.is_a?(Gdk::EventButton) && event.button == RIGHT_CLICK
|
37
|
+
path, _model = widget.get_path_at_pos(event.x, event.y)
|
38
|
+
widget.selection.select_path(path)
|
39
|
+
menu.popup(nil, nil, event.button, event.time)
|
40
|
+
end
|
41
|
+
end
|
35
42
|
|
36
|
-
|
43
|
+
sw.add(@treeview)
|
44
|
+
|
45
|
+
add_columns
|
37
46
|
end
|
38
47
|
|
39
48
|
##
|
@@ -52,22 +61,20 @@ module GrooveDl
|
|
52
61
|
##
|
53
62
|
# Add columns on the treeview element
|
54
63
|
#
|
55
|
-
|
56
|
-
#
|
57
|
-
def add_columns(treeview)
|
64
|
+
def add_columns
|
58
65
|
renderer = Gtk::CellRendererText.new
|
59
66
|
column = Gtk::TreeViewColumn.new('Path',
|
60
67
|
renderer,
|
61
68
|
'text' => COLUMN_PATH)
|
62
69
|
column.fixed_width = 650
|
63
|
-
treeview.append_column(column)
|
70
|
+
@treeview.append_column(column)
|
64
71
|
|
65
72
|
renderer = Gtk::CellRendererText.new
|
66
73
|
column = Gtk::TreeViewColumn.new('Size',
|
67
74
|
renderer,
|
68
75
|
'text' => COLUMN_SIZE)
|
69
76
|
column.fixed_width = 100
|
70
|
-
treeview.append_column(column)
|
77
|
+
@treeview.append_column(column)
|
71
78
|
end
|
72
79
|
end
|
73
80
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
module GrooveDl
|
3
|
+
# Widgets components
|
4
|
+
module Widgets
|
5
|
+
# Download section
|
6
|
+
module Menu
|
7
|
+
# Success menu
|
8
|
+
class Success < Gtk::Menu
|
9
|
+
##
|
10
|
+
# Initialize widgets
|
11
|
+
#
|
12
|
+
# @param [Grooveshark::Client] client Grooveshark client
|
13
|
+
# @param [Gtk::Window] window Gtk app
|
14
|
+
#
|
15
|
+
def load(_client, window)
|
16
|
+
item = Gtk::ImageMenuItem.new(stock_id: Gtk::Stock::OPEN)
|
17
|
+
item.signal_connect('activate') do
|
18
|
+
treeview = window.find_by_name('download_success_list').treeview
|
19
|
+
iter = treeview.selection.selected
|
20
|
+
Thread.new do
|
21
|
+
path = iter[Download::List::Queue::COLUMN_PATH]
|
22
|
+
system("gnome-open #{Shellwords.escape(path)}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
append(item)
|
27
|
+
show_all
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -19,7 +19,8 @@ module GrooveDl
|
|
19
19
|
|
20
20
|
search_bar = Gtk::Entry.new
|
21
21
|
search_bar.set_name('search_bar')
|
22
|
-
search_bar.
|
22
|
+
search_bar.set_placeholder_text('Search...')
|
23
|
+
|
23
24
|
search_box.pack_start(search_bar,
|
24
25
|
expand: true,
|
25
26
|
fill: true,
|
@@ -36,7 +37,18 @@ module GrooveDl
|
|
36
37
|
fill: true,
|
37
38
|
padding: 5)
|
38
39
|
|
39
|
-
button = Gtk::Button.new(
|
40
|
+
button = Gtk::Button.new(stock_id: Gtk::Stock::FIND)
|
41
|
+
button.set_name('search_button')
|
42
|
+
search_box.pack_start(button,
|
43
|
+
expand: false,
|
44
|
+
fill: false,
|
45
|
+
padding: 10)
|
46
|
+
|
47
|
+
pack_start(search_box,
|
48
|
+
expand: false,
|
49
|
+
padding: 10)
|
50
|
+
|
51
|
+
# Signals
|
40
52
|
button.signal_connect('released') do
|
41
53
|
@type = search_type.active_text
|
42
54
|
@query = search_bar.text
|
@@ -52,14 +64,9 @@ module GrooveDl
|
|
52
64
|
window.find_by_name('search_list').create_model(results)
|
53
65
|
end
|
54
66
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
padding: 10)
|
59
|
-
|
60
|
-
pack_start(search_box,
|
61
|
-
expand: false,
|
62
|
-
padding: 10)
|
67
|
+
search_bar.signal_connect('activate') do
|
68
|
+
button.signal_emit('released')
|
69
|
+
end
|
63
70
|
end
|
64
71
|
end
|
65
72
|
end
|
@@ -8,13 +8,12 @@ module GrooveDl
|
|
8
8
|
class List < Gtk::Box
|
9
9
|
attr_reader :data
|
10
10
|
attr_reader :store
|
11
|
-
attr_reader :selection
|
12
11
|
|
13
|
-
|
12
|
+
COLUMN_CHECKBOX,
|
14
13
|
COLUMN_ID,
|
15
14
|
COLUMN_NAME,
|
16
15
|
COLUMN_AUTHOR,
|
17
|
-
COLUMN_SONG = *(0..
|
16
|
+
COLUMN_SONG = *(0..4).to_a
|
18
17
|
|
19
18
|
##
|
20
19
|
# Initialize widgets
|
@@ -25,7 +24,6 @@ module GrooveDl
|
|
25
24
|
def load(_client, _window)
|
26
25
|
set_name('search_list')
|
27
26
|
|
28
|
-
@selection = {}
|
29
27
|
sw = Gtk::ScrolledWindow.new
|
30
28
|
sw.shadow_type = Gtk::ShadowType::ETCHED_IN
|
31
29
|
sw.set_policy(Gtk::PolicyType::AUTOMATIC, Gtk::PolicyType::AUTOMATIC)
|
@@ -56,7 +54,7 @@ module GrooveDl
|
|
56
54
|
@data = {}
|
57
55
|
data.each do |element|
|
58
56
|
iter = @store.append
|
59
|
-
iter[
|
57
|
+
iter[COLUMN_CHECKBOX] = false
|
60
58
|
if element.is_a?(Grooveshark::Song)
|
61
59
|
@data[element.id.to_i] = element
|
62
60
|
iter[COLUMN_ID] = element.id.to_i
|
@@ -86,9 +84,18 @@ module GrooveDl
|
|
86
84
|
|
87
85
|
column = Gtk::TreeViewColumn.new('X',
|
88
86
|
renderer,
|
89
|
-
'active' =>
|
87
|
+
'active' => COLUMN_CHECKBOX)
|
90
88
|
column.sizing = Gtk::TreeViewColumn::Sizing::FIXED
|
91
89
|
column.fixed_width = 30
|
90
|
+
column.set_clickable(true)
|
91
|
+
column.signal_connect('clicked') do
|
92
|
+
@store.each do |_model, _path, iter|
|
93
|
+
fixed = iter[COLUMN_CHECKBOX]
|
94
|
+
fixed ^= 1
|
95
|
+
iter[COLUMN_CHECKBOX] = fixed
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
92
99
|
treeview.append_column(column)
|
93
100
|
|
94
101
|
renderer = Gtk::CellRendererText.new
|
@@ -134,11 +141,9 @@ module GrooveDl
|
|
134
141
|
def fixed_toggled(model, path_str)
|
135
142
|
path = Gtk::TreePath.new(path_str)
|
136
143
|
iter = model.get_iter(path)
|
137
|
-
fixed = iter[
|
144
|
+
fixed = iter[COLUMN_CHECKBOX]
|
138
145
|
fixed ^= 1
|
139
|
-
iter[
|
140
|
-
@selection[iter[COLUMN_ID]] = @data[iter[COLUMN_ID]] if fixed
|
141
|
-
@selection.delete(iter[COLUMN_ID]) unless fixed
|
146
|
+
iter[COLUMN_CHECKBOX] = fixed
|
142
147
|
end
|
143
148
|
end
|
144
149
|
end
|
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.
|
4
|
+
version: 0.2.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:
|
11
|
+
date: 2015-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|
@@ -197,6 +197,7 @@ files:
|
|
197
197
|
- lib/groove-dl/widgets/download/list/failed.rb
|
198
198
|
- lib/groove-dl/widgets/download/list/queue.rb
|
199
199
|
- lib/groove-dl/widgets/download/list/success.rb
|
200
|
+
- lib/groove-dl/widgets/menu/success.rb
|
200
201
|
- lib/groove-dl/widgets/search/bar.rb
|
201
202
|
- lib/groove-dl/widgets/search/list.rb
|
202
203
|
- spec/groove-dl/cli_spec.rb
|
@@ -231,3 +232,4 @@ signing_key:
|
|
231
232
|
specification_version: 4
|
232
233
|
summary: Download grooveshark songs.
|
233
234
|
test_files: []
|
235
|
+
has_rdoc:
|