airplay 1.0.2 → 1.0.3
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 +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +9 -5
- data/Gemfile +1 -4
- data/Gemfile.lock +13 -14
- data/README.md +38 -5
- data/Rakefile +19 -8
- data/airplay-cli.gemspec +1 -1
- data/bin/air +12 -2
- data/doc/bitdeli.md +1 -0
- data/doc/header.md +2 -1
- data/doc/img/block_tv.jpg +0 -0
- data/doc/installation.md +2 -2
- data/doc/testing.md +14 -0
- data/doc/toc.md +10 -0
- data/doc/usage.md +7 -2
- data/lib/airplay/browser.rb +8 -4
- data/lib/airplay/cli.rb +35 -0
- data/lib/airplay/cli/doctor.rb +60 -0
- data/lib/airplay/cli/version.rb +1 -1
- data/lib/airplay/configuration.rb +3 -1
- data/lib/airplay/connection.rb +46 -17
- data/lib/airplay/connection/authentication.rb +3 -4
- data/lib/airplay/device.rb +57 -17
- data/lib/airplay/device/info.rb +1 -1
- data/lib/airplay/devices.rb +3 -1
- data/lib/airplay/player.rb +10 -2
- data/lib/airplay/server.rb +18 -4
- data/lib/airplay/version.rb +1 -1
- data/lib/airplay/viewer.rb +65 -8
- data/test/integration/fetching_device_information_test.rb +22 -0
- data/test/integration/view_images_test.rb +39 -0
- data/test/integration_helper.rb +23 -0
- data/test/unit/configuration_test.rb +1 -1
- metadata +22 -41
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 75a8e290e50f4041dbc8e11f04e7d251089eb5fc
|
|
4
|
+
data.tar.gz: 373a3cac124b0d0ae1c6ef84c3be92efbdb571aa
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 97485baf2965f80a3bc5c72680306312d9caecc756f7f2512c6901c0cf31fe8740714ce362dbb8807c4d384641f8931a2fbc68552bb3bb5f21a8b26d764f2ffe
|
|
7
|
+
data.tar.gz: f62352ac1f675c802b68e8a2d647b32dd17c2d2a7c667092f37db34129096ab0420bfb2a1535c9daaab5f78efd2b26c50c0b1bd6eae552982c0bb164e1e5c977
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
rvm:
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
- 1.9.3
|
|
4
|
+
- 2.0.0
|
|
5
|
+
- 2.1.0
|
|
5
6
|
before_install:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
script: bundle exec rake
|
|
7
|
+
- sudo apt-get -qq update
|
|
8
|
+
- sudo apt-get -qq install rdnssd libavahi-compat-libdnssd-dev
|
|
9
|
+
script: bundle exec rake
|
|
10
|
+
env:
|
|
11
|
+
global:
|
|
12
|
+
secure: PDEIoCg7nim32QGeJKvWcpcTEB0jOSfrH+v5ebrO4ioqznUfoaf1qypWNHrXYY4hINA+L5Tm6HXAPah2OhFkBxZzIlKgWlH1MIx5y6Q7PyBN6MTZMw1GN7sTm+zy9z79ytjdtepI4rlKVSxhAwl3Uid7mNliZx6T8eOP634Rg9s=
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
airplay (1.0.
|
|
4
|
+
airplay (1.0.3)
|
|
5
5
|
CFPropertyList (~> 2.2.0)
|
|
6
6
|
celluloid (>= 0.15.0)
|
|
7
7
|
cuba (~> 3.1.0)
|
|
@@ -12,32 +12,30 @@ PATH
|
|
|
12
12
|
net-http-digest_auth (~> 1.2.1)
|
|
13
13
|
net-ptth (= 0.0.17)
|
|
14
14
|
reel-rack (~> 0.1.0)
|
|
15
|
+
airplay-cli (1.0.2)
|
|
16
|
+
airplay (= 1.0.3)
|
|
17
|
+
clap (~> 1.0.0)
|
|
18
|
+
ruby-progressbar (~> 1.2.0)
|
|
15
19
|
|
|
16
20
|
GEM
|
|
17
21
|
remote: http://rubygems.org/
|
|
18
22
|
specs:
|
|
19
|
-
CFPropertyList (2.2.
|
|
23
|
+
CFPropertyList (2.2.6)
|
|
20
24
|
celluloid (0.15.2)
|
|
21
25
|
timers (~> 1.1.0)
|
|
22
26
|
celluloid-io (0.15.0)
|
|
23
27
|
celluloid (>= 0.15.0)
|
|
24
28
|
nio4r (>= 0.5.0)
|
|
25
|
-
|
|
26
|
-
cuba (3.1.
|
|
29
|
+
clap (1.0.0)
|
|
30
|
+
cuba (3.1.1)
|
|
27
31
|
rack
|
|
28
|
-
debugger (1.6.2)
|
|
29
|
-
columnize (>= 0.3.1)
|
|
30
|
-
debugger-linecache (~> 1.2.0)
|
|
31
|
-
debugger-ruby_core_source (~> 1.2.3)
|
|
32
|
-
debugger-linecache (1.2.0)
|
|
33
|
-
debugger-ruby_core_source (1.2.3)
|
|
34
32
|
dnssd (2.0)
|
|
35
33
|
fakeweb (1.3.0)
|
|
36
34
|
given_core (3.0.0)
|
|
37
35
|
sorcerer (>= 0.3.7)
|
|
38
36
|
http (0.5.0)
|
|
39
37
|
http_parser.rb
|
|
40
|
-
http_parser.rb (0.6.0
|
|
38
|
+
http_parser.rb (0.6.0)
|
|
41
39
|
log4r (1.1.10)
|
|
42
40
|
micromachine (1.0.4)
|
|
43
41
|
mime-types (2.0)
|
|
@@ -50,7 +48,7 @@ GEM
|
|
|
50
48
|
celluloid-io (>= 0.15.0)
|
|
51
49
|
http_parser.rb (>= 0.6.0.beta.2)
|
|
52
50
|
rack (>= 1.4.5)
|
|
53
|
-
nio4r (0.
|
|
51
|
+
nio4r (1.0.0)
|
|
54
52
|
rack (1.5.2)
|
|
55
53
|
rake (10.1.0)
|
|
56
54
|
reel (0.4.0)
|
|
@@ -62,10 +60,11 @@ GEM
|
|
|
62
60
|
reel-rack (0.1.0)
|
|
63
61
|
rack (>= 1.4.0)
|
|
64
62
|
reel (>= 0.4.0)
|
|
63
|
+
ruby-progressbar (1.2.0)
|
|
65
64
|
sorcerer (1.0.2)
|
|
66
65
|
timers (1.1.0)
|
|
67
66
|
vcr (2.4.0)
|
|
68
|
-
websocket_parser (0.1.
|
|
67
|
+
websocket_parser (0.1.5)
|
|
69
68
|
http
|
|
70
69
|
|
|
71
70
|
PLATFORMS
|
|
@@ -73,7 +72,7 @@ PLATFORMS
|
|
|
73
72
|
|
|
74
73
|
DEPENDENCIES
|
|
75
74
|
airplay!
|
|
76
|
-
|
|
75
|
+
airplay-cli!
|
|
77
76
|
fakeweb (~> 1.3.0)
|
|
78
77
|
minitest (~> 4.4.0)
|
|
79
78
|
minitest-given (~> 3.0.0)
|
data/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Airplay
|
|
2
2
|
|
|
3
3
|
[](https://codeclimate.com/github/elcuervo/airplay)
|
|
4
|
+
[](https://travis-ci.org/elcuervo/airplay)
|
|
4
5
|
|
|
5
6
|

|
|
6
7
|
|
|
@@ -13,13 +14,24 @@ You can contribute with code, bugs or feature requests.
|
|
|
13
14
|
|
|
14
15
|
The development of the gem takes time and there's a lot of research and hardware
|
|
15
16
|
tests to make all of this. If you want to contribute please consider donating as
|
|
16
|
-
much as you want in: https://gumroad.com/l/airplay
|
|
17
|
+
much as you want in: [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HE867B8J6ARQ4) or [Gumroad](https://gumroad.com/l/airplay)
|
|
17
18
|
|
|
18
19
|
## Help
|
|
19
20
|
|
|
20
21
|
* irc feenode: #airplay
|
|
21
22
|
* twitter: http://twitter.com/airplayrb
|
|
22
23
|
|
|
24
|
+
# Table of Contents
|
|
25
|
+
|
|
26
|
+
* [Contribute](#contribute)
|
|
27
|
+
* [Installation](#installation)
|
|
28
|
+
* [Usage](#usage)
|
|
29
|
+
* [CLI](#cli-1)
|
|
30
|
+
* [Library](#library-1)
|
|
31
|
+
* [Testing](#testing)
|
|
32
|
+
* [Documentation](#documentation)
|
|
33
|
+
* [Contributors](#contributors)
|
|
34
|
+
|
|
23
35
|
## Installation
|
|
24
36
|
|
|
25
37
|
### Library
|
|
@@ -70,7 +82,7 @@ Airplay.configure do |config|
|
|
|
70
82
|
config.log_level # Log4r levels (Default: Log4r::ERROR)
|
|
71
83
|
config.autodiscover # Allows to search for nodes (Default: true)
|
|
72
84
|
config.host # In which host to bind the server (Default: 0.0.0.0)
|
|
73
|
-
config.port # In which port to bind the server (Default:
|
|
85
|
+
config.port # In which port to bind the server (Default: will find one)
|
|
74
86
|
config.output # Where to log (Default: Log4r::Outputter.stdout)
|
|
75
87
|
end
|
|
76
88
|
```
|
|
@@ -85,12 +97,15 @@ Airplay.devices.each do |device|
|
|
|
85
97
|
end
|
|
86
98
|
```
|
|
87
99
|
|
|
88
|
-
####
|
|
100
|
+
#### Accessing and Grouping
|
|
89
101
|
|
|
90
102
|
```ruby
|
|
91
103
|
# You can access a known device easily
|
|
92
104
|
device = Airplay["Apple TV"]
|
|
93
105
|
|
|
106
|
+
# And add the password of the device if needed
|
|
107
|
+
device.password = "my super secret password"
|
|
108
|
+
|
|
94
109
|
# Or you can group known devices to have them do a given action together
|
|
95
110
|
Airplay.group["Backyard"] << Airplay["Apple TV"]
|
|
96
111
|
Airplay.group["Backyard"] << Airplay["Room TV"]
|
|
@@ -168,6 +183,8 @@ player.pause
|
|
|
168
183
|
player.resume
|
|
169
184
|
player.stop
|
|
170
185
|
player.scrub
|
|
186
|
+
player.info
|
|
187
|
+
player.seek
|
|
171
188
|
|
|
172
189
|
# Access the playback time per second
|
|
173
190
|
player.progress -> progress {
|
|
@@ -175,6 +192,21 @@ player.progress -> progress {
|
|
|
175
192
|
}
|
|
176
193
|
```
|
|
177
194
|
|
|
195
|
+
# Testing
|
|
196
|
+
|
|
197
|
+
Now there are two types of tests: Regular unit tests and integration tests.
|
|
198
|
+
Thanks to the magic of the internet and a raspberry pi there are integration
|
|
199
|
+
tests with a real Apple TV that is currently accessible.
|
|
200
|
+
|
|
201
|
+

|
|
202
|
+
|
|
203
|
+
The Apple TV is password protected to avoid issues with the tests but is
|
|
204
|
+
configured in Travis CI. For that reason you won't be able to run those tests if
|
|
205
|
+
you don't have an Apple TV.
|
|
206
|
+
|
|
207
|
+
Run unit tests with: `rake test:unit` and integration ones with: `rake test:integration`
|
|
208
|
+
You can run all of them together with: `rake test:all`
|
|
209
|
+
|
|
178
210
|
## Documentation
|
|
179
211
|
|
|
180
212
|
All the documentation of the README can be found in the `doc` folder.
|
|
@@ -184,5 +216,6 @@ To generate an updated README based on the contents of `doc` please use `rake do
|
|
|
184
216
|
|
|
185
217
|
* [sodabrew](http://github.com/sodabrew)
|
|
186
218
|
* [pote](http://github.com/pote)
|
|
187
|
-
|
|
188
|
-
|
|
219
|
+
|
|
220
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
|
221
|
+
|
data/Rakefile
CHANGED
|
@@ -5,11 +5,6 @@ require "fileutils"
|
|
|
5
5
|
require "airplay/version"
|
|
6
6
|
require "airplay/cli/version"
|
|
7
7
|
|
|
8
|
-
Rake::TestTask.new("spec") do |t|
|
|
9
|
-
t.libs << "test"
|
|
10
|
-
t.pattern = "test/**/*_test.rb"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
8
|
class RuleBuilder
|
|
14
9
|
attr_reader :task, :info
|
|
15
10
|
|
|
@@ -74,17 +69,33 @@ class RuleBuilder
|
|
|
74
69
|
end
|
|
75
70
|
end
|
|
76
71
|
|
|
72
|
+
|
|
73
|
+
|
|
77
74
|
builder = RuleBuilder.new(task: method(:task))
|
|
78
75
|
namespace :build, &builder.construct(:build)
|
|
79
76
|
namespace :install, &builder.construct(:install)
|
|
80
77
|
namespace :release, &builder.construct(:release)
|
|
81
78
|
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
Rake::TestTask.new("test:all") do |t|
|
|
80
|
+
t.libs << "test"
|
|
81
|
+
t.pattern = "test/**/*_test.rb"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
Rake::TestTask.new("test:unit") do |t|
|
|
85
|
+
t.libs << "test"
|
|
86
|
+
t.pattern = "test/unit/**/*_test.rb"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
Rake::TestTask.new("test:integration") do |t|
|
|
90
|
+
t.libs << "test"
|
|
91
|
+
t.pattern = "test/integration**/*_test.rb"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
task :default => "test:all"
|
|
84
95
|
|
|
85
96
|
namespace :doc do
|
|
86
97
|
task :generate do
|
|
87
|
-
structure = %w(header installation usage documentation contributors)
|
|
98
|
+
structure = %w(header toc installation usage testing documentation contributors bitdeli)
|
|
88
99
|
|
|
89
100
|
File.open("README.md", "w+") do |f|
|
|
90
101
|
structure.each { |part| f << File.read("doc/#{part}.md") + "\n" }
|
data/airplay-cli.gemspec
CHANGED
|
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
|
13
13
|
s.homepage = "http://github.com/elcuervo/airplay"
|
|
14
14
|
s.files = %w(bin/air lib/airplay/cli.rb)
|
|
15
15
|
|
|
16
|
-
s.add_dependency("airplay", "= 1.0.
|
|
16
|
+
s.add_dependency("airplay", "= 1.0.3")
|
|
17
17
|
s.add_dependency("clap", "~> 1.0.0")
|
|
18
18
|
s.add_dependency("ruby-progressbar", "~> 1.2.0")
|
|
19
19
|
end
|
data/bin/air
CHANGED
|
@@ -7,24 +7,34 @@ require "airplay/cli/version"
|
|
|
7
7
|
begin
|
|
8
8
|
Clap.run ARGV,
|
|
9
9
|
"--device" => lambda { |device_name| @device = Airplay[device_name] },
|
|
10
|
+
"--url" => lambda { |url| @url = url },
|
|
10
11
|
"--wait" => lambda { |sec| @wait = sec.to_i },
|
|
11
12
|
"--interactive" => lambda { @interactive = true },
|
|
13
|
+
"--password" => lambda { |password| @password = password },
|
|
12
14
|
|
|
13
15
|
"help" => Airplay::CLI.method(:help),
|
|
14
16
|
|
|
15
17
|
"list" => Airplay::CLI.method(:list),
|
|
16
18
|
|
|
19
|
+
"doctor" => Airplay::CLI.method(:doctor),
|
|
20
|
+
|
|
17
21
|
"version" => Airplay::CLI.method(:version),
|
|
18
22
|
|
|
19
23
|
"play" => lambda { |video|
|
|
20
|
-
options = {
|
|
24
|
+
options = {
|
|
25
|
+
device: @device || Airplay.devices.first,
|
|
26
|
+
password: @password || false,
|
|
27
|
+
url: @url || false
|
|
28
|
+
}
|
|
21
29
|
Airplay::CLI.play(video, options)
|
|
22
30
|
},
|
|
23
31
|
|
|
24
32
|
"view" => lambda { |file|
|
|
25
33
|
options = {
|
|
26
|
-
device: @device || Airplay.devices.first,
|
|
34
|
+
device: @device || @url ? false : Airplay.devices.first,
|
|
27
35
|
interactive: @interactive || false,
|
|
36
|
+
password: @password || false,
|
|
37
|
+
url: @url || false,
|
|
28
38
|
wait: @wait || 3
|
|
29
39
|
}
|
|
30
40
|
Airplay::CLI.view(file, options)
|
data/doc/bitdeli.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
data/doc/header.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Airplay
|
|
2
2
|
|
|
3
3
|
[](https://codeclimate.com/github/elcuervo/airplay)
|
|
4
|
+
[](https://travis-ci.org/elcuervo/airplay)
|
|
4
5
|
|
|
5
6
|

|
|
6
7
|
|
|
@@ -13,7 +14,7 @@ You can contribute with code, bugs or feature requests.
|
|
|
13
14
|
|
|
14
15
|
The development of the gem takes time and there's a lot of research and hardware
|
|
15
16
|
tests to make all of this. If you want to contribute please consider donating as
|
|
16
|
-
much as you want in: https://gumroad.com/l/airplay
|
|
17
|
+
much as you want in: [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=HE867B8J6ARQ4) or [Gumroad](https://gumroad.com/l/airplay)
|
|
17
18
|
|
|
18
19
|
## Help
|
|
19
20
|
|
|
Binary file
|
data/doc/installation.md
CHANGED
data/doc/testing.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Testing
|
|
2
|
+
|
|
3
|
+
Now there are two types of tests: Regular unit tests and integration tests.
|
|
4
|
+
Thanks to the magic of the internet and a raspberry pi there are integration
|
|
5
|
+
tests with a real Apple TV that is currently accessible.
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
The Apple TV is password protected to avoid issues with the tests but is
|
|
10
|
+
configured in Travis CI. For that reason you won't be able to run those tests if
|
|
11
|
+
you don't have an Apple TV.
|
|
12
|
+
|
|
13
|
+
Run unit tests with: `rake test:unit` and integration ones with: `rake test:integration`
|
|
14
|
+
You can run all of them together with: `rake test:all`
|
data/doc/toc.md
ADDED
data/doc/usage.md
CHANGED
|
@@ -38,7 +38,7 @@ Airplay.configure do |config|
|
|
|
38
38
|
config.log_level # Log4r levels (Default: Log4r::ERROR)
|
|
39
39
|
config.autodiscover # Allows to search for nodes (Default: true)
|
|
40
40
|
config.host # In which host to bind the server (Default: 0.0.0.0)
|
|
41
|
-
config.port # In which port to bind the server (Default:
|
|
41
|
+
config.port # In which port to bind the server (Default: will find one)
|
|
42
42
|
config.output # Where to log (Default: Log4r::Outputter.stdout)
|
|
43
43
|
end
|
|
44
44
|
```
|
|
@@ -53,12 +53,15 @@ Airplay.devices.each do |device|
|
|
|
53
53
|
end
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
####
|
|
56
|
+
#### Accessing and Grouping
|
|
57
57
|
|
|
58
58
|
```ruby
|
|
59
59
|
# You can access a known device easily
|
|
60
60
|
device = Airplay["Apple TV"]
|
|
61
61
|
|
|
62
|
+
# And add the password of the device if needed
|
|
63
|
+
device.password = "my super secret password"
|
|
64
|
+
|
|
62
65
|
# Or you can group known devices to have them do a given action together
|
|
63
66
|
Airplay.group["Backyard"] << Airplay["Apple TV"]
|
|
64
67
|
Airplay.group["Backyard"] << Airplay["Room TV"]
|
|
@@ -136,6 +139,8 @@ player.pause
|
|
|
136
139
|
player.resume
|
|
137
140
|
player.stop
|
|
138
141
|
player.scrub
|
|
142
|
+
player.info
|
|
143
|
+
player.seek
|
|
139
144
|
|
|
140
145
|
# Access the playback time per second
|
|
141
146
|
player.progress -> progress {
|
data/lib/airplay/browser.rb
CHANGED
|
@@ -52,7 +52,11 @@ module Airplay
|
|
|
52
52
|
address = get_device_address(resolved)
|
|
53
53
|
type = get_type(resolved.text_record)
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
device = create_device(node.name, address, type)
|
|
56
|
+
device.text_records = resolved.text_record
|
|
57
|
+
|
|
58
|
+
devices << device
|
|
59
|
+
|
|
56
60
|
resolved.flags.more_coming?
|
|
57
61
|
end
|
|
58
62
|
|
|
@@ -95,15 +99,15 @@ module Airplay
|
|
|
95
99
|
target
|
|
96
100
|
end
|
|
97
101
|
|
|
98
|
-
# Private: Creates
|
|
102
|
+
# Private: Creates a device
|
|
99
103
|
#
|
|
100
104
|
# name - The device name
|
|
101
105
|
# address - The device address
|
|
102
106
|
#
|
|
103
107
|
# Returns nothing
|
|
104
108
|
#
|
|
105
|
-
def
|
|
106
|
-
|
|
109
|
+
def create_device(name, address, type)
|
|
110
|
+
Device.new(
|
|
107
111
|
name: name.gsub(/\u00a0/, ' '),
|
|
108
112
|
address: address,
|
|
109
113
|
type: type
|
data/lib/airplay/cli.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require "ruby-progressbar"
|
|
2
2
|
require "airplay"
|
|
3
3
|
require "airplay/cli/image_viewer"
|
|
4
|
+
require "airplay/cli/doctor"
|
|
4
5
|
|
|
5
6
|
# Public: Airplay core module
|
|
6
7
|
#
|
|
@@ -28,12 +29,15 @@ module Airplay
|
|
|
28
29
|
version - The current airplay-cli version.
|
|
29
30
|
play - Plays a local or remote video.
|
|
30
31
|
view - Shows an image or a folder of images, can be an url.
|
|
32
|
+
doctor - Shows some debug information to trace bugs.
|
|
31
33
|
|
|
32
34
|
Options:
|
|
33
35
|
|
|
34
36
|
--device - Name of the device where it should be played (Default: The first one)
|
|
35
37
|
--wait - The wait time for playing an slideshow (Default: 3)
|
|
36
38
|
--interactive - Control the slideshow using left and right arrows.
|
|
39
|
+
--password - Adds the device password
|
|
40
|
+
--url - Allows you to specify an Apple TV url
|
|
37
41
|
|
|
38
42
|
EOS
|
|
39
43
|
end
|
|
@@ -47,6 +51,8 @@ module Airplay
|
|
|
47
51
|
puts <<-EOS.gsub(/^\s{12}/,'')
|
|
48
52
|
* #{device.name} (#{device.info.model} running #{device.info.os_version})
|
|
49
53
|
ip: #{device.ip}
|
|
54
|
+
mac: #{device.id}
|
|
55
|
+
password?: #{device.password? ? "yes" : "no"}
|
|
50
56
|
type: #{device.type}
|
|
51
57
|
resolution: #{device.info.resolution}
|
|
52
58
|
|
|
@@ -64,6 +70,12 @@ module Airplay
|
|
|
64
70
|
#
|
|
65
71
|
def play(video, options)
|
|
66
72
|
device = options[:device]
|
|
73
|
+
password = options[:password]
|
|
74
|
+
url = options[:url]
|
|
75
|
+
|
|
76
|
+
Airplay.devices.add("Apple TV", url) if url
|
|
77
|
+
device.password = password if password
|
|
78
|
+
|
|
67
79
|
player = device.play(video)
|
|
68
80
|
puts "Playing #{video}"
|
|
69
81
|
bar = ProgressBar.create(
|
|
@@ -78,6 +90,20 @@ module Airplay
|
|
|
78
90
|
player.wait
|
|
79
91
|
end
|
|
80
92
|
|
|
93
|
+
def doctor
|
|
94
|
+
puts <<-EOS.gsub!(" "*10, "")
|
|
95
|
+
|
|
96
|
+
This will run some basic tests on your network trying to find errors
|
|
97
|
+
and debug information to help fix them.
|
|
98
|
+
|
|
99
|
+
EOS
|
|
100
|
+
|
|
101
|
+
who = Airplay::CLI::Doctor.new
|
|
102
|
+
|
|
103
|
+
puts "Running dns-sd tests:"
|
|
104
|
+
who.information
|
|
105
|
+
end
|
|
106
|
+
|
|
81
107
|
# Public: Show an image given a device
|
|
82
108
|
#
|
|
83
109
|
# file_or_dir - The url, file path or folder path to the image/s
|
|
@@ -90,6 +116,15 @@ module Airplay
|
|
|
90
116
|
#
|
|
91
117
|
def view(file_or_dir, options)
|
|
92
118
|
device = options[:device]
|
|
119
|
+
password = options[:password]
|
|
120
|
+
url = options[:url]
|
|
121
|
+
|
|
122
|
+
if url
|
|
123
|
+
Airplay.configure { |c| c.autodiscover = false }
|
|
124
|
+
device = Airplay.devices.add("Apple TV", url)
|
|
125
|
+
end
|
|
126
|
+
device.password = password if password
|
|
127
|
+
|
|
93
128
|
viewer = ImageViewer.new(device, options)
|
|
94
129
|
|
|
95
130
|
if File.directory?(file_or_dir)
|