Class: SimplePvr::Scheduler

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_pvr/scheduler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeScheduler

Returns a new instance of Scheduler.



5
6
7
8
9
10
11
# File 'lib/simple_pvr/scheduler.rb', line 5

def initialize
  @number_of_tuners = 2
  @current_recordings = [nil] * @number_of_tuners
  @recorders = {}
  @upcoming_recordings = []
  @mutex = Mutex.new
end

Instance Attribute Details

#upcoming_recordingsObject (readonly)

Returns the value of attribute upcoming_recordings.



3
4
5
# File 'lib/simple_pvr/scheduler.rb', line 3

def upcoming_recordings
  @upcoming_recordings
end

Instance Method Details

#conflicting?(programme) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/simple_pvr/scheduler.rb', line 38

def conflicting?(programme)
  @conflicting_programmes[programme.id] != nil
end

#processObject



51
52
53
54
# File 'lib/simple_pvr/scheduler.rb', line 51

def process
  check_expiration_of_current_recordings
  check_start_of_coming_recordings
end

#recordings=(recordings) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/simple_pvr/scheduler.rb', line 22

def recordings=(recordings)
  @mutex.synchronize do
    @upcoming_recordings = recordings.sort_by {|r| r.start_time }.find_all {|r| !r.expired? }

    @scheduled_programmes = programme_ids_from(@upcoming_recordings)
    stop_current_recordings_not_relevant_anymore
    @upcoming_recordings = remove_current_recordings(@upcoming_recordings)
    mark_conflicting_recordings(@upcoming_recordings)
    @conflicting_programmes = programme_ids_from(@upcoming_recordings.find_all {|r| r.conflicting? })
  end
end

#scheduled?(programme) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/simple_pvr/scheduler.rb', line 34

def scheduled?(programme)
  @scheduled_programmes[programme.id] != nil
end

#startObject



13
14
15
16
17
18
19
20
# File 'lib/simple_pvr/scheduler.rb', line 13

def start
  @thread = Thread.new do
    while true
      @mutex.synchronize { process }
      sleep 1
    end
  end
end

#status_textObject



42
43
44
45
46
47
48
49
# File 'lib/simple_pvr/scheduler.rb', line 42

def status_text
  @mutex.synchronize do
    return 'Idle' unless is_recording?

    status_texts = active_recordings.map {|recording| "'#{recording.show_name}' on channel '#{recording.channel.name}'"}
    'Recording ' + status_texts.join(', ')
  end
end