airstream 0.3.7 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 26c40a42a5da7cbfdd5467b39c2561d4af6e95d0
4
+ data.tar.gz: 095071b2e9df32109de7052bdb705434fc5cb16d
5
+ SHA512:
6
+ metadata.gz: ebe726dd234697e786a91474b26f74e078f14016205c1ccdcccf70ac200b7e86350c734011de41d2951da9fd5d857540f0406d4edeb3304e3e8f4b10b2386113
7
+ data.tar.gz: f0bf04ee5c7768f0e60da864630f39540951b8fe5366acda57f1457bfb00724a96749456087da5fdd77e85c3295d2909042a43580c615b52b087d8292c30b19b
data/bin/airimg CHANGED
@@ -86,6 +86,8 @@ rescue OptionParser::InvalidArgument => ex
86
86
  STDERR.puts ex.message
87
87
  STDERR.puts option_parser
88
88
  exit EXIT_ERROR
89
+ ensure
90
+ Airstream::Io.show_input
89
91
  end
90
92
 
91
93
  exit EXIT_OK
@@ -9,10 +9,10 @@ def self.exit(status)
9
9
  end
10
10
 
11
11
  options = {
12
- reciever: '192.168.1.8',
12
+ reciever: '192.168.0.123',
13
13
  quiet: false,
14
14
  verbose: false,
15
- use_local_http: true
15
+ # disable_local_http: true
16
16
  }
17
17
 
18
18
  CONFIG_FILE = File.join(ENV['HOME'], '.airstreamrc')
@@ -55,9 +55,9 @@ Basic options: (configure default in ~/.airstreamrc)
55
55
  options[:verbose] = verbose
56
56
  end
57
57
 
58
- # opts.on("--enable-use-httpd",
59
- # "use httpd to offer local files") do |use_httpd|
60
- # options[:use_local_httpd] = true
58
+ # opts.on("--disable-use-httpd",
59
+ # "do not create httpd to offer local files") do |disable_httpd|
60
+ # options[:disable_local_httpd] = true
61
61
  # end
62
62
 
63
63
  opts.on("-v", "--version",
@@ -86,15 +86,29 @@ begin
86
86
  io = Airstream::Io.new
87
87
  io.quiet = options[:quiet]
88
88
  io.verbose = options[:verbose]
89
- device = Airstream::Device.new(options[:reciever], playlist)
89
+ node = Airstream::Node.new options[:reciever]
90
+ device = Airstream::Device.new node
91
+ playlist.map! { |file| Airstream::Video.new(file) }
92
+ player = Airstream::Player.new device, playlist
93
+
94
+ io.puts "loading"
95
+ while player.loading?
96
+ io.print "."
97
+ sleep 0.8
98
+ end
90
99
 
91
100
  io.puts "=> press ["+Airstream::Io::KEY_QUIT+"] to exit airstream"
92
101
  Airstream::Io.hide_input
93
- begin
102
+ pbar = ProgressBar.create({ format: '%t |%b%i| %p%%', total: player.duration })
103
+ begin # reconsider playing...
94
104
  sleep UPDATE_TIMEOUT
105
+ formatted_time = Time.at(player.elapsed_time).gmtime.strftime('%R:%S')
106
+ pbar.title = "#{formatted_time}"
107
+ pbar.progress = player.elapsed_time
95
108
  io.catch_input
96
- device.update io
97
- end until io.quit? || device.finished?
109
+ player.update io
110
+ end until io.quit? || player.finished?
111
+ pbar.finish
98
112
 
99
113
  rescue Airplay::Protocol::InvalidMediaError
100
114
  STDERR.puts
@@ -112,6 +126,8 @@ rescue OptionParser::InvalidArgument => ex
112
126
  STDERR.puts ex.message
113
127
  STDERR.puts option_parser
114
128
  exit EXIT_ERROR
129
+ ensure
130
+ Airstream::Io.show_input
115
131
  end
116
132
 
117
133
  exit EXIT_OK
@@ -14,5 +14,6 @@ require 'airstream/version.rb'
14
14
  require 'airstream/io.rb'
15
15
  require 'airstream/network.rb'
16
16
  require 'airstream/node.rb'
17
+ require 'airstream/player.rb'
17
18
  require 'airstream/video.rb'
18
19
  require 'airstream/device.rb'
@@ -1,99 +1,43 @@
1
1
 
2
2
  module Airstream
3
- # pbar = ProgressBar.create(pbar_options)
4
- # while (elapsed_time=server.video_position) < server.video_duration
5
- # io.catch_input
6
- # break if io.quit? || io.skip?
7
- # pbar.progress = elapsed_time
8
- # formatted_time = Time.at(elapsed_time).gmtime.strftime('%R:%S')
9
- # pbar.title = "#{video_title} #{formatted_time}"
10
- # sleep 0.5
11
- # end
12
- # io.show_input
13
- # pbar.finish
14
- class Device
15
-
16
- @local_httpd_allowed = false
17
- @current_file_index
18
3
 
19
- def initialize(reciever, files=[])
20
- @video_files = files
21
- @reciever = Airstream::Node.new reciever
22
- @current_file_index = 0
23
- self.video = files.first unless files.empty?
24
- end
4
+ class Device
25
5
 
26
- def image=(image_file)
27
- @reciever.send_image image_file
28
- end
6
+ attr_reader :player, :video_title
29
7
 
30
- def video=(video_file)
31
- @pbar.finish unless @pbar == nil
32
- @video_duration = nil
33
- video = Video.new(video_file)
34
- @player = @reciever.send_video(video.url)
35
- print "loading"
36
- while loading?
37
- print "."
38
- sleep 0.8
39
- end
40
- @pbar = ProgressBar.create({ format: '%t |%b%i| %p%%', total: video_duration })
41
- @video_title = File.basename(video_file, File.extname(video_file))
8
+ def initialize(reciever)
9
+ @reciever = reciever
42
10
  end
43
11
 
44
- def update(io)
45
- elapsed_time = video_position
46
- formatted_time = Time.at(elapsed_time).gmtime.strftime('%R:%S')
47
- @pbar.title = "#{@video_title} #{formatted_time}"
48
- if io.quit?
49
- Airstream::Io.show_input
50
- exit # TODO skip to last file, no exit
51
- elsif io.skip? || video_duration <= elapsed_time
52
- @current_file_index += 1
53
- self.video = @video_files[@current_file_index] if @video_files.count > @current_file_index
54
- elsif io.prev?
55
- if @current_file_index == 0
56
- @reciever.scrub(0)
57
- else
58
- @current_file_index -= 1
59
- self.video = @video_files[@current_file_index] if @video_files.count > @current_file_index
60
- end
61
- elsif io.fwd?
62
- @reciever.scrub(video_position + 30) if video_position + 30 < video_duration
63
- elsif io.back?
64
- @reciever.scrub(video_position - 30) if video_position - 30 > 0
65
- elsif io.pause?
66
- paused? ? @player.pause : @player.resume
12
+ def file=(file)
13
+ if file.class == Video
14
+ self.video = file
15
+ # when
16
+ # TODO Image then self.image = file
17
+ else
18
+ raise "Unkown file type send to device"
67
19
  end
68
20
  end
69
21
 
70
- def finished?
71
- elapsed_time = video_position
72
- !! (@current_file_index == @video_files.count-1) && (video_duration <= elapsed_time)
73
- end
74
-
75
- def allow_local_httpd=(is_allowed)
76
- @local_httpd_allowed = is_allowed
77
- end
78
-
79
- def local_httpd_allowed?
80
- @local_httpd_allowed
22
+ def image=(image_file)
23
+ @reciever.send_image image_file
81
24
  end
82
25
 
83
- def loading?
84
- @reciever.scrub['position'] == 0
26
+ def video=(video)
27
+ @player = @reciever.send_video video.url
28
+ @video_title = video.to_s
85
29
  end
86
30
 
87
- def video_position
88
- @pbar.progress = @reciever.scrub['position']
31
+ def scrub
32
+ @player.scrub
89
33
  end
90
34
 
91
- def video_duration
92
- @video_duration = @video_duration || @reciever.scrub['duration']
35
+ def duration
36
+ self.scrub["duration"]
93
37
  end
94
38
 
95
- def paused?
96
- @paused = !@paused || false
39
+ def position
40
+ self.scrub["position"]
97
41
  end
98
42
  end
99
43
  end
@@ -25,6 +25,10 @@ module Airstream
25
25
  STDOUT.puts msg if @verbose
26
26
  end
27
27
 
28
+ def error(msg)
29
+ STDERR.puts msg
30
+ end
31
+
28
32
  def self.hide_input
29
33
  `stty raw -echo`
30
34
  end
@@ -6,6 +6,7 @@ module Airstream
6
6
  node = Airplay::Server::Node.new(
7
7
  reciever, reciever, reciever, AIRPLAY_PORT)
8
8
  super node
9
+ # TODO test if does not work without
9
10
  use node # does not work without that second assign
10
11
  end
11
12
 
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Airstream
3
- VERSION = '0.3.7'
3
+ VERSION = '0.4.2'
4
4
  end
@@ -9,20 +9,25 @@ module Airstream
9
9
  attr_reader :url
10
10
 
11
11
  def initialize(video_file)
12
+ @filename = video_file
12
13
  if File.exists? video_file
13
14
  @@server.server.shutdown if @@server
14
- @url = host_file(video_file)
15
+ @url = host_file
15
16
  else
16
17
  @url = video_file
17
18
  end
18
19
  end
19
20
 
20
- def host_file(file)
21
+ def to_s
22
+ File.basename(@filename, File.extname(@filename))
23
+ end
24
+
25
+ def host_file
21
26
  @@server = Rack::Server.new(
22
27
  :server => :webrick,
23
28
  :Host => Airstream::Network.get_local_ip,
24
29
  :Port => AIRSTREAM_PORT,
25
- :app => Rack::File.new(file),
30
+ :app => Rack::File.new(@filename),
26
31
  :AccessLog => [], # stfu webrick
27
32
  :Logger => WEBrick::Log::new("/dev/null", 7)
28
33
  )
metadata CHANGED
@@ -1,97 +1,88 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airstream
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
5
- prerelease:
4
+ version: 0.4.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Christoph Lipautz
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-22 00:00:00.000000000 Z
11
+ date: 2013-12-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: airplay
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: ruby-progressbar
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rack
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: webrick
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: rake
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
- description: ! "A command line tool to stream video and image files to\n airplay-devices."
83
+ description: |-
84
+ A command line tool to stream video and image files to
85
+ airplay-devices.
95
86
  email:
96
87
  - christoph at lipautz.org
97
88
  executables:
@@ -111,27 +102,26 @@ files:
111
102
  - lib/airstream/video.rb
112
103
  homepage: https://github.com/unused/airstream
113
104
  licenses: []
105
+ metadata: {}
114
106
  post_install_message:
115
107
  rdoc_options: []
116
108
  require_paths:
117
109
  - lib
118
110
  - lib
119
111
  required_ruby_version: !ruby/object:Gem::Requirement
120
- none: false
121
112
  requirements:
122
- - - ! '>='
113
+ - - '>='
123
114
  - !ruby/object:Gem::Version
124
115
  version: '0'
125
116
  required_rubygems_version: !ruby/object:Gem::Requirement
126
- none: false
127
117
  requirements:
128
- - - ! '>='
118
+ - - '>='
129
119
  - !ruby/object:Gem::Version
130
120
  version: '0'
131
121
  requirements: []
132
122
  rubyforge_project:
133
- rubygems_version: 1.8.24
123
+ rubygems_version: 2.0.14
134
124
  signing_key:
135
- specification_version: 3
125
+ specification_version: 4
136
126
  summary: A command line tool for streaming to airplay-devices
137
127
  test_files: []