soundcloud9000 0.1.1 → 0.1.2

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: c75677ab2dfb6f235a724717a31eb68509d5ac74
4
- data.tar.gz: 3b2ed8c9459bffb301d89151fab20946eb6bdfb5
3
+ metadata.gz: 85f45eb6382c77b4b5e6f025727a32c0136be683
4
+ data.tar.gz: 3a789fdcb6e2a325e0b82d6ac4b49ec5efccc249
5
5
  SHA512:
6
- metadata.gz: 070b6d1eaa479efac20187437245f0ab5baa5defc9bf5e8b1e35d1cfe5897877dbba8f858ffc453c3af2b4dc873c1048b37870988fa5d99747a60f7e02f65ea9
7
- data.tar.gz: 772fc24cf1ab6715ae493070c9034f876c6e6de8e2307b306779225f39d90161a88b6a3c12a3d3e736cf1f6e3f41fd3a6b76ba998d76475a02c9b87372469007
6
+ metadata.gz: 84f960223f42c5e507f2378eb602a8ca987bb3b6d7b376c373c2486353909f96be3d6099b8023cf5df4060ca573b0a1d22e33ec2a59304cd6a72931638732bb8
7
+ data.tar.gz: 20463d46b7aca681a04e5207f39d22571dc4164da1d044208292ce259c317588cf170d85ee4af6f589f7e705f509581f8a64533f94f859b02ffd95c65f3464b4
data/.travis.yml ADDED
@@ -0,0 +1,32 @@
1
+ os:
2
+ - linux
3
+ - osx
4
+ - windows
5
+ language: ruby
6
+ rvm:
7
+ - 2.6.3
8
+ - 2.4.6
9
+ - 2.5.5
10
+ - 2.3.8
11
+ - 2.2.10
12
+ - 2.1.10
13
+ - 2.0.0-p648
14
+ - 1.9.3-p551
15
+ - 1.8.7-p374
16
+ - 1.6.7
17
+ env:
18
+ global:
19
+ secure: VchDDae2eYvQnsDXVDYb0V//LTxigkFsiLEGSw7meyfqS14T12k4q0b9rtCRaldjsUHs9L/vfv2qdu+ysafe3XvfL76ny7aYuupR4isFxHGADVvfaiiZCPUbaUsMQ92UzuopD5mpB5irnOWiNkq2xoyvG4wp27VKDKt1rbg2KjYz6OYG0/muk/VbJnxIW0IpMwaOJ63JlNGzuvf7rpkEmDlHHty1tnS4b5XCYQ2TjMBVQ3mdJiGdOC1mjTfRtVG/a478bTpHehpav4bqvviQKeyFbuAgqa9zqmG7LLZB7+Ep4Agfrk7tENhPc/AiYrTpFxulc8uLPER5Ol0gsj25dlJOhhQZUaD/XK37ZbgEQ2drxk7Y5FCNH5qD5Oy6ar3kyt+2K5pBw8+cukaABdYi/Ii5rdjGhUaQvJ7K5DV1C5CEwBn5YPhg2wt1RtIWsBj8dIuDjXEv+D+Nup6L//+8XowauKhdobel3zVvpfKB93H/aM2c/1xhmcn5F8F/l3XHwzFBGprqmTLvz1ca8DUCogdzYfqTfRXM41zmmvGh/EuvQZ+R9J/hR+SevK9asNMr0ZmSBkkyJh7iz2gyUrPHJQ4oXZZWE5hpxk5qonS/tNM+YKj3BPcVSLUF/oWabmpvZe/1m6nMLbDgvaG7I/E5tHqJh3JZ8n7cPssaLcXgPd0=
20
+ before_install:
21
+ - export SC_CLIENT_ID=$SOUNDCLOUD_CLIENT_ID soundcloud9000
22
+ install:
23
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
24
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install portaudio; fi
25
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install mpg123; fi
26
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then gem install soundcloud9000; fi
27
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then gem uninstall audite; fi
28
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then gem install --user audite -- --with-ldflags="-lmpg123"; fi
29
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then apt-get install portaudio19-dev libmpg123-dev libncurses-dev ruby1.9.1-dev; fi
30
+ - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then gem install soundcloud9000; fi
31
+ script:
32
+ - soundcloud9000
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # soundcloud9000
2
2
 
3
- The next generation SoundCloud client. Without all these stupid CSS files. Runs on OSX and Linux.
3
+ [![Gem Version](https://badge.fury.io/rb/soundcloud9000.svg)](https://badge.fury.io/rb/soundcloud9000)
4
+
5
+ The next generation SoundCloud client. Without all these stupid CSS files. Runs on macOS and Linux.
4
6
 
5
7
  ![Screen Shot 2019-04-28 at 20 42 40](https://user-images.githubusercontent.com/31281983/56872460-74dd2780-69f7-11e9-9d7e-247757a9a6fd.png)
6
8
 
@@ -8,18 +10,25 @@ The next generation SoundCloud client. Without all these stupid CSS files. Runs
8
10
 
9
11
  This hack was originally built at the [Music Hack Day Stockholm 2013](http://stockholm.musichackday.org/2013).
10
12
 
13
+ ## What's the Difference?
14
+
15
+ The original software, soundcloud2000, is no longer maintained, and so I've picked it back up so I can add new features.
16
+
11
17
  ## Requirements
12
18
 
13
- - Ruby (1.9)
14
- - Portaudio (19)
15
- - Mpg123 (1.14)
19
+ - Ruby (1.9)
20
+ - Portaudio (19)
21
+ - Mpg123 (1.14)
22
+
23
+ ## Legal
24
+
25
+ See [this comment](https://github.com/grobie/soundcloud2000/issues/93#issuecomment-233182516).
16
26
 
17
27
  ## Installation
18
28
 
19
- Assuming you have Ruby/Rubygems installed, you need portaudio and mpg123 as
20
- library to compile the native extensions.
29
+ Assuming you have Ruby/RubyGems installed, you need portaudio and mpg123 installed as libraries to compile the native extensions.
21
30
 
22
- ### OSX
31
+ ### macOS
23
32
 
24
33
  ```bash
25
34
  xcode-select --install
@@ -56,32 +65,37 @@ SC_CLIENT_ID=YOUR_CLIENT_ID soundcloud9000
56
65
 
57
66
  ## Features
58
67
 
59
- - stream SoundCloud tracks in your terminal (`enter`)
60
- - scroll through sound lists (`down` / `up`)
61
- - play / pause support (`space`)
62
- - forward / rewind support (`right` / `left`)
63
- - play tracks of different users (`u`)
64
- - play favorites from a user (`f`)
65
- - play sets/playlists from a user (`s`)
66
- - level meter
68
+ - stream SoundCloud tracks in your terminal (`enter`)
69
+ - scroll through sound lists (`down` / `up`)
70
+ - play / pause support (`space`)
71
+ - forward / rewind support (`right` / `left`)
72
+ - play tracks of different users (`u`)
73
+ - play favorites from a user (`f`)
74
+ - play sets/playlists from a user (`s`)
75
+ - level meter
76
+ - play songs in random order (`m`)
77
+ - no advertisements
78
+ - live help (`h`)
67
79
 
68
80
  ## Planned
69
81
 
70
- - play any streams, sets or sounds
71
- - better browsing between users and sound lists
72
- - shuffle
73
- - live lyrics (don't get your hopes up for this one)
82
+ - custom configuration file
83
+ - sorting tracks
84
+ - favoriting tracks
85
+ - play any streams, sets or sounds
86
+ - better browsing between users and sound lists
87
+ - live lyrics (don't get your hopes up for this one)
74
88
 
75
89
  ## Authors
76
90
 
77
- - [Matthias Georgi](https://github.com/georgi) ([@mgeorgi](https://twitter.com/mgeorgi))
78
- - [Tobias Schmidt](https://github.com/grobie) ([@dagrobie](https://twitter.com/dagrobie))
91
+ - [Matthias Georgi](https://github.com/georgi) ([@mgeorgi](https://twitter.com/mgeorgi))
92
+ - [Tobias Schmidt](https://github.com/grobie) ([@dagrobie](https://twitter.com/dagrobie))
79
93
 
80
94
  ## Contributors
81
95
 
82
- - [Travis Thieman](https://github.com/tthieman) ([@tthieman](https://twitter.com/thieman))
83
- - [Sean Lewis](https://github.com/sophisticasean) ([@FricSean](https://twitter.com/fricsean))
96
+ - [Travis Thieman](https://github.com/tthieman) ([@tthieman](https://twitter.com/thieman))
97
+ - [Sean Lewis](https://github.com/sophisticasean) ([@FricSean](https://twitter.com/fricsean))
84
98
 
85
99
  ## Current Maintainer
86
100
 
87
- - [Sumanth Ratna](https://github.com/sumanthratna) ([@sumanthratna](https://twitter.com/sumanthratna))
101
+ - [Sumanth Ratna](https://github.com/sumanthratna) ([@sumanthratna](https://twitter.com/sumanthratna))
data/Rakefile CHANGED
@@ -3,19 +3,35 @@ require 'rake'
3
3
  require 'yaml'
4
4
 
5
5
  def dependencies(file)
6
- `otool -L #{file}`.split("\n")[1..-1].map {|line| line.split[0] }
6
+ `otool -L #{file}`.split("\n")[1..-1].map { |line| line.split[0] }
7
7
  end
8
8
 
9
9
  task :dirs do
10
- Dir.mkdir 'vendor' rescue nil
11
- Dir.mkdir 'vendor/bin' rescue nil
12
- Dir.mkdir 'vendor/lib' rescue nil
13
- Dir.mkdir 'vendor/dyld' rescue nil
10
+ begin
11
+ Dir.mkdir 'vendor'
12
+ rescue StandardError
13
+ nil
14
+ end
15
+ begin
16
+ Dir.mkdir 'vendor/bin'
17
+ rescue StandardError
18
+ nil
19
+ end
20
+ begin
21
+ Dir.mkdir 'vendor/lib'
22
+ rescue StandardError
23
+ nil
24
+ end
25
+ begin
26
+ Dir.mkdir 'vendor/dyld'
27
+ rescue StandardError
28
+ nil
29
+ end
14
30
  end
15
31
 
16
- task :ruby => :dirs do
32
+ task ruby: :dirs do
17
33
  lines = `rvm info`.split("\n")[6..-1]
18
- ruby = YAML.load(lines.join("\n"))
34
+ ruby = YAML.safe_load(lines.join("\n"))
19
35
 
20
36
  version = ruby.keys.first
21
37
  home = ruby[version]['homes']['ruby']
@@ -27,8 +43,8 @@ task :ruby => :dirs do
27
43
  # `cp #{dylib} vendor/dyld`
28
44
  end
29
45
 
30
- task :libs => :dirs do
31
- [:audite, :portaudio, :mpg123].each do |name|
46
+ task libs: :dirs do
47
+ %i[audite portaudio mpg123].each do |name|
32
48
  lib = `gem which #{name}`.chomp
33
49
  `cp #{lib} vendor/lib`
34
50
  if File.extname(lib) == '.bundle'
@@ -38,7 +54,7 @@ task :libs => :dirs do
38
54
  end
39
55
  end
40
56
 
41
- task :package => [:ruby, :libs] do
57
+ task package: %i[ruby libs] do
42
58
  `cp soundcloud9000 vendor`
43
59
  `cp -a bin/* vendor/bin`
44
60
  `cp -a lib/* vendor/lib`
@@ -25,17 +25,23 @@ module Soundcloud9000
25
25
 
26
26
  @splash_controller = Controller.new(
27
27
  Splash.new(
28
- UI::Rect.new(0, 0, Curses.cols, Curses.lines)))
28
+ UI::Rect.new(0, 0, Curses.cols, Curses.lines)
29
+ )
30
+ )
29
31
 
30
32
  @track_controller = TrackController.new(
31
33
  TracksTable.new(
32
- UI::Rect.new(0, 5, Curses.cols, Curses.lines - 5)), client)
34
+ UI::Rect.new(0, 5, Curses.cols, Curses.lines - 5)
35
+ ), client
36
+ )
33
37
 
34
38
  @track_controller.bind_to(TrackCollection.new(client))
35
39
 
36
40
  @player_controller = PlayerController.new(
37
41
  PlayerView.new(
38
- UI::Rect.new(0, 0, Curses.cols, 5)), client)
42
+ UI::Rect.new(0, 0, Curses.cols, 5)
43
+ ), client
44
+ )
39
45
 
40
46
  @track_controller.events.on(:select) do |track|
41
47
  @player_controller.play(track)
@@ -73,7 +79,7 @@ module Soundcloud9000
73
79
  case key
74
80
  when :left, :right, :space, :one, :two, :three, :four, :five, :six, :seven, :eight, :nine
75
81
  @player_controller.events.trigger(:key, key)
76
- when :down, :up, :enter, :u, :f, :s, :j, :k, :m
82
+ when :down, :up, :enter, :u, :f, :s, :j, :k, :m, :h
77
83
  @track_controller.events.trigger(:key, key)
78
84
  end
79
85
  end
@@ -89,5 +95,22 @@ module Soundcloud9000
89
95
  def self.logger
90
96
  @logger ||= Logger.new('debug.log')
91
97
  end
98
+
99
+ def self.get_version
100
+ "soundcloud9000, version #{Gem.latest_spec_for('soundcloud9000').version}"
101
+ end
102
+
103
+ def self.get_help
104
+ %(
105
+ #{get_version}
106
+ Usage: soundcloud9000
107
+ soundcloud9000 -h | --help
108
+ soundcloud9000 -v | --version
109
+
110
+ Options:
111
+ -h --help show this message, then exit
112
+ -v --version show soundcloud9000 version, then exit
113
+ )
114
+ end
92
115
  end
93
116
  end
@@ -20,9 +20,7 @@ module Soundcloud9000
20
20
 
21
21
  def resolve(permalink)
22
22
  res = get('/resolve', url: "http://soundcloud.com/#{permalink}")
23
- if res['location']
24
- get URI.parse(res['location']).path
25
- end
23
+ get URI.parse(res['location']).path if res['location']
26
24
  end
27
25
 
28
26
  def uri_escape(params)
@@ -2,7 +2,7 @@ require_relative '../events'
2
2
 
3
3
  module Soundcloud9000
4
4
  module Controllers
5
- # Control our view, events, and rendering.
5
+ # control our view, events, and rendering
6
6
  class Controller
7
7
  attr_reader :events
8
8
 
@@ -55,7 +55,53 @@ module Soundcloud9000
55
55
  # when :im grown up, im gonna go to brown and be smarter than u, sumanth <333 (Rahel Selemon, April 29, 2019)
56
56
  when :m
57
57
  @tracks.shuffle = !@tracks.shuffle
58
- UI::Input.message("Shuffle #{if @tracks.shuffle then "enabled" else "disabled" end}.")
58
+ UI::Input.message("Shuffle #{@tracks.shuffle ? 'enabled' : 'disabled'}.")
59
+ when :h
60
+ puts "h"
61
+ @tracks.help = !@tracks.help
62
+ if @tracks.help
63
+ height = 40
64
+ width = 80
65
+ top = (Curses.lines - height) / 2
66
+ left = (Curses.cols - width) / 2
67
+ win = Curses::Window.new(height, width, top, left)
68
+ win.attrset(Curses.color_pair(4) | Curses::A_REVERSE | Curses::A_BOLD)
69
+ win.setpos(2, 3)
70
+ help = Application.get_help
71
+ win.addstr(help)
72
+ win.setpos(help.lines.count, 0)
73
+ win.addstr('-' * width)
74
+ win.setpos(help.lines.count + 1, 3)
75
+ shortcuts = %(
76
+ Shortcuts:
77
+ [enter] play selected track from beginning
78
+ [down]/j select track below currently selected track
79
+ [up]/k select track above currently selected track
80
+ [space] play or pause the current track
81
+ [right]/[left] move backward or forward in current track
82
+ 1 jump to the time at 1/10 of the current track
83
+ 2 jump to the time at 2/10 of the current track
84
+ 3 jump to the time at 3/10 of the current track
85
+ 4 jump to the time at 4/10 of the current track
86
+ 5 jump to the time at 5/10 of the current track
87
+ 6 jump to the time at 6/10 of the current track
88
+ 7 jump to the time at 7/10 of the current track
89
+ 8 jump to the time at 8/10 of the current track
90
+ 9 jump to the time at 9/10 of the current track
91
+ u play tracks of different users
92
+ f play favorites from a user
93
+ s play sets/playlists from a user
94
+ m play songs in random order
95
+ h toggle this help screen
96
+ )
97
+ win.addstr(shortcuts)
98
+ win.box('|', '-')
99
+ win.refresh
100
+ win.getch
101
+ win.close
102
+ else
103
+ @tracks.clear_and_replace
104
+ end
59
105
  end
60
106
  end
61
107
  end
@@ -8,7 +8,7 @@ module Soundcloud9000
8
8
  def initialize(url, filename)
9
9
  @events = Events.new
10
10
  @url = URI.parse(url)
11
- @file = File.open(filename, "w")
11
+ @file = File.open(filename, 'w')
12
12
  @progress = 0
13
13
  start!
14
14
  end
@@ -37,7 +37,7 @@ module Soundcloud9000
37
37
  @file.close if @progress == @total
38
38
  end
39
39
  end
40
- rescue => e
40
+ rescue StandardError => e
41
41
  log e.message
42
42
  end
43
43
  end
@@ -57,7 +57,11 @@ module Soundcloud9000
57
57
  @file = "#{@folder}/#{track.id}.mp3"
58
58
 
59
59
  if !File.exist?(@file) || track.duration / 1000 > length_in_seconds * 0.95
60
- File.unlink(@file) rescue nil
60
+ begin
61
+ File.unlink(@file)
62
+ rescue StandardError
63
+ nil
64
+ end
61
65
  @download = DownloadThread.new(location, @file)
62
66
  else
63
67
  @download = nil
@@ -93,7 +97,7 @@ module Soundcloud9000
93
97
  @seek_speed[direction] = 1
94
98
  end
95
99
 
96
- @seek_time[direction] = Time.now
100
+ @seek_time[direction] = Time.now
97
101
  @seek_speed[direction]
98
102
  end
99
103
 
@@ -1,10 +1,12 @@
1
1
  require_relative 'user'
2
+ require_relative '../application'
2
3
 
3
4
  module Soundcloud9000
4
5
  module Models
5
6
  # stores information for each track that hits the player
6
7
  class Track
7
8
  def initialize(hash)
9
+ Application.logger.debug(hash)
8
10
  @hash = hash
9
11
  end
10
12
 
@@ -45,7 +47,7 @@ module Soundcloud9000
45
47
  end
46
48
 
47
49
  def comments
48
- @hash['comments']
50
+ @hash['comment_count']
49
51
  end
50
52
 
51
53
  def stream_url
@@ -10,13 +10,14 @@ module Soundcloud9000
10
10
  DEFAULT_LIMIT = 50
11
11
 
12
12
  attr_reader :limit
13
- attr_accessor :collection_to_load, :user, :playlist, :shuffle
13
+ attr_accessor :collection_to_load, :user, :playlist, :shuffle, :help
14
14
 
15
15
  def initialize(client)
16
16
  super
17
17
  @limit = DEFAULT_LIMIT
18
18
  @collection_to_load = :recent
19
19
  @shuffle = false
20
+ @help = false
20
21
  end
21
22
 
22
23
  def size
@@ -45,6 +46,7 @@ module Soundcloud9000
45
46
 
46
47
  def favorites_tracks
47
48
  return [] if @client.current_user.nil?
49
+
48
50
  @client.get(@client.current_user.uri + '/favorites', offset: @limit * @page, limit: @limit)
49
51
  end
50
52
 
@@ -54,6 +56,7 @@ module Soundcloud9000
54
56
 
55
57
  def user_tracks
56
58
  return [] if @client.current_user.nil?
59
+
57
60
  user_tracks = @client.get(@client.current_user.uri + '/tracks', offset: @limit * @page, limit: @limit)
58
61
  if user_tracks.empty?
59
62
  UI::Input.error("'#{@client.current_user.username}' has not authored any tracks. Use f to switch to their favorites, or s to switch to their playlists.")
@@ -65,6 +68,7 @@ module Soundcloud9000
65
68
 
66
69
  def playlist_tracks
67
70
  return [] if @playlist.nil?
71
+
68
72
  @client.get(@playlist.uri + '/tracks', offset: @limit * @page, limit: @limit)
69
73
  end
70
74
  end
@@ -12,7 +12,7 @@ module Soundcloud9000
12
12
  parts = [
13
13
  milliseconds / 1000 / 60 / 60, # hours
14
14
  milliseconds / 1000 / 60 % 60, # minutes
15
- milliseconds / 1000 % 60, # seconds
15
+ milliseconds / 1000 % 60 # seconds
16
16
  ]
17
17
 
18
18
  parts.shift if parts.first.zero?
@@ -6,29 +6,29 @@ module Soundcloud9000
6
6
  class Color
7
7
  PAIRS = {
8
8
  white: 0,
9
- red: 1,
10
- blue: 2,
9
+ red: 1,
10
+ blue: 2,
11
11
  green: 3,
12
- cyan: 4
13
- }
12
+ cyan: 4
13
+ }.freeze
14
14
 
15
15
  DEFINITION = {
16
16
  PAIRS[:white] => [Curses::COLOR_WHITE, Curses::COLOR_BLACK],
17
- PAIRS[:red] => [Curses::COLOR_RED, Curses::COLOR_BLACK],
18
- PAIRS[:blue] => [Curses::COLOR_BLUE, Curses::COLOR_WHITE],
17
+ PAIRS[:red] => [Curses::COLOR_RED, Curses::COLOR_BLACK],
18
+ PAIRS[:blue] => [Curses::COLOR_BLUE, Curses::COLOR_WHITE],
19
19
  PAIRS[:green] => [Curses::COLOR_GREEN, Curses::COLOR_BLACK],
20
- PAIRS[:cyan] => [Curses::COLOR_BLACK, Curses::COLOR_CYAN]
21
- }
20
+ PAIRS[:cyan] => [Curses::COLOR_BLACK, Curses::COLOR_CYAN]
21
+ }.freeze
22
22
 
23
23
  COLORS = {
24
24
  white: Curses.color_pair(PAIRS[:white]),
25
25
  black: Curses.color_pair(PAIRS[:white]) | Curses::A_REVERSE,
26
- red: Curses.color_pair(PAIRS[:red]),
27
- blue: Curses.color_pair(PAIRS[:blue]),
26
+ red: Curses.color_pair(PAIRS[:red]),
27
+ blue: Curses.color_pair(PAIRS[:blue]),
28
28
  green: Curses.color_pair(PAIRS[:green]),
29
29
  green_reverse: Curses.color_pair(PAIRS[:green]) | Curses::A_REVERSE,
30
- cyan: Curses.color_pair(PAIRS[:cyan])
31
- }
30
+ cyan: Curses.color_pair(PAIRS[:cyan])
31
+ }.freeze
32
32
 
33
33
  def self.init
34
34
  Curses.start_color
@@ -6,29 +6,30 @@ module Soundcloud9000
6
6
  # handles getting input from the user
7
7
  class Input
8
8
  MAPPING = {
9
- Curses::KEY_LEFT => :left,
10
- Curses::KEY_RIGHT => :right,
11
- Curses::KEY_DOWN => :down,
12
- Curses::KEY_UP => :up,
9
+ Curses::KEY_LEFT => :left,
10
+ Curses::KEY_RIGHT => :right,
11
+ Curses::KEY_DOWN => :down,
12
+ Curses::KEY_UP => :up,
13
13
  Curses::KEY_CTRL_J => :enter,
14
- Curses::KEY_ENTER => :enter,
15
- ' ' => :space,
16
- 'j' => :j,
17
- 'k' => :k,
18
- 's' => :s,
19
- 'u' => :u,
20
- '1' => :one,
21
- '2' => :two,
22
- '3' => :three,
23
- '4' => :four,
24
- '5' => :five,
25
- '6' => :six,
26
- '7' => :seven,
27
- '8' => :eight,
28
- '9' => :nine,
29
- 'f' => :f,
30
- 'm' => :m
31
- }
14
+ Curses::KEY_ENTER => :enter,
15
+ ' ' => :space,
16
+ 'j' => :j,
17
+ 'k' => :k,
18
+ 's' => :s,
19
+ 'u' => :u,
20
+ '1' => :one,
21
+ '2' => :two,
22
+ '3' => :three,
23
+ '4' => :four,
24
+ '5' => :five,
25
+ '6' => :six,
26
+ '7' => :seven,
27
+ '8' => :eight,
28
+ '9' => :nine,
29
+ 'f' => :f,
30
+ 'm' => :m,
31
+ 'h' => :h
32
+ }.freeze
32
33
 
33
34
  def self.get(delay = 0)
34
35
  Curses.timeout = delay
@@ -4,7 +4,7 @@ module Soundcloud9000
4
4
  module UI
5
5
  # responsible for drawing our table of tracks
6
6
  class Table < View
7
- SEPARATOR = ' | '
7
+ SEPARATOR = ' | '.freeze
8
8
 
9
9
  attr_reader :current, :collection
10
10
  attr_accessor :header, :keys
@@ -22,7 +22,7 @@ module Soundcloud9000
22
22
  end
23
23
 
24
24
  def bind_to(collection)
25
- fail ArgumentError if @collection
25
+ raise ArgumentError if @collection
26
26
 
27
27
  @collection = collection
28
28
  @collection.events.on(:append) { render }
@@ -91,7 +91,8 @@ module Soundcloud9000
91
91
  @sizes = []
92
92
  (rows + [header]).each do |row|
93
93
  row.each_with_index do |value, index|
94
- current, max = value.to_s.length, @sizes[index] || 0
94
+ current = value.to_s.length
95
+ max = @sizes[index] || 0
95
96
  @sizes[index] = current if max < current
96
97
  end
97
98
  end
@@ -6,14 +6,15 @@ module Soundcloud9000
6
6
  module UI
7
7
  # class responsible for helping keep our app tidy and populated
8
8
  class View
9
- ROW_SEPARATOR = ?|
10
- LINE_SEPARATOR = ?-
11
- INTERSECTION = ?+
9
+ ROW_SEPARATOR = '|'.freeze
10
+ LINE_SEPARATOR = '-'.freeze
11
+ INTERSECTION = '+'.freeze
12
12
 
13
13
  attr_reader :rect
14
14
 
15
15
  def initialize(rect)
16
16
  @rect = rect
17
+ # use Pad instead of Window?
17
18
  @window = Curses::Window.new(rect.height, rect.width, rect.y, rect.x)
18
19
  @line = 0
19
20
  @padding = 0
@@ -62,11 +63,10 @@ module Soundcloud9000
62
63
  @window.refresh
63
64
  end
64
65
 
65
- def perform_layout
66
- end
66
+ def perform_layout; end
67
67
 
68
68
  def draw
69
- fail NotImplementedError
69
+ raise NotImplementedError
70
70
  end
71
71
  end
72
72
  end
@@ -23,7 +23,6 @@ module Soundcloud9000
23
23
 
24
24
  def draw
25
25
  line progress + download_progress
26
- # p @tracks
27
26
  with_color(:green) do
28
27
  line((duration + ' - ' + status).ljust(16) + @player.title)
29
28
  end
@@ -32,7 +31,7 @@ module Soundcloud9000
32
31
  end
33
32
 
34
33
  def status
35
- (@player.playing? ? 'playing' : 'paused') # + ' ' + (@tracks.shuffle? ? '(shuffle)' : '')
34
+ (@player.playing? ? 'playing' : 'paused')
36
35
  end
37
36
 
38
37
  def progress
@@ -33,7 +33,7 @@ module Soundcloud9000
33
33
 
34
34
  Originally Developed by Matthias Georgi and Tobias Schmidt
35
35
  Currently Maintained by Sumanth Ratna
36
- }
36
+ }.freeze
37
37
 
38
38
  protected
39
39
 
@@ -6,8 +6,8 @@ module Soundcloud9000
6
6
  class TracksTable < UI::Table
7
7
  def initialize(*args)
8
8
  super
9
- self.header = %w(Title User Length Plays Likes Comments)
10
- self.keys = [:title, :username, :length, :plays, :likes, :comments]
9
+ self.header = %w[Title User Length Plays Likes Comments]
10
+ self.keys = %i[title username length plays likes comments]
11
11
  end
12
12
  end
13
13
  end
@@ -5,10 +5,21 @@ module Soundcloud9000
5
5
 
6
6
  def self.start
7
7
  unless client_id = ENV['SC_CLIENT_ID']
8
- puts "You need to set SC_CLIENT_ID to a valid client ID"
8
+ puts 'You need to set SC_CLIENT_ID to a valid client ID'
9
9
  exit 1
10
10
  end
11
11
 
12
+ if ARGV.include?('-v') || ARGV.include?('--version')
13
+ puts Application.get_version
14
+ puts "Copyright (C) #{Time.new.year} Sumanth Ratna"
15
+ exit 0
16
+ end
17
+
18
+ if ARGV.include?('-h') || ARGV.include?('--help')
19
+ puts Application.get_help
20
+ exit 0
21
+ end
22
+
12
23
  client = Client.new(client_id)
13
24
  application = Application.new(client)
14
25
 
@@ -18,5 +29,4 @@ module Soundcloud9000
18
29
 
19
30
  application.run
20
31
  end
21
-
22
32
  end
@@ -2,10 +2,16 @@ $:.push File.expand_path("../lib", __FILE__)
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "soundcloud9000"
5
- s.version = "0.1.1"
5
+ s.version = "0.1.2"
6
6
  s.authors = ["Tobias Schmidt", "Matthias Georgi", "Sumanth Ratna"]
7
7
  s.email = "sratna@sumanthratna.gq"
8
8
  s.homepage = "http://www.github.com/sumanthratna/soundcloud9000"
9
+ s.metadata = {
10
+ "source_code_uri" => "http://www.github.com/sumanthratna/soundcloud9000",
11
+ "bug_tracker_uri" => "http://www.github.com/sumanthratna/soundcloud9000/issues"
12
+ }
13
+ s.requirements << "PortAudio"
14
+ s.requirements << "mpg123"
9
15
  s.summary = "SoundCloud without the stupid CSS files"
10
16
  s.description = "The next generation SoundCloud client"
11
17
  s.license = 'MIT'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soundcloud9000
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Schmidt
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-04-30 00:00:00.000000000 Z
13
+ date: 2019-05-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -105,6 +105,7 @@ extra_rdoc_files:
105
105
  - README.md
106
106
  files:
107
107
  - ".gitignore"
108
+ - ".travis.yml"
108
109
  - Gemfile
109
110
  - LICENSE
110
111
  - README.md
@@ -141,7 +142,9 @@ files:
141
142
  homepage: http://www.github.com/sumanthratna/soundcloud9000
142
143
  licenses:
143
144
  - MIT
144
- metadata: {}
145
+ metadata:
146
+ source_code_uri: http://www.github.com/sumanthratna/soundcloud9000
147
+ bug_tracker_uri: http://www.github.com/sumanthratna/soundcloud9000/issues
145
148
  post_install_message:
146
149
  rdoc_options: []
147
150
  require_paths:
@@ -156,7 +159,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
159
  - - ">="
157
160
  - !ruby/object:Gem::Version
158
161
  version: '0'
159
- requirements: []
162
+ requirements:
163
+ - PortAudio
164
+ - mpg123
160
165
  rubyforge_project:
161
166
  rubygems_version: 2.5.2.3
162
167
  signing_key: