2005-11-21 19:21:25 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# gPodder
|
|
|
|
# Copyright (c) 2005 Thomas Perl <thp@perli.net>
|
|
|
|
# Released under the GNU General Public License (GPL)
|
|
|
|
#
|
|
|
|
|
|
|
|
#
|
|
|
|
# libpodcasts.py -- data classes for gpodder
|
|
|
|
# thomas perl <thp@perli.net> 20051029
|
|
|
|
#
|
|
|
|
#
|
|
|
|
|
|
|
|
import gtk
|
|
|
|
import gobject
|
|
|
|
|
|
|
|
|
|
|
|
# podcastChannel: holds data for a complete channel
|
|
|
|
class podcastChannel(object):
|
|
|
|
url = ""
|
|
|
|
title = ""
|
|
|
|
link = ""
|
|
|
|
description = ""
|
|
|
|
items = []
|
|
|
|
image = None
|
|
|
|
shortname = None
|
|
|
|
|
|
|
|
def __init__( self, url = "", title = "", link = "", description = ""):
|
|
|
|
self.url = url
|
|
|
|
self.title = title
|
|
|
|
self.link = link
|
|
|
|
self.description = description
|
|
|
|
self.items = []
|
|
|
|
|
|
|
|
def addItem( self, item):
|
|
|
|
self.items.append( item)
|
|
|
|
|
|
|
|
def printChannel( self):
|
|
|
|
print "- Channel: \"" + self.title + "\""
|
|
|
|
for item in self.items:
|
|
|
|
print "-- Item: \"" + item.title + "\""
|
2005-11-22 14:30:28 +01:00
|
|
|
|
|
|
|
def is_downloaded(self, item):
|
|
|
|
#TODO ist this the right place for this function? if yes move imports to head
|
|
|
|
import libgpodder
|
|
|
|
import os
|
|
|
|
filename = libgpodder.gPodderLib().getPodcastFilename(self, item.url)
|
|
|
|
return os.path.exists(filename)
|
|
|
|
|
2005-11-21 19:21:25 +01:00
|
|
|
def getItemsModel( self):
|
2005-11-22 14:30:28 +01:00
|
|
|
new_model = gtk.ListStore( gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_STRING)
|
2005-11-21 19:21:25 +01:00
|
|
|
|
|
|
|
for item in self.items:
|
2005-11-22 14:30:28 +01:00
|
|
|
# Skip items with no download url
|
|
|
|
if item.url != "":
|
2005-11-22 23:04:58 +01:00
|
|
|
if self.is_downloaded(item): background_color = "#eeeeee"
|
2005-11-22 14:30:28 +01:00
|
|
|
else: background_color = "white"
|
|
|
|
new_iter = new_model.append()
|
|
|
|
new_model.set( new_iter, 0, item.url)
|
|
|
|
new_model.set( new_iter, 1, item.title)
|
|
|
|
new_model.set( new_iter, 2, item.getSize())
|
|
|
|
new_model.set( new_iter, 3, True)
|
|
|
|
new_model.set( new_iter, 4, background_color)
|
2005-11-21 19:21:25 +01:00
|
|
|
|
|
|
|
return new_model
|
|
|
|
|
|
|
|
def getActiveByUrl( self, url):
|
|
|
|
i = 0
|
|
|
|
|
|
|
|
for item in self.items:
|
|
|
|
if item.url == url:
|
|
|
|
return i
|
|
|
|
i = i + 1
|
|
|
|
|
|
|
|
return -1
|
|
|
|
|
|
|
|
|
|
|
|
# podcastItem: holds data for one object in a channel
|
|
|
|
class podcastItem(object):
|
|
|
|
url = ""
|
|
|
|
title = ""
|
|
|
|
length = ""
|
|
|
|
mimetype = ""
|
|
|
|
guid = ""
|
|
|
|
description = ""
|
|
|
|
link = ""
|
|
|
|
|
|
|
|
def __init__( self, url = "", title = "", length = "0", mimetype = "", guid = "", description = "", link = ""):
|
|
|
|
self.url = url
|
|
|
|
self.title = title
|
|
|
|
self.length = length
|
|
|
|
self.mimetype = mimetype
|
|
|
|
self.guid = guid
|
|
|
|
self.description = description
|
|
|
|
self.link = ""
|
|
|
|
|
|
|
|
def getSize( self):
|
|
|
|
kilobyte = 1024
|
|
|
|
megabyte = kilobyte * 1024
|
|
|
|
gigabyte = megabyte * 1024
|
|
|
|
|
|
|
|
size = int( self.length)
|
|
|
|
if size > gigabyte:
|
|
|
|
return str( size / gigabyte) + " GB"
|
|
|
|
if size > megabyte:
|
|
|
|
return str( size / megabyte) + " MB"
|
|
|
|
if size > kilobyte:
|
|
|
|
return str( size / kilobyte) + " KB"
|
|
|
|
|
|
|
|
return str( size) + " Bytes"
|
|
|
|
|
|
|
|
|
|
|
|
class configChannel( object):
|
|
|
|
title =""
|
|
|
|
url =""
|
|
|
|
filename = None
|
|
|
|
|
|
|
|
def __init__( self, title = "", url = "", filename = None):
|
|
|
|
self.title = title
|
|
|
|
self.url = url
|
|
|
|
|
|
|
|
if filename == None:
|
|
|
|
self.filename = self.createFilename()
|
|
|
|
else:
|
|
|
|
self.filename = filename
|
|
|
|
|
|
|
|
def createFilename( self):
|
|
|
|
result = ""
|
|
|
|
|
|
|
|
for char in self.title.lower():
|
|
|
|
if (char >= 'a' and char <= 'z') or (char >= 'A' and char <= 'Z') or (char >= '1' and char <= '9'):
|
|
|
|
result = result + char
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
def channelsToModel( channels):
|
|
|
|
new_model = gtk.ListStore( gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_OBJECT)
|
|
|
|
|
|
|
|
for channel in channels:
|
|
|
|
new_iter = new_model.append()
|
|
|
|
new_model.set( new_iter, 0, channel.url)
|
|
|
|
new_model.set( new_iter, 1, channel.title + " ("+channel.url+")")
|
|
|
|
#if channel.image != None:
|
|
|
|
# new_model.set( new_iter, 2, gtk.gdk.pixbuf_new_from_file_at_size( channel.image, 60, 60))
|
|
|
|
#else:
|
|
|
|
# new_model.set( new_iter, 2, None)
|
|
|
|
|
|
|
|
return new_model
|
|
|
|
|
|
|
|
|