Author: jstowers Date: Thu Feb 14 20:48:34 2008 New Revision: 1317 URL: http://svn.gnome.org/viewvc/conduit?rev=1317&view=rev
Log: 2008-02-15 John Stowers <[EMAIL PROTECTED]> * conduit/datatypes/Audio.py: * conduit/datatypes/Photo.py: * conduit/datatypes/Video.py: * conduit/modules/AudioVideoConverterModule.py: * conduit/modules/FeedModule/FeedModule.py: Put the common mimetype testing logic into the appropriate datatype. Fixes bug #516523 * test/python-tests/TestDataProviderFeed.py: Add an mp3 podcast feed test Modified: trunk/ChangeLog trunk/conduit/datatypes/Audio.py trunk/conduit/datatypes/Photo.py trunk/conduit/datatypes/Video.py trunk/conduit/modules/AudioVideoConverterModule.py trunk/conduit/modules/FeedModule/FeedModule.py trunk/test/python-tests/TestDataProviderFeed.py Modified: trunk/conduit/datatypes/Audio.py ============================================================================== --- trunk/conduit/datatypes/Audio.py (original) +++ trunk/conduit/datatypes/Audio.py Thu Feb 14 20:48:34 2008 @@ -5,6 +5,17 @@ "ogg":{"acodec":"vorbis","format":"ogg","file_extension":"ogg"}, "wav":{"acodec":"pcm_mulaw","format":"wav","file_extension":"wav"} } + +def mimetype_is_audio(mimetype): + """ + @returns: True if the given mimetype string represents an audio file + """ + if mimetype.startswith("audio/"): + return True + elif mimetype == "application/ogg": + return True + else: + return False class Audio(File.File): Modified: trunk/conduit/datatypes/Photo.py ============================================================================== --- trunk/conduit/datatypes/Photo.py (original) +++ trunk/conduit/datatypes/Photo.py Thu Feb 14 20:48:34 2008 @@ -7,6 +7,15 @@ "jpeg":{'formats':'image/jpeg','default-format':'image/jpeg'}, "png":{'formats':'image/png','default-format':'image/png'} } + +def mimetype_is_photo(mimetype): + """ + @returns: True if the given mimetype string represents an image file + """ + if mimetype.startswith("image/"): + return True + else: + return False class Photo(File.File): """ Modified: trunk/conduit/datatypes/Video.py ============================================================================== --- trunk/conduit/datatypes/Video.py (original) +++ trunk/conduit/datatypes/Video.py Thu Feb 14 20:48:34 2008 @@ -12,6 +12,17 @@ "flv":{"arate":22050,"abitrate":32,"format":"flv","acodec":"mp3","mencoder":True,"file_extension":"flv"} } +def mimetype_is_video(mimetype): + """ + @returns: True if the given mimetype string represents a video file + """ + if mimetype.startswith("video/"): + return True + elif mimetype == "application/ogg": + return True + else: + return False + class Video(File.File): _name_ = "file/video" Modified: trunk/conduit/modules/AudioVideoConverterModule.py ============================================================================== --- trunk/conduit/modules/AudioVideoConverterModule.py (original) +++ trunk/conduit/modules/AudioVideoConverterModule.py Thu Feb 14 20:48:34 2008 @@ -106,24 +106,10 @@ "file,file/audio" : self.file_to_audio } - def _is_video(self, f): - mimetype = f.get_mimetype() - if mimetype.startswith("video/"): - return True - elif mimetype == "application/ogg": - return True - else: - log.debug("File is not video type: %s" % mimetype) - - def _is_audio(self, f): - mimetype = f.get_mimetype() - if mimetype.startswith("audio/"): - return True - else: - log.debug("File is not audio type: %s" % mimetype) - def transcode_video(self, video, **kwargs): - if not self._is_video(video): + mimetype = video.get_mimetype() + if not Video.mimetype_is_video(mimetype): + log.debug("File %s is not video type: %s" % (video,mimetype)) return None input_file = video.get_local_uri() @@ -181,7 +167,9 @@ return video def transcode_audio(self, audio, **kwargs): - if not self._is_audio(audio): + mimetype = audio.get_mimetype() + if not Audio.mimetype_is_audio(mimetype): + log.debug("File %s is not audio type: %s" % (audio,mimetype)) return None input_file = audio.get_local_uri() @@ -228,7 +216,8 @@ return audio def file_to_audio(self, f, **kwargs): - if self._is_audio(f): + mimetype = f.get_mimetype() + if Audio.mimetype_is_audio(mimetype): a = Audio.Audio( URI=f._get_text_uri() ) @@ -241,7 +230,8 @@ return None def file_to_video(self, f, **kwargs): - if self._is_video(f): + mimetype = f.get_mimetype() + if Video.mimetype_is_video(mimetype): v = Video.Video( URI=f._get_text_uri() ) Modified: trunk/conduit/modules/FeedModule/FeedModule.py ============================================================================== --- trunk/conduit/modules/FeedModule/FeedModule.py (original) +++ trunk/conduit/modules/FeedModule/FeedModule.py Thu Feb 14 20:48:34 2008 @@ -3,9 +3,7 @@ except: from xml.etree import ElementTree -import mimetypes import traceback - import urllib2 import os from os.path import abspath, expanduser @@ -19,6 +17,9 @@ import conduit.dataproviders.DataProvider as DataProvider import conduit.Exceptions as Exceptions import conduit.datatypes.File as File +import conduit.datatypes.Audio as Audio +import conduit.datatypes.Video as Video +import conduit.datatypes.Photo as Photo MODULES = { "RSSSource" : { "type": "dataprovider" } @@ -34,34 +35,24 @@ _out_type_ = "file" _icon_ = "feed" - PHOTO_TYPES = [] - AUDIO_TYPES = [] - VIDEO_TYPES = [] - def __init__(self, *args): DataProvider.DataSource.__init__(self) - self.feedUrl = "" self.files = {} - self.limit = 0 self.downloadPhotos = True self.downloadAudio = True self.downloadVideo = True - - mimetypes.init() - - # loop through all mime types and detect common mime types - for m in mimetypes.types_map.values(): - if m[:6] == "image/": - RSSSource.PHOTO_TYPES.append(m) - elif m[:6] == "audio/": - RSSSource.AUDIO_TYPES.append(m) - elif m[:6] == "video/": - RSSSource.VIDEO_TYPES.append(m) - - # why on gods green earth is there an application/ogg :( - self.AUDIO_TYPES.append("application/ogg") + + def _is_allowed_type(self, mimetype): + ok = False + if not ok and self.downloadPhotos: + ok = Photo.mimetype_is_photo(mimetype) + if not ok and self.downloadAudio: + ok = Audio.mimetype_is_audio(mimetype) + if not ok and self.downloadVideo: + ok = Video.mimetype_is_video(mimetype) + return ok def initialize(self): return True @@ -70,8 +61,8 @@ tree = Utils.dataprovider_glade_get_widget( __file__, "config.glade", - "RSSSourceConfigDialog" - ) + "RSSSourceConfigDialog" + ) #get a whole bunch of widgets url = tree.get_widget("url") @@ -108,16 +99,6 @@ def refresh(self): DataProvider.DataSource.refresh(self) - - #Add allowed mimetypes to filter - allowedTypes = [] - if self.downloadPhotos: - allowedTypes += RSSSource.PHOTO_TYPES - if self.downloadAudio: - allowedTypes += RSSSource.AUDIO_TYPES - if self.downloadVideo: - allowedTypes += RSSSource.VIDEO_TYPES - self.files = {} try: url_info = urllib2.urlopen(self.feedUrl) @@ -141,12 +122,12 @@ #Check if we have all the info if url and t and title: log.debug("Got enclosure %s %s (%s)" % (title,url,t)) - if t in allowedTypes: + if self._is_allowed_type(t): if ((url not in allreadyInserted) and ((len(allreadyInserted) < self.limit) or (self.limit == 0))): allreadyInserted.append(url) self.files[url] = (title,t) else: - log.debug("Enclosure %s is on non-allowed type (%s)" % (title,t)) + log.debug("Enclosure %s is an illegal type (%s)" % (title,t)) except: log.info("Error getting/parsing feed \n%s" % traceback.format_exc()) raise Exceptions.RefreshError @@ -161,11 +142,11 @@ f = File.File(URI=url) f.set_UID(url) f.set_open_URI(url) + name, ext = f.get_filename_and_extension() - #create the correct extension and filename + #create the correct filename and retain the original extension try: title,t = self.files[url] - ext = mimetypes.guess_extension(t) f.force_new_filename(title) f.force_new_file_extension(ext) except: Modified: trunk/test/python-tests/TestDataProviderFeed.py ============================================================================== --- trunk/test/python-tests/TestDataProviderFeed.py (original) +++ trunk/test/python-tests/TestDataProviderFeed.py Thu Feb 14 20:48:34 2008 @@ -9,16 +9,18 @@ TESTS = ( ("Photos", "http://www.flickr.com/services/feeds/[EMAIL PROTECTED]&format=rss_200_enc"), - ("Audio", "http://www.lugradio.org/episodes.ogg.rss"), + ("Audio (ogg)", "http://www.lugradio.org/episodes.ogg.rss"), + ("Audio (mp3)", "http://feeds.feedburner.com/TheLinuxLinkTechShowMp3Feed"), ("Video", "http://telemusicvision.com/videos/tmv.rss") ) +NUM_ENCLOSURES = 5 for name,url in TESTS: ok("%s: Url %s" % (name,url), True) config = { "feedUrl": url, - "limit": 1, + "limit": NUM_ENCLOSURES, "downloadPhotos": True, "downloadAudio": True, "downloadVideo": True @@ -34,9 +36,9 @@ try: enclosures = dp.get_all() - ok("%s: Got enclosures" % name, len(enclosures) > 0) + ok("%s: Got %s enclosures" % (name,NUM_ENCLOSURES), len(enclosures) == NUM_ENCLOSURES) except Exception, err: - ok("%s: Got enclosures (%s)" % (name,err), False) + ok("%s: Got %s enclosures (%s)" % (name,NUM_ENCLOSURES,err), False) try: f = dp.get(enclosures[0]) _______________________________________________ SVN-commits-list mailing list (read only) http://mail.gnome.org/mailman/listinfo/svn-commits-list Want to limit the commits to a few modules? Go to above URL, log in to edit your options and select the modules ('topics') you want. Module maintainer? It is possible to set the reply-to to your development mailing list. Email [EMAIL PROTECTED] if interested.