summaryrefslogtreecommitdiff
path: root/plugin.video.mediathekview/addon.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugin.video.mediathekview/addon.py')
-rw-r--r--plugin.video.mediathekview/addon.py114
1 files changed, 42 insertions, 72 deletions
diff --git a/plugin.video.mediathekview/addon.py b/plugin.video.mediathekview/addon.py
index 0c10b29..64e925d 100644
--- a/plugin.video.mediathekview/addon.py
+++ b/plugin.video.mediathekview/addon.py
@@ -27,21 +27,22 @@ from __future__ import unicode_literals # ,absolute_import, division
# from future import standard_library
# from builtins import *
# standard_library.install_aliases()
-import io,os,re,sys,urlparse,datetime,string,urllib,urllib2
-import xbmc,xbmcplugin,xbmcgui,xbmcaddon,xbmcvfs
+import os,re,sys,urlparse,datetime
+import xbmcplugin,xbmcgui,xbmcvfs
-from de.yeasoft.kodi.KodiAddon import KodiPlugin
-from de.yeasoft.kodi.KodiUI import KodiBGDialog
+from contextlib import closing
-from classes.store import Store
-from classes.notifier import Notifier
-from classes.settings import Settings
-from classes.filmui import FilmUI
-from classes.channelui import ChannelUI
-from classes.initialui import InitialUI
-from classes.showui import ShowUI
-from classes.updater import MediathekViewUpdater
-from classes.ttml2srt import ttml2srt
+from resources.lib.kodi.KodiAddon import KodiPlugin
+from resources.lib.kodi.KodiUI import KodiBGDialog
+
+from resources.lib.store import Store
+from resources.lib.notifier import Notifier
+from resources.lib.settings import Settings
+from resources.lib.filmui import FilmUI
+from resources.lib.channelui import ChannelUI
+from resources.lib.initialui import InitialUI
+from resources.lib.showui import ShowUI
+from resources.lib.ttml2srt import ttml2srt
# -- Classes ------------------------------------------------
class MediathekView( KodiPlugin ):
@@ -52,9 +53,6 @@ class MediathekView( KodiPlugin ):
self.notifier = Notifier()
self.db = Store( self.getNewLogger( 'Store' ), self.notifier, self.settings )
- def __del__( self ):
- del self.db
-
def showMainMenu( self ):
# Search
self.addFolderItem( 30901, { 'mode': "search" } )
@@ -79,6 +77,7 @@ class MediathekView( KodiPlugin ):
if len( searchText ) > 2:
self.db.Search( searchText, FilmUI( self ) )
else:
+ self.info( 'The following ERROR can be ignored. It is caused by the architecture of the Kodi Plugin Engine' )
self.endOfDirectory( False, cacheToDisc = True )
# self.showMainMenu()
@@ -87,6 +86,7 @@ class MediathekView( KodiPlugin ):
if len( searchText ) > 2:
self.db.SearchFull( searchText, FilmUI( self ) )
else:
+ self.info( 'The following ERROR can be ignored. It is caused by the architecture of the Kodi Plugin Engine' )
self.endOfDirectory( False, cacheToDisc = True )
# self.showMainMenu()
@@ -176,8 +176,8 @@ class MediathekView( KodiPlugin ):
videourl = film.url_video
# prepare names
- showname = self._cleanup_filename( film.show )[:64]
- filestem = self._cleanup_filename( film.title )[:64]
+ showname = mvutils.cleanup_filename( film.show )[:64]
+ filestem = mvutils.cleanup_filename( film.title )[:64]
extension = os.path.splitext( videourl )[1]
if not extension:
extension = u'.mp4'
@@ -211,7 +211,7 @@ class MediathekView( KodiPlugin ):
bgd.Create( self.language( 30974 ), fileepi + extension )
try:
bgd.Update( 0 )
- result = self._url_retrieve( videourl, movname, bgd.UrlRetrieveHook )
+ result = mvutils.url_retrieve_vfs( videourl, movname, bgd.UrlRetrieveHook )
bgd.Close()
if result is not None:
self.notifier.ShowNotification( self.language( 30960 ), self.language( 30976 ).format( videourl ) )
@@ -226,7 +226,7 @@ class MediathekView( KodiPlugin ):
bgd.Create( self.language( 30978 ), fileepi + u'.ttml' )
try:
bgd.Update( 0 )
- result = self._url_retrieve( film.url_sub, ttmname, bgd.UrlRetrieveHook )
+ result = mvutils.url_retrieve_vfs( film.url_sub, ttmname, bgd.UrlRetrieveHook )
try:
ttml2srt( xbmcvfs.File( ttmname, 'r' ), xbmcvfs.File( srtname, 'w' ) )
except Exception as err:
@@ -244,74 +244,43 @@ class MediathekView( KodiPlugin ):
def doEnqueueFilm( self, filmid ):
self.info( 'Enqueue {}', filmid )
- def _cleanup_filename( self, val ):
- cset = string.letters + string.digits + u' _-#äöüÄÖÜßáàâéèêíìîóòôúùûÁÀÉÈÍÌÓÒÚÙçÇœ'
- search = ''.join( [ c for c in val if c in cset ] )
- return search.strip()
-
def _make_nfo_files( self, film, episode, dirname, filename, videourl ):
# create NFO files
if not xbmcvfs.exists( dirname + 'tvshow.nfo' ):
try:
- file = xbmcvfs.File( dirname + 'tvshow.nfo', 'w' )
- file.write( bytearray( '<tvshow>\n', 'utf-8' ) )
- file.write( bytearray( '<id></id>\n', 'utf-8' ) )
- file.write( bytearray( '\t<title>{}</title>\n'.format( film.show ), 'utf-8' ) )
- file.write( bytearray( '\t<sorttitle>{}</sorttitle>\n'.format( film.show ), 'utf-8' ) )
-# file.write( bytearray( '\t<year>{}</year>\n'.format( 2018 ), 'utf-8' ) ) # XXX TODO: That might be incorrect!
- file.write( bytearray( '\t<studio>{}</studio>\n'.format( film.channel ), 'utf-8' ) )
- file.write( bytearray( '</tvshow>\n', 'utf-8' ) )
- file.close()
+ with closing( xbmcvfs.File( dirname + 'tvshow.nfo', 'w' ) ) as file:
+ file.write( b'<tvshow>\n' )
+ file.write( b'<id></id>\n' )
+ file.write( bytearray( '\t<title>{}</title>\n'.format( film.show ), 'utf-8' ) )
+ file.write( bytearray( '\t<sorttitle>{}</sorttitle>\n'.format( film.show ), 'utf-8' ) )
+# TODO: file.write( bytearray( '\t<year>{}</year>\n'.format( 2018 ), 'utf-8' ) )
+ file.write( bytearray( '\t<studio>{}</studio>\n'.format( film.channel ), 'utf-8' ) )
+ file.write( b'</tvshow>\n' )
except Exception as err:
self.error( 'Failure creating show NFO file for {}: {}', videourl, err )
try:
- file = xbmcvfs.File( filename, 'w' )
- file.write( bytearray( '<episodedetails>\n', 'utf-8' ) )
- file.write( bytearray( '\t<title>{}</title>\n'.format( film.title ), 'utf-8' ) )
- file.write( bytearray( '\t<season>1</season>\n', 'utf-8' ) )
- file.write( bytearray( '\t<episode>{}</episode>\n'.format( episode ), 'utf-8' ) )
- file.write( bytearray( '\t<showtitle>{}</showtitle>\n'.format( film.show ), 'utf-8' ) )
- file.write( bytearray( '\t<plot>{}</plot>\n'.format( film.description ), 'utf-8' ) )
- file.write( bytearray( '\t<aired>{}</aired>\n'.format( film.aired ), 'utf-8' ) )
- if film.seconds > 60:
- file.write( bytearray( '\t<runtime>{}</runtime>\n'.format( int( film.seconds / 60 ) ), 'utf-8' ) )
- file.write( bytearray( '\t<studio>{}</studio\n'.format( film.channel ), 'utf-8' ) )
- file.write( bytearray( '</episodedetails>\n', 'utf-8' ) )
- file.close()
+ with closing( xbmcvfs.File( filename, 'w' ) ) as file:
+ file.write( b'<episodedetails>\n' )
+ file.write( bytearray( '\t<title>{}</title>\n'.format( film.title ), 'utf-8' ) )
+ file.write( b'\t<season>1</season>\n' )
+ file.write( bytearray( '\t<episode>{}</episode>\n'.format( episode ), 'utf-8' ) )
+ file.write( bytearray( '\t<showtitle>{}</showtitle>\n'.format( film.show ), 'utf-8' ) )
+ file.write( bytearray( '\t<plot>{}</plot>\n'.format( film.description ), 'utf-8' ) )
+ file.write( bytearray( '\t<aired>{}</aired>\n'.format( film.aired ), 'utf-8' ) )
+ if film.seconds > 60:
+ file.write( bytearray( '\t<runtime>{}</runtime>\n'.format( int( film.seconds / 60 ) ), 'utf-8' ) )
+ file.write( bytearray( '\t<studio>{}</studio\n'.format( film.channel ), 'utf-8' ) )
+ file.write( b'</episodedetails>\n' )
except Exception as err:
self.error( 'Failure creating episode NFO file for {}: {}', videourl, err )
- def _url_retrieve( self, videourl, filename, reporthook, chunk_size = 8192 ):
- f = xbmcvfs.File( filename, 'wb' )
- u = urllib2.urlopen( videourl )
-
- total_size = int( u.info().getheader( 'Content-Length' ).strip() ) if u.info() and u.info().getheader( 'Content-Length' ) else 0
- total_chunks = 0
-
- while True:
- reporthook( total_chunks, chunk_size, total_size )
- chunk = u.read( chunk_size )
- if not chunk:
- break
- f.write( chunk )
- total_chunks += 1
- f.close()
- return ( filename, [], )
-
def Init( self ):
self.args = urlparse.parse_qs( sys.argv[2][1:] )
self.db.Init()
if self.settings.HandleFirstRun():
# TODO: Implement Issue #16
pass
- if MediathekViewUpdater( self.getNewLogger( 'Updater' ), self.notifier, self.settings ).PrerequisitesMissing():
- self.setSetting( 'updenabled', 'false' )
- self.settings.Reload()
- xbmcgui.Dialog().textviewer(
- self.language( 30963 ),
- self.language( 30964 )
- )
def Do( self ):
mode = self.args.get( 'mode', None )
@@ -327,7 +296,7 @@ class MediathekView( KodiPlugin ):
channel = self.args.get( 'channel', [0] )
self.db.GetRecents( channel[0], FilmUI( self ) )
elif mode[0] == 'recentchannels':
- self.db.GetRecentChannels( ChannelUI( self.addon_handle, next = 'recent' ) )
+ self.db.GetRecentChannels( ChannelUI( self.addon_handle, nextdir = 'recent' ) )
elif mode[0] == 'channels':
self.db.GetChannels( ChannelUI( self.addon_handle ) )
elif mode[0] == 'action-dbinfo':
@@ -352,6 +321,7 @@ class MediathekView( KodiPlugin ):
def Exit( self ):
self.db.Exit()
+
# -- Main Code ----------------------------------------------
if __name__ == '__main__':
addon = MediathekView()