Time compression

openid
Marcin Kulik 12 years ago
parent 5afa98bb11
commit ba97246db8

@ -5,11 +5,13 @@ class AsciicastDecorator < ApplicationDecorator
THUMBNAIL_WIDTH = 20
THUMBNAIL_HEIGHT = 10
MAX_DELAY = 5.0
def as_json(*args)
data = model.as_json(*args)
data['escaped_stdout_data'] = escaped_stdout_data
data['stdout_timing_data'] = stdout_timing_data
data['stdout_timing_data'], saved_time = stdout_timing_data
data['duration'] = data['duration'] - saved_time
data
end
@ -23,14 +25,25 @@ class AsciicastDecorator < ApplicationDecorator
end
def stdout_timing_data
saved_time = 0
if data = stdout_timing.read
Bzip2.uncompress(data).lines.map do |line|
data = Bzip2.uncompress(data).lines.map do |line|
delay, n = line.split
[delay.to_f, n.to_i]
delay = delay.to_f
if time_compression && delay > MAX_DELAY
saved_time += (delay - MAX_DELAY)
delay = MAX_DELAY
end
[delay, n.to_i]
end
else
nil
data = nil
end
[data, saved_time]
end
def os

@ -16,7 +16,7 @@ class Asciicast < ActiveRecord::Base
before_create :assign_user, :unless => :user
attr_accessible :meta, :stdout, :stdout_timing, :stdin, :stdin_timing,
:title, :description
:title, :description, :time_compression
def self.assign_user(user_token, user)
where(:user_id => nil, :user_token => user_token).

@ -20,6 +20,22 @@
</div>
</div>
<div class="control-group">
<%= f.label :time_compression, :class => 'control-label' %>
<div class="controls">
<label class="radio" for="asciicast_time_compression_true">
<%= f.radio_button :time_compression, true %>
Enabled - terminal inactivity won't last longer
than <%= AsciicastDecorator::MAX_DELAY.to_i %> sec (recommended)
</label>
<label class="radio" for="asciicast_time_compression_false">
<%= f.radio_button :time_compression, false %>
Disabled - no change to timeline
</label>
</div>
</div>
<div class="form-actions">
<%= f.submit 'Update asciicast', :class => 'btn btn-primary' %>
<%= link_to 'Cancel', asciicast_path, :class => 'btn' %>

@ -0,0 +1,5 @@
class AddTimeCompressionToAsciicast < ActiveRecord::Migration
def change
add_column :asciicasts, :time_compression, :boolean, :null => false, :default => true
end
end

@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20120409142151) do
ActiveRecord::Schema.define(:version => 20120504191706) do
create_table "asciicasts", :force => true do |t|
t.integer "user_id"
@ -36,7 +36,8 @@ ActiveRecord::Schema.define(:version => 20120409142151) do
t.string "username"
t.text "snapshot"
t.integer "comments_count", :default => 0, :null => false
t.integer "likes_count", :default => 0, :null => false
t.integer "likes_count", :default => 0, :null => false
t.boolean "time_compression", :default => true, :null => false
end
add_index "asciicasts", ["created_at"], :name => "index_asciicasts_on_created_at"

Loading…
Cancel
Save