This repository has been archived by the owner on Jan 17, 2018. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 6d23176
Showing
26 changed files
with
1,324 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
source "http://rubygems.org" | ||
gem "rack" | ||
gem "sinatra" | ||
|
||
gem "ken" | ||
gem "data_mapper" | ||
gem "dm-sqlite-adapter" | ||
gem "amatch" | ||
|
||
gem "redis" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
GEM | ||
remote: http://rubygems.org/ | ||
specs: | ||
addressable (2.2.6) | ||
amatch (0.2.9) | ||
tins (~> 0.3) | ||
bcrypt-ruby (3.0.1) | ||
data_mapper (1.2.0) | ||
dm-aggregates (~> 1.2.0) | ||
dm-constraints (~> 1.2.0) | ||
dm-core (~> 1.2.0) | ||
dm-migrations (~> 1.2.0) | ||
dm-serializer (~> 1.2.0) | ||
dm-timestamps (~> 1.2.0) | ||
dm-transactions (~> 1.2.0) | ||
dm-types (~> 1.2.0) | ||
dm-validations (~> 1.2.0) | ||
data_objects (0.10.7) | ||
addressable (~> 2.1) | ||
dm-aggregates (1.2.0) | ||
dm-core (~> 1.2.0) | ||
dm-constraints (1.2.0) | ||
dm-core (~> 1.2.0) | ||
dm-core (1.2.0) | ||
addressable (~> 2.2.6) | ||
dm-do-adapter (1.2.0) | ||
data_objects (~> 0.10.6) | ||
dm-core (~> 1.2.0) | ||
dm-migrations (1.2.0) | ||
dm-core (~> 1.2.0) | ||
dm-serializer (1.2.1) | ||
dm-core (~> 1.2.0) | ||
fastercsv (~> 1.5.4) | ||
json (~> 1.6.1) | ||
json_pure (~> 1.6.1) | ||
multi_json (~> 1.0.3) | ||
dm-sqlite-adapter (1.2.0) | ||
dm-do-adapter (~> 1.2.0) | ||
do_sqlite3 (~> 0.10.6) | ||
dm-timestamps (1.2.0) | ||
dm-core (~> 1.2.0) | ||
dm-transactions (1.2.0) | ||
dm-core (~> 1.2.0) | ||
dm-types (1.2.1) | ||
bcrypt-ruby (~> 3.0.0) | ||
dm-core (~> 1.2.0) | ||
fastercsv (~> 1.5.4) | ||
json (~> 1.6.1) | ||
multi_json (~> 1.0.3) | ||
stringex (~> 1.3.0) | ||
uuidtools (~> 2.1.2) | ||
dm-validations (1.2.0) | ||
dm-core (~> 1.2.0) | ||
do_sqlite3 (0.10.7) | ||
data_objects (= 0.10.7) | ||
extlib (0.9.15) | ||
fastercsv (1.5.4) | ||
json (1.6.4) | ||
json_pure (1.6.4) | ||
ken (0.2.1) | ||
addressable | ||
extlib | ||
json | ||
multi_json (1.0.4) | ||
rack (1.4.0) | ||
rack-protection (1.2.0) | ||
rack | ||
redis (2.2.2) | ||
sinatra (1.3.2) | ||
rack (~> 1.3, >= 1.3.6) | ||
rack-protection (~> 1.2) | ||
tilt (~> 1.3, >= 1.3.3) | ||
stringex (1.3.0) | ||
tilt (1.3.3) | ||
tins (0.3.7) | ||
uuidtools (2.1.2) | ||
|
||
PLATFORMS | ||
ruby | ||
|
||
DEPENDENCIES | ||
amatch | ||
data_mapper | ||
dm-sqlite-adapter | ||
ken | ||
rack | ||
redis | ||
sinatra |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
Web controller DVD player. | ||
|
||
This was written as a personal project. I have no plans for expanding it to a full-fledged project, I'm just posting it here to have it somewhere safe. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
require File.join(File.dirname(__FILE__), 'sideshow/sideshow') | ||
|
||
Sideshow::Model.init(ENV['DB']) | ||
Sideshow::App.init() | ||
|
||
map "/static" do | ||
run Rack::File.new(File.join(File.dirname(__FILE__), 'static')) | ||
end | ||
|
||
map "/control" do | ||
run Sideshow::Controller | ||
end | ||
|
||
map "/" do | ||
run Sideshow::App | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
module Mplayer | ||
class Control | ||
attr_accessor :command | ||
attr_accessor :env | ||
|
||
def initialize(command, display = ":0") | ||
self.command = command | ||
self.env = { "DISPLAY" => display } | ||
@open = false | ||
end | ||
|
||
def open(file) | ||
self.stop if @open | ||
|
||
@stdout, w = IO.pipe | ||
r, @stdin = IO.pipe | ||
@process = Process.spawn(self.env, self.command.sub("%DVD_IMAGE%", file), | ||
:out => w, | ||
:in => r, | ||
:err => "/dev/null") | ||
nil | ||
@open = true | ||
end | ||
|
||
def send_command(cmd) | ||
if @open | ||
begin | ||
while true | ||
@stdout.read_nonblock(1000) | ||
end | ||
rescue Errno::EAGAIN | ||
# Do nothing | ||
end | ||
@stdin.puts(cmd) | ||
sleep(0.25) | ||
|
||
result = '' | ||
begin | ||
while true | ||
result += @stdout.read_nonblock(1000) | ||
end | ||
rescue | ||
# Do nothing | ||
end | ||
|
||
result.sub(/\n$/, "") | ||
end | ||
end | ||
|
||
def get_property(name) | ||
result = self.send_command("pausing_keep_force get_property #{name}") | ||
|
||
if result.match("ANS_#{name}=") | ||
property = Property.new(name) | ||
property.mplayer_value = result.sub("ANS_#{name}=", "") | ||
return property.to_object | ||
else | ||
return result # TODO: Throw an exception | ||
end | ||
end | ||
|
||
def set_property(name, value) | ||
property = Property.new(name) | ||
property.value = value; | ||
|
||
if property.set? | ||
self.send_command("pausing_keep_force set_property #{name} #{property.mplayer_value}") | ||
end | ||
end | ||
|
||
def step_property(name, value = 0, direction = 1) | ||
property = Property.new(name) | ||
|
||
if property.step? | ||
self.send_command("pausing_keep_force step_property #{name} #{value} #{direction}") | ||
end | ||
end | ||
|
||
def nav(button) | ||
self.send_command("dvdnav #{button.to_s}") | ||
|
||
case button | ||
when :select | ||
self.set_property(:sub_forced_only, true) | ||
when :menu | ||
self.set_property(:sub_forced_only, false) | ||
end | ||
end | ||
|
||
def pause | ||
self.send_command("pause") | ||
end | ||
|
||
def paused? | ||
self.get_property(:pause) | ||
end | ||
|
||
def stop | ||
self.send_command("stop") | ||
@open = false | ||
end | ||
|
||
def chapter | ||
self.get_property(:chapter) | ||
end | ||
|
||
def chapter=(chapter) | ||
self.set_property(:chapter, chapter) | ||
end | ||
|
||
def chapters | ||
self.get_property(:chapters) | ||
end | ||
|
||
def pos | ||
self.get_property(:time_pos) | ||
end | ||
|
||
def pos=(pos) | ||
self.set_property(:stream_time_pos, pos) # Returns a more accurate value, but can't be set | ||
end | ||
|
||
def length | ||
self.get_property(:length) | ||
end | ||
|
||
def seek(value, method = :relative) | ||
case method | ||
when :relative | ||
type = 0 | ||
when :percent | ||
type = 1 | ||
when :absolute | ||
type = 2 | ||
end | ||
self.send_command("seek #{value} #{type}") | ||
end | ||
|
||
def seek_chapter(direction) | ||
self.step_property(:chapter, 1, direction) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
require_relative 'property' | ||
require_relative 'control' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
module Mplayer | ||
class Property | ||
def self.properties | ||
{ | ||
:pause => { :type => :flag, :set => false, :step => false }, | ||
:chapter => { :type => :int, :set => true, :step => true }, | ||
:chapters => { :type => :int, :set => false, :step => false }, | ||
:length => { :type => :time, :set => false, :step => false }, | ||
:percent_pos => { :type => :int, :set => true, :step => true }, | ||
:time_pos => { :type => :time, :set => true, :step => true }, | ||
:stream_time_pos => { :type => :time, :set => false, :step => false }, | ||
:sub_forced_only => { :type => :flag, :set => true, :step => true } | ||
} | ||
end | ||
|
||
attr_accessor :name | ||
attr_accessor :value | ||
attr_accessor :mplayer_value | ||
|
||
def initialize(name) | ||
self.name = name | ||
self.value = value | ||
end | ||
|
||
def name=(name) | ||
@name = name.to_sym | ||
end | ||
|
||
def value | ||
case Property.properties[self.name][:type] | ||
when :int | ||
return @value.to_i | ||
when :float | ||
return @value.to_f | ||
when :flag | ||
return (@value == "1") | ||
when :time | ||
return @value.to_i | ||
else | ||
return @value | ||
end | ||
end | ||
|
||
def value=(value) | ||
case Property.properties[self.name][:type] | ||
when :flag | ||
@value = (value ? "1" : "0"); | ||
else | ||
@value = value.to_s | ||
end | ||
end | ||
|
||
def mplayer_value | ||
@value | ||
end | ||
|
||
def mplayer_value=(value) | ||
case Property.properties[self.name][:type] | ||
when :flag | ||
@value = (value == "yes" ? "1" : "0") | ||
else | ||
@value = value | ||
end | ||
end | ||
|
||
def set? | ||
Property.properties[self.name][:set] | ||
end | ||
|
||
def step? | ||
Property.properties[self.name][:step] | ||
end | ||
|
||
def to_object | ||
self.value | ||
end | ||
|
||
def to_mplayer | ||
self.mplayer_value | ||
end | ||
end | ||
end |
Oops, something went wrong.