class P3::TV::Downloads

Constants

REGEX

Public Class Methods

new( settings = Settings.new ) click to toggle source
# File lib/p3-tv.rb, line 352
def initialize( settings = Settings.new )
    @settings = settings
    @transmission = nil
    @paths = nil
    @torrents = nil
end

Public Instance Methods

create_episode_from_filename( path ) click to toggle source
# File lib/p3-tv.rb, line 392
def create_episode_from_filename( path )
    e = nil
    path_match( path ) do | series, match_data |
        e = EpisodeFile.new
        e.series_id = series[:id]
        e.series = series[:name]
        e.season = match_data[1].to_i
        e.episode = match_data[ 2 ].to_i
        e.path = path
    end
    return e
end
create_episode_from_filename_series( path, seriesid, series_name ) click to toggle source
# File lib/p3-tv.rb, line 379
def create_episode_from_filename_series( path, seriesid, series_name )
    e = nil
    path_match_series( path, series_name ) do | match_data |
        e = EpisodeFile.new
        e.series_id = seriesid
        e.series = series_name
        e.season = match_data[1].to_i
        e.episode = match_data[ 2 ].to_i
        e.path = path
    end
    return e
end
download!( path ) click to toggle source
# File lib/p3-tv.rb, line 438
def download!( path )
    if transmission()
        transmission().create( path )
    else
        cmd = "open #{path}"
        cmd = "xdg-#{cmd} 2>/dev/null" if Gem::Platform::local::os == "linux"
        system( cmd )
    end
end
download_episode_file!( episode_file ) click to toggle source
# File lib/p3-tv.rb, line 448
def download_episode_file!( episode_file )
    if( episode_file.status == :available )
        magnet_link = episode_file.path
        puts magnet_link if @settings[:verbose]
        unless @settings[:dry_run]
            download!( magnet_link )
        end
    end
end
each_downloading_file() { |episode_file| ... } click to toggle source
# File lib/p3-tv.rb, line 427
def each_downloading_file
    torrents().each do |torrent|
        episode_file = create_episode_from_filename( torrent['name'] )
        if( episode_file )
            episode_file.status = :downloading
            episode_file.percent_done = torrent['percentDone']
            yield( episode_file )
        end
    end
end
each_episode_file() { |episode_file| ... } click to toggle source
# File lib/p3-tv.rb, line 415
def each_episode_file
    episode_files = paths().collect{|path| create_episode_from_filename( path ) }
    episode_files.each do | episode_file |
        if episode_file
            episode_file.status = :downloaded
            episode_file.percent_done = 1
            yield( episode_file )
        end
    end

end
each_episode_file_in_series( seriesid ) { |episode_file| ... } click to toggle source
# File lib/p3-tv.rb, line 405
def each_episode_file_in_series( seriesid )
    series = @settings.get_series( seriesid )
    if( series )
        episode_files = paths().collect{|path| create_episode_from_filename_series( path, series[:id], series[:name] ) }
        episode_files.each do | episode_file |
            yield( episode_file ) if episode_file
        end
    end
end
get_path_if_exists( episode_file ) click to toggle source
# File lib/p3-tv.rb, line 502
def get_path_if_exists( episode_file )
    episode_files = paths().collect{|p| create_episode_from_filename_series( p, episode_file.series_id, episode_file.series ) }
    episode_files.select!{|ef| ef }
    episode_files.each do | dn_ep | #download_episode_file
        if( 0 == ( episode_file <=> dn_ep ) )
            return dn_ep.path
        end
    end
    return nil
end
get_torrent_if_exists( episode_file ) click to toggle source
# File lib/p3-tv.rb, line 513
def get_torrent_if_exists( episode_file )
    torrents().each do | torrent |
        name = torrent['name']
        torrent_episode = create_episode_from_filename_series( name, episode_file.series_id, episode_file.series )
        if( torrent_episode )
            if( 0 == ( episode_file <=> torrent_episode ) )
                return torrent
            end
        end
    end
    return nil
end
path_match( path ) { |series, match_data| ... } click to toggle source
# File lib/p3-tv.rb, line 370
def path_match( path )
    @settings[:series].each do | series |
        path_match_series( path, series[:name] ) do | match_data |
            yield( series, match_data )
            return
        end
    end
end
path_match_series( path, series_name ) { |match_data| ... } click to toggle source
# File lib/p3-tv.rb, line 359
def path_match_series( path, series_name )
    return unless( P3::TV::path_contains_series?( path, series_name ) )
    REGEX.each do | regex |
        match_data = path.match( regex )
        if( match_data )
            yield( match_data )
            return
        end
    end
end
paths() click to toggle source
# File lib/p3-tv.rb, line 458
def paths
    return @paths if @paths
    glob = File::join( @settings[:download_path], '**/*' )
    @paths = Dir::glob( glob )
    @paths = @paths.select{|p| @settings.allowed_type?( p ) }
    return @paths
end
remove_completed_torrents!() click to toggle source
# File lib/p3-tv.rb, line 491
def remove_completed_torrents!
    count = 0
    torrents().each do | torrent |
        count += 1
        transmission().remove( torrent['id'] ) if torrent['percentDone'] == 1
    end

    torrents().reject!{ | torrent | torrent['percentDone'] == 1 }
    return count
end
torrents() click to toggle source
# File lib/p3-tv.rb, line 482
def torrents
    @torrents = [] unless transmission()
    unless @torrents
        @torrents = transmission().all
    end

    return @torrents
end
transmission() click to toggle source
# File lib/p3-tv.rb, line 466
def transmission

    unless @transmission
        config = {}
        [:transmission_username, :transmission_password, :transmission_host, :transmission_port ].each do | transmission_key |
            return @transmission unless @settings[ transmission_key ]
            key = transmission_key.to_s.gsub('transmission_','').to_sym
            config[ key ] = @settings[ transmission_key ]
        end

        @transmission = P3::Transmission::Client.new( config )
    end

    return @transmission
end