Class: Epodder::Clean

Inherits:
Verb show all
Defined in:
lib/verb/clean.rb

Instance Method Summary collapse

Methods inherited from Verb

#add_command, #each_argument, #lookup_args, #verb_struct

Constructor Details

#initializeClean

Returns a new instance of Clean.



3
4
# File 'lib/verb/clean.rb', line 3

def initialize
end

Instance Method Details

#clean(args) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/verb/clean.rb', line 6

def clean(args)
    if args.empty?
        podcasts = Podcast.all
    else
        podcasts = args.map { |podcast| Podcast.get(podcast.to_i) }
    end
    podcasts.each do |podcast|
        known_episodes = Episode.all(downloaded: true, podcast: podcast)
        feed_episodes = open_podcast podcast, DateTime.now
        known_episodes = known_episodes.map { |episode| episode.url.to_s }
        feed_episodes = feed_episodes.map {|episode| @episode = episode; episode.enclosure_url }
        episodes = (known_episodes - feed_episodes)
        episodes_length = episodes.length
        episodes.map { |episode| Episode.all(url: episode) }.each do |episode|
            if !episode.destroy
                episode.errors.each { |error| puts error }
            end
        end
        puts "#{podcast.title} -- cleaned #{episodes_length} episodes"
    end
end

#open_podcast(podcast, max_pub) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/verb/clean.rb', line 28

def open_podcast(podcast, max_pub)
    begin
        feed = Feedzirra::Feed.fetch_and_parse(podcast.uri.to_s)
        unless feed.is_a? Fixnum
            return parse_feed feed, max_pub
        else
            raise "Error #{podcast.title} returned #{feed}"
        end
    rescue StandardError => e
        puts e
        []
    end
end

#parse_feed(feed, max_pub) ⇒ Object



42
43
44
# File 'lib/verb/clean.rb', line 42

def parse_feed(feed, max_pub)
    feed.entries.select { |item| item.respond_to? :enclosure_url}
end