airplay 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Code Climate](https://codeclimate.com/github/elcuervo/airplay.png)](https://codeclimate.com/github/elcuervo/airplay)
|
4
|
+
[![Build Status](https://travis-ci.org/elcuervo/airplay.png?branch=master)](https://travis-ci.org/elcuervo/airplay)
|
4
5
|
|
5
6
|
![Airplay](doc/img/logo.png)
|
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
|
+
![Block TV](doc/img/block_tv.jpg)
|
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
|
+
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/elcuervo/airplay/trend.png)](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
|
+
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/elcuervo/airplay/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
data/doc/header.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Airplay
|
2
2
|
|
3
3
|
[![Code Climate](https://codeclimate.com/github/elcuervo/airplay.png)](https://codeclimate.com/github/elcuervo/airplay)
|
4
|
+
[![Build Status](https://travis-ci.org/elcuervo/airplay.png?branch=master)](https://travis-ci.org/elcuervo/airplay)
|
4
5
|
|
5
6
|
![Airplay](doc/img/logo.png)
|
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
|
+
![Block TV](doc/img/block_tv.jpg)
|
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)
|