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: 
         |