hpodder 1.1.5 → 1.1.6
raw patch · 9 files changed
+30/−38 lines, 9 filesdep −haskell98dep ~HaXmldep ~base
Dependencies removed: haskell98
Dependency ranges changed: HaXml, base
Files
- Commands/Download.hs +6/−1
- Commands/SetStatus.hs +1/−1
- Commands/Setup.hs +2/−2
- Config.hs +1/−1
- Download.hs +1/−0
- FeedParser.hs +11/−9
- INSTALL +1/−17
- doc/hpodder-manpage.sgml +3/−3
- hpodder.cabal +4/−4
Commands/Download.hs view
@@ -42,6 +42,7 @@ import Data.String.Utils import Data.Either.Utils import Data.List+import Data.Char import System.Exit import Control.Exception import Data.Progress.Tracker@@ -259,10 +260,13 @@ d $ " gettypecommand sent to stdout: " ++ show c d $ " original type was: " ++ show (eptype ep) case ec of- ExitSuccess -> case (strip c) of+ ExitSuccess -> case (stripToken c) of "" -> return (eptype ep) x -> return x _ -> return (eptype ep)+ + stripToken = takeWhile intoken+ where intoken c = not $ isSpace c || c == ';' getRenameTypes = case getList (gcp gi) idstr "renametypes" of@@ -284,6 +288,7 @@ ("FEEDURL", feedurl . podcast $ ep), ("SAFECASTTITLE", sanitize_fn . castname . podcast $ ep), ("SAFEEPTITLE", sanitize_fn . eptitle $ ep),+ ("EPID", show . epid $ ep), ("EPTITLE", eptitle ep)] -- | Runs a hook script.
Commands/SetStatus.hs view
@@ -57,7 +57,7 @@ Nothing -> fail "setstatus: --castid required; see hpodder setstatus --help" newstatus <- case lookup "status" args of Just x -> E.catch (E.evaluate (read x))- (\_ -> fail $ "Invalid status supplied; use one of: " ++ possibleStatuses)+ ((\_ -> fail $ "Invalid status supplied; use one of: " ++ possibleStatuses) :: E.SomeException -> IO a) Nothing -> fail "setstatus: --status required; see hpodder setstatus --help" podcastlist <- getPodcast (gdbh gi) podcastid pc <- case podcastlist of
Commands/Setup.hs view
@@ -101,10 +101,10 @@ sampleurls = ["http://soundofhistory.complete.org/files_soh/podcast.xml", "http://www.thelinuxlink.net/tllts/tllts.rss",- "http://www.itconversations.com/rss/recentWithEnclosures.php",+ "http://feeds.conversationsnetwork.org/channel/itc", "http://www.sciam.com/podcast/sciam_podcast_r.xml", "http://www.npr.org/rss/podcast.php?id=510019",- "http://amateurtraveler.com/podcast/rss.xml",+ "http://feeds.feedburner.com/AmateurTravelerPodcast", "http://broadband.wgbh.org/amex/rss/podcast_np.xml", "http://www.npr.org/rss/podcast.php?id=700000"]
Config.hs view
@@ -74,7 +74,7 @@ cp <- set cp "DEFAULT" "renametypes" "audio/mpeg:.mp3,audio/mp3:.mp3,x-audio/mp3:.mp3" cp <- set cp "DEFAULT" "postproctypes" "audio/mpeg,audio/mp3,x-audio/mp3" cp <- set cp "DEFAULT" "gettypecommand" "file -b -i \"${EPFILENAME}\""- cp <- set cp "DEFAULT" "postproccommand" "id3v2 -A \"${CASTTITLE}\" -t \"${EPTITLE}\" --WOAF \"${EPURL}\" --WOAS \"${FEDDURL}\" \"${EPFILENAME}\""+ cp <- set cp "DEFAULT" "postproccommand" "mid3v2 -T \"${EPID}\" -A \"${CASTTITLE}\" -t \"${EPTITLE}\" --WOAF \"${EPURL}\" --WOAS \"${FEEDURL}\" \"${EPFILENAME}\"" return cp startingcp = emptyCP {accessfunc = interpolatingAccess 10}
Download.hs view
@@ -65,6 +65,7 @@ "-L", -- Follow redirects "-y", "60", "-Y", "1", -- Timeouts "--retry", "2", -- Retry twice+ "--globoff", -- Disable globbing on URLs (#79) "-f" -- Fail on server errors ]
FeedParser.hs view
@@ -33,6 +33,7 @@ import Types import Text.XML.HaXml import Text.XML.HaXml.Parse+import Text.XML.HaXml.Posn import Utils import Data.Maybe.Utils import Data.Char@@ -76,9 +77,9 @@ let feeditems = getEnclosures doc return $ Right $ (Feed {channeltitle = title, items = feeditems})- where getContent (Document _ _ e _) = CElem e+ where getContent (Document _ _ e _) = CElem e noPos -unifrob ('\xef':'\xbb':'\xbf':x) = x -- Strip off unicode BOM+unifrob ('\xfeff':x) = x -- Strip off unicode BOM unifrob x = x unesc = xmlUnEscape stdXmlEscaper@@ -121,13 +122,13 @@ -- Utilities -------------------------------------------------- -attrofelem :: String -> Content -> Maybe AttValue-attrofelem attrname (CElem inelem) =+attrofelem :: String -> Content Posn -> Maybe AttValue+attrofelem attrname (CElem inelem _) = case unesc inelem of Elem name al _ -> lookup attrname al attrofelem _ _ = error "attrofelem: called on something other than a CElem"-stratt :: String -> Content -> Maybe [String]+stratt :: String -> Content Posn -> Maybe [String] stratt attrname content = case attrofelem attrname content of Just (AttValue x) -> Just (concat . map mapfunc $ x)@@ -136,17 +137,18 @@ mapfunc (Right _) = [] -- Finds the literal children of the named tag, and returns it/them-tagof :: String -> CFilter+tagof :: String -> CFilter Posn tagof x = keep /> tag x -- /> txt -- Retruns the literal string that tagof would find-strof :: String -> Content -> String+strof :: String -> Content Posn -> String strof x y = forceEither $ strof_either x y -strof_either :: String -> Content -> Either String String+strof_either :: String -> Content Posn -> Either String String strof_either x y = case tagof x $ y of- [CElem elem] -> Right $ verbatim $ tag x /> txt $ CElem (unesc elem)+ [CElem elem pos] -> Right $ verbatim $ tag x /> txt+ $ CElem (unesc elem) pos z -> Left $ "strof: expecting CElem in " ++ x ++ ", got " ++ verbatim z ++ " at " ++ verbatim y
INSTALL view
@@ -1,18 +1,2 @@ -Sorry, I need to work on this some more...--PREREQUISITES:-- * GHC 6.6 http://www.haskell.org/ghc- * Curl http://curl.haxx.se- * id3v2 http://download.sourceforge.net/id3v2/id3v2-0.1.11.tar.gz- * hslogger http://software.complete.org/hslogger- * MissingH 0.18.0 http://software.complete.org/missingh- hpodder also uses these libraries that MissingH also depends upon:- FilePath, mtl- * ConfigFile http://software.complete.org/configfile- * Sqlite3 http://www.sqlite.org/- * HDBC-sqlite3 http://quux.org/devel/hdbc- * HaXml>=1.13.2 http://www.cs.york.ac.uk/fp/HaXml/- * HDBC http://quux.org/devel/hdbc-+Run "cabal install" to fetch all dependencies and build.
doc/hpodder-manpage.sgml view
@@ -1025,7 +1025,7 @@ </para> <para> The default value adds ID3 tags to MP3 files. It is:- <literal>id3v2 -A "${CASTTITLE}" -t "${EPTITLE}" --WOAF+ <literal>mid3v2 -T "${EPID}" -A "${CASTTITLE}" -t "${EPTITLE}" --WOAF "${EPURL}" --WOAS "${FEEDURL}" "${EPFILENAME}"</literal> </para> </listitem>@@ -1225,11 +1225,11 @@ <title>See Also</title> <para> <application>curl</application>(1),- <application>id3v2</application>(1)+ <application>mid3v2</application>(1) </para> <para> The &hpodder; homepage at <ulink- url="http://quux.org/devel/hpodder"></>,+ url="http://software.complete.org/hpodder"></>, a general description of podcasting at <ulink url="http://en.wikipedia.org/wiki/Podcast"></> </para>
hpodder.cabal view
@@ -1,10 +1,10 @@ Name: hpodder-Version: 1.1.5+Version: 1.1.6 License: GPL Maintainer: John Goerzen <jgoerzen@complete.org> Author: John Goerzen Stability: Stable-Copyright: Copyright (c) 2006-2008 John Goerzen+Copyright: Copyright (c) 2006-2011 John Goerzen license-file: COPYRIGHT extra-source-files: COPYING, INSTALL, doc/SConstruct, doc/hpodder-manpage.sgml, doc/hpodder.sgml, doc/local.dsl,@@ -68,8 +68,8 @@ hpodder is SAFE and is designed with data integrity in mind from the beginning. It should be exceedingly difficult to lose a podcast episode, even in the event of a power failure.-Build-Depends: haskell98, network, unix, parsec, MissingH>=1.0.0,- HDBC>=1.1.0, HDBC-sqlite3>=1.1.0, mtl, base, HaXml>=1.13.2, HaXml<1.19, hslogger,+Build-Depends: network, unix, parsec, MissingH>=1.0.0,+ HDBC>=1.1.0, HDBC-sqlite3>=1.1.0, mtl, base>=3 && < 5, HaXml >= 1.20 && < 1.21, hslogger, ConfigFile, filepath, old-time, directory, process Executable: hpodder