3 from __future__
import with_statement
7 from subprocess
import Popen
13 os
.environ
['DJANGO_SETTINGS_MODULE'] = 'riffle.settings'
14 from riffle
.catcher
import models
as catcher
19 format
='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
20 datefmt
='%m-%d %H:%M',
21 filename
='catcher.log',
23 console
= logging
.StreamHandler()
24 console
.setLevel(logging
.DEBUG
if '-v' in sys
.argv
else logging
.INFO
)
25 formatter
= logging
.Formatter('%(levelname)-8s %(message)s')
26 console
.setFormatter(formatter
)
27 logging
.getLogger('').addHandler(console
)
29 def try_load(fname
, default
):
31 with
open(fname
,"r") as f
:
36 url_files
= try_load("files.db", {})
38 for feed
in catcher
.Feed
.objects
.all():
39 feed
.refresh(url_files
)
43 def make_local_path(url
):
44 if url
in url_files
: return url_files
[url
]
45 desired
= os
.path
.join( conf
.media_dir
, url_basename(url
) )
46 desired_r
,desired_e
= os
.path
.splitext(desired
)
48 while desired
in files
:
50 desired
= desired_r
+ str(attempt
) + desired_e
52 url_files
[url
] = desired
54 save(url_files
, "files.db")
57 def make_tmp_path(path
):
61 dir = os
.path
.dirname(fname
)
62 if not os
.path
.isdir(dir):
64 cmd
= "wget -c '%s' -O %s" % (url
, fname
)
65 logging
.info("Exec: %s", cmd
)
69 return Popen(cmd
, shell
=True).wait() == 0
71 def download_episode(url
):
72 local_path
= make_local_path(url
)
73 tmp_file
= make_tmp_path(local_path
)
74 if wget(url
, tmp_file
):
75 logging
.info("Renaming %s to %s", tmp_file
, local_path
)
76 os
.rename(tmp_file
, local_path
)
80 dl_queue
= try_load("dl-queue.db", [])
82 for feed
in get_updated_feeds():
83 logging
.info("Checking feed: %s", feed
)
84 # FIXME for now limit to 10 but
85 # (a) have to make sure it's sorted by age
86 # (b) should be configurable and overridable
88 for url
in feed
.get_new_episodes():
89 if url
not in url_files
and url
not in dl_queue
:
90 logging
.info("Queueing for download: %s", url
)
93 logging
.debug("Ignoring familiar url: %s (%s)", url
, feed
)
97 feed
.update_timestamp()
99 save(feeds
, "feeds.db")
100 save(dl_queue
, "dl-queue.db")
102 # traverse a copy, we seem to miss episodes otherwise
103 for url
in [x
for x
in dl_queue
]:
104 if download_episode(url
):
106 save(dl_queue
, "dl-queue.db")