keenser 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 234add4fefc4b55ee4c6e8908a46229c7d7e545d
4
- data.tar.gz: 7b9bb5020bcd4602934bb0894566d33b55e65c08
3
+ metadata.gz: 8a82b0c422a1dc920fe649ef09c2fc057d4673da
4
+ data.tar.gz: ca07f7ac0c8def3bda386609c3ae2ef74c7b6605
5
5
  SHA512:
6
- metadata.gz: 2d830374f89a3d1018036d40640a3f316dc21441ec03228a7333dcd1eeeef12906ed8dcaeb6acc2df8beeaafaec5bf137a0d7442cf601645169b35879a263414
7
- data.tar.gz: 7aa2a31c19ecfe293227344b641068188f2bda7afd42fcdbe849404d366c0d6865fca600eec91cfac27b876a782c6c125a510623bcc566b54bf7edcbc7e872f4
6
+ metadata.gz: b92a2b36d02f38f21fe08edfcd4ae0d0384935a8f53ff13595d4c2a046bf94f1a390122d3324479613e67393eefa25945c567b84c8e9decf38bf2bfb848d5f2a
7
+ data.tar.gz: d0a1b396f1ffdd39575d3cbc06cd37a81218b666c02dc128d5f0255aed4a1225cc1346ee7549625b91a6228f84059aa64fab8d122dbb6cf9f1795345ee223898
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in keenser.gemspec
4
3
  gemspec
@@ -1,85 +1,40 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- %w{
4
- colorize json pry thor
5
- }.each { |m| require m }
6
-
7
- require_relative "../lib/keenser"
8
-
9
- # TODO: make asks readline friendly
10
- class Default < Thor
11
- desc "setup", "Set up the database"
12
- def setup
13
- unless ENV["SYNC"]
14
- ENV["SYNC"] = ask "Path to sync directory >"
15
- puts %!You should probably add `export SYNC="#{ENV['SYNC']}"` to your .*rc file!.yellow
16
- puts
17
- end
18
-
19
- Keenser::DB.setup!
20
-
21
- # FIXME: need to do something to reload the connection / model after the
22
- # db is setup for the first time
23
- unless Keenser::Computer.local
24
- puts arr "Configuring local machine"
25
-
26
- role = askd "Role", :client
27
- music = askd "Music directory", "#{ENV['SYNC']}/Music"
28
- playlists = askd "Playlist directory", "#{ENV['HOME']}/Playlists"
29
-
30
- Keenser::Computer.create({
31
- name: `hostname`,
32
- role: role,
33
- music: music,
34
- playlists: playlists
35
- })
36
-
37
- puts "Saved local config"
38
- puts
39
- end
40
-
41
- puts "You're all set!"
42
- end
43
-
44
- desc "console", "Attach to a database console"
45
- def console
46
- Keenser.pry
47
- end
48
-
49
- # TODO: look into subcommands
50
- desc "play", "Play music"
51
- def play *args
52
- cmd = args.shift || "pause"
53
- Keenser::Music.send cmd, *args
54
- rescue => e
55
- puts "✗ #{e.message}"
56
- end
57
-
58
- desc "status", "Show current dependency status"
59
- def status
60
- [Keenser::DB, Keenser::Music].each do |m|
61
- name = m.name.sub /^Keenser::/, ''
62
- status, msg = begin
63
- ['✓'.green, m.status]
64
- rescue => e
65
- ['✗'.red, e.to_s]
66
- end
67
- puts "#{status} #{name.underline}\t #{msg}"
3
+ cmd = ARGV.shift
4
+ session = "keenser"
5
+
6
+
7
+ if cmd == "boot"
8
+ unless system "tmux list-windows -t '#{session}' >/dev/null 2>&1"
9
+ `TMUX= tmux new-session -s '#{session}' -d`
10
+ `tmux send-keys -t '#{session}' '#{__FILE__} server' C-m`
11
+ `tmux split-window -h -t '#{session}'`
12
+ `tmux send-keys -t '#{session}' "cmus" C-m`
13
+ if ENV["TMUX"]
14
+ puts "Started new session '#{session}'"
15
+ exit
16
+ else
17
+ exec "tmux attach -t '#{session}'"
68
18
  end
69
19
  end
20
+ end
70
21
 
71
- no_commands do
72
-
73
- def arr str
74
- "#{'==>'.light_blue} #{str}"
75
- end
76
22
 
77
- def askd field, default
78
- val = ask("#{field} (#{default}) >").strip
79
- val.empty? ? default : val
80
- end
23
+ require_relative "../lib/keenser"
81
24
 
82
- end
25
+ case cmd
26
+ when "boot"
27
+ # No-op, just run the above startup logic
28
+ when nil, "console"
29
+ require "pry"
30
+ Pry.commands.delete "play"
31
+ Keenser.pry
32
+ when "server"
33
+ Keenser.start_server!
34
+ when "remote"
35
+ require "drb/drb"
36
+ DRb.start_service
37
+ puts DRbObject.new_with_uri(Keenser::Server.uri).send *ARGV
38
+ else
39
+ raise Keenser::Error.new "Not implemented: #{cmd}"
83
40
  end
84
-
85
- Default.start
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "colorize", "~> 0.6"
22
22
  spec.add_dependency "pry", "~> 0.9"
23
23
  spec.add_dependency "sequel", "~> 4.6"
24
- spec.add_dependency "thor", "~> 0.18"
25
24
 
26
25
  spec.add_development_dependency "bundler", "~> 1.5"
27
26
  spec.add_development_dependency "rake", "~> 10.1"
@@ -1,7 +1,9 @@
1
- require "sequel"
1
+ # encoding: utf-8
2
+ # FIXME: lazy-load everything
3
+ %w{ colorize sequel }.each { |m| require m }
2
4
 
3
5
  %w{
4
- version error db music
6
+ version error db music server
5
7
  }.each { |m| require_relative "../lib/keenser/#{m}" }
6
8
 
7
9
  module Keenser
@@ -19,4 +21,62 @@ module Keenser
19
21
  :Tag => "tag",
20
22
  :SongTag => "song_tag"
21
23
  }.each { |name,m| autoload name, src("model/#{m}") }
24
+
25
+ def self.setup
26
+ unless ENV["SYNC"]
27
+ ENV["SYNC"] = ask "Path to sync directory >"
28
+ puts %!You should probably add `export SYNC="#{ENV['SYNC']}"` to your .*rc file!.yellow
29
+ puts
30
+ end
31
+
32
+ DB.setup!
33
+
34
+ # FIXME: need to do something to reload the connection / model after the
35
+ # db is setup for the first time
36
+ unless Computer.local
37
+ puts arr "Configuring local machine"
38
+
39
+ role = ask "Role", :client
40
+ music = ask "Music directory", "#{ENV['SYNC']}/Music"
41
+ playlists = ask "Playlist directory", "#{ENV['HOME']}/Playlists"
42
+
43
+ Computer.create({
44
+ name: `hostname`,
45
+ role: role,
46
+ music: music,
47
+ playlists: playlists
48
+ })
49
+
50
+ puts "Saved local config"
51
+ puts
52
+ end
53
+
54
+ puts "You're all set!"
55
+ end
56
+
57
+ def self.status
58
+ [Keenser::DB, Keenser::Music].each do |m|
59
+ name = m.name.sub /^Keenser::/, ''
60
+ status, msg = begin
61
+ ['✓'.green, m.status]
62
+ rescue => e
63
+ ['✗'.red, e.to_s]
64
+ end
65
+ puts "#{status} #{name.underline}\t #{msg}"
66
+ end
67
+ end
68
+
69
+ private
70
+
71
+ def self.arr str
72
+ "#{'==>'.light_blue} #{str}"
73
+ end
74
+
75
+ def self.ask field, default=nil
76
+ print field
77
+ print " (#{default})" if default
78
+ print " > "
79
+ val = STDIN.gets.strip
80
+ val.empty? ? default : val
81
+ end
22
82
  end
@@ -1,9 +1,8 @@
1
+ # encoding: utf-8
1
2
  module Keenser
2
3
  module Music
3
4
  extend self
4
5
 
5
- SESSION_NAME = "music"
6
-
7
6
  def status
8
7
  expect "tmux"
9
8
  expect "cmus-remote"
@@ -15,29 +14,30 @@ module Keenser
15
14
  end
16
15
  end
17
16
 
17
+ def show
18
+ playing.to_s
19
+ end
20
+
18
21
  %w{ prev pause next }.each do |cmd|
19
- define_method(cmd) { remote cmd; puts playing.to_s }
22
+ define_method cmd do
23
+ puts "Pressed #{cmd}"
24
+ `cmus-remote --#{cmd}`
25
+ show
26
+ end
20
27
  end
21
28
 
22
29
  def tag name
23
30
  playing.tag name
24
- puts "#{name} #{playing}"
25
- end
26
-
27
- def method_missing *args
28
- name = args.first.to_s
29
- if Tag.where(name: name).any?
30
- list name
31
- else
32
- raise Error.new "Don't know how to play '#{args}'"
33
- end
31
+ puts "Tagging #{playing} as #{name}"
32
+ "#{name} ← #{playing}"
34
33
  end
35
34
 
36
35
  def list name
37
- t = Tag.where(name: name).first
36
+ t = Tag.where(name: name.to_s).first
37
+ t.export!
38
38
  raise Error.new "Cannot find tag '#{t}'" unless t
39
39
  `echo "load -p #{t.playlist}\nset play_library=false\nplayer-next" | cmus-remote`
40
- puts "'#{name}' now playing"
40
+ "'#{name}' now playing"
41
41
  end
42
42
 
43
43
  def import name, path
@@ -51,12 +51,13 @@ module Keenser
51
51
  n += 1
52
52
  end
53
53
  t.export!
54
- puts "Imported #{n} songs"
54
+ "Imported #{n} songs"
55
55
  end
56
56
 
57
57
  def all
58
+ puts "Playing all songs"
58
59
  `echo "set play_library=true\nplayer-next" | cmus-remote`
59
- puts playing.to_s
60
+ show
60
61
  end
61
62
 
62
63
  private
@@ -77,7 +78,6 @@ module Keenser
77
78
  s
78
79
  end
79
80
 
80
-
81
81
  def test cmd
82
82
  system "#{cmd} >/dev/null 2>&1"
83
83
  end
@@ -85,14 +85,5 @@ module Keenser
85
85
  def expect bin
86
86
  raise Error.new "'#{bin}' is not present" unless test "which #{bin}"
87
87
  end
88
-
89
- def remote cmd
90
- unless test "tmux list-windows -t '#{SESSION_NAME}'"
91
- # tmux might complain about starting nested sessions without the TMUX=
92
- `TMUX= tmux new-session -s '#{SESSION_NAME}' -d 'cmus'`
93
- end
94
-
95
- `cmus-remote --#{cmd}`
96
- end
97
88
  end
98
89
  end
@@ -0,0 +1,25 @@
1
+ require "drb/drb"
2
+ require "pry"
3
+
4
+ module Keenser
5
+ def self.start_server!
6
+ # FIXME: $SAFE = 1
7
+
8
+ puts "Starting DRb server at '#{Server.uri}'"
9
+ DRb.start_service Server.uri, Server.new
10
+ DRb.thread.join
11
+ end
12
+
13
+ class Server
14
+ def self.uri
15
+ "druby://localhost:8787"
16
+ end
17
+
18
+ def play *args
19
+ cmd = args.shift || "pause"
20
+ Music.send cmd, *args
21
+ rescue => e
22
+ puts "#{'✗'.red} #{e.message}"
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Keenser
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keenser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Dabbs
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '4.6'
55
- - !ruby/object:Gem::Dependency
56
- name: thor
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.18'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.18'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: bundler
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -120,6 +106,7 @@ files:
120
106
  - lib/keenser/model/song_tag.rb
121
107
  - lib/keenser/model/tag.rb
122
108
  - lib/keenser/music.rb
109
+ - lib/keenser/server.rb
123
110
  - lib/keenser/version.rb
124
111
  homepage: ''
125
112
  licenses:
@@ -146,3 +133,4 @@ signing_key:
146
133
  specification_version: 4
147
134
  summary: A wee sidekick
148
135
  test_files: []
136
+ has_rdoc: