2013-04-26 07:18:21 +00:00
# -*- coding: utf-8 -*-
# Copyright (c) 2013 Paul Price, Artem Glebov
import os
import sys
import xbmc , xbmcaddon , xbmcgui
import transmissionrpc
2014-10-05 03:20:44 +00:00
import urllib
import subprocess
2013-04-26 07:18:21 +00:00
__settings__ = xbmcaddon . Addon ( id = ' script.transmission ' )
2014-10-05 03:20:44 +00:00
__addon__ = xbmcaddon . Addon ( )
__addonname__ = __addon__ . getAddonInfo ( ' name ' )
__icon__ = __addon__ . getAddonInfo ( ' icon ' )
2013-04-26 07:18:21 +00:00
BASE_RESOURCE_PATH = xbmc . translatePath ( os . path . join ( __settings__ . getAddonInfo ( ' path ' ) , ' resources ' , ' lib ' ) )
sys . path . append ( BASE_RESOURCE_PATH )
import common
class SubstitutePlayer ( xbmc . Player ) :
def __init__ ( self ) :
xbmc . Player . __init__ ( self )
self . prev_settings = { }
self . refreshSettings ( )
def onPlayBackStarted ( self ) :
self . refreshSettings ( )
2014-10-02 05:00:23 +00:00
if self . mode != ' 0 ' and xbmc . Player ( ) . isPlayingVideo ( ) :
if self . mode == ' 1 ' :
self . stopAllTorrents ( )
elif self . mode == ' 2 ' :
self . enableSpeedLimit ( )
2013-04-26 07:18:21 +00:00
def onPlayBackStopped ( self ) :
2014-10-05 03:20:44 +00:00
xbmc . sleep ( 1 )
if self . mode == ' 1 ' and not xbmc . Player ( ) . isPlayingVideo ( ) :
xbmc . executebuiltin ( ' Notification( %s , %s , %d , %s ) ' % ( __addonname__ , " Torrents will be started in " + str ( self . seconds / 1000 ) + " seconds " , 5000 , __icon__ ) )
elif self . mode == ' 2 ' and not xbmc . Player ( ) . isPlayingVideo ( ) :
xbmc . executebuiltin ( ' Notification( %s , %s , %d , %s ) ' % ( __addonname__ , " Speed limited will be disabled in " + str ( self . seconds / 1000 ) + " seconds " , 5000 , __icon__ ) )
2014-10-02 05:00:23 +00:00
xbmc . sleep ( int ( self . seconds ) )
2013-04-26 07:18:21 +00:00
self . refreshSettings ( )
2014-10-02 05:00:23 +00:00
if self . mode == ' 1 ' and not xbmc . Player ( ) . isPlayingVideo ( ) :
2013-04-26 07:18:21 +00:00
self . startAllTorrents ( )
2014-10-02 05:00:23 +00:00
elif self . mode == ' 2 ' and not xbmc . Player ( ) . isPlayingVideo ( ) :
self . disableSpeedLimit ( )
def onPlayBackEnded ( self ) :
2014-10-05 03:20:44 +00:00
xbmc . sleep ( 1 )
if self . mode == ' 1 ' and not xbmc . Player ( ) . isPlayingVideo ( ) :
xbmc . executebuiltin ( ' Notification( %s , %s , %d , %s ) ' % ( __addonname__ , " Torrents will be re-started in " + str ( self . seconds / 1000 ) + " seconds " , 5000 , __icon__ ) )
elif self . mode == ' 2 ' and not xbmc . Player ( ) . isPlayingVideo ( ) :
xbmc . executebuiltin ( ' Notification( %s , %s , %d , %s ) ' % ( __addonname__ , " Speed limited will be disabled in " + str ( self . seconds / 1000 ) + " seconds " , 5000 , __icon__ ) )
xbmc . sleep ( int ( self . seconds ) )
2014-10-02 05:00:23 +00:00
self . refreshSettings ( )
if self . mode == ' 1 ' and not xbmc . Player ( ) . isPlayingVideo ( ) :
self . startAllTorrents ( )
elif self . mode == ' 2 ' and not xbmc . Player ( ) . isPlayingVideo ( ) :
2014-10-05 03:20:44 +00:00
self . disableSpeedLimit ( )
2013-04-26 07:18:21 +00:00
def startAllTorrents ( self ) :
if self . transmission :
2014-10-05 03:20:44 +00:00
xbmc . executebuiltin ( ' Notification( %s , %s , %d , %s ) ' % ( __addonname__ , " Starting torrents... " , 5000 , __icon__ ) )
2013-04-26 07:18:21 +00:00
torrents = self . transmission . list ( )
for tid , torrent in torrents . iteritems ( ) :
self . transmission . start ( tid )
def stopAllTorrents ( self ) :
if self . transmission :
2014-10-05 03:20:44 +00:00
xbmc . executebuiltin ( ' Notification( %s , %s , %d , %s ) ' % ( __addonname__ , " Pausing torrents... " , 5000 , __icon__ ) )
2013-04-26 07:18:21 +00:00
torrents = self . transmission . list ( )
for tid , torrent in torrents . iteritems ( ) :
2014-10-05 03:20:44 +00:00
if self . keep_seeding == ' true ' and torrent . status not in ( ' seeding ' ) :
print " [Transmission Debug] - Pausing: " + str ( torrent . name ) + " - " + str ( torrent . status )
self . transmission . stop ( tid )
elif self . keep_seeding == ' false ' :
print " [Transmission Debug] - Pausing (All): " + str ( torrent . name ) + " - " + str ( torrent . status )
self . transmission . stop ( tid )
elif self . keep_seeding == ' true ' and torrent . status in ( ' seeding ' ) :
print " [Transmission Debug] - Not Pausing: " + str ( torrent . name ) + " - " + str ( torrent . status )
else :
print " [Transmission Debug] - None criteria met "
2013-04-26 07:18:21 +00:00
def refreshSettings ( self ) :
settings = common . get_settings ( )
if settings != self . prev_settings :
2014-10-02 05:00:23 +00:00
self . mode = settings [ ' action_on_playback ' ]
2014-10-05 03:20:44 +00:00
self . keep_seeding = settings [ ' seeding_torrents ' ]
2014-10-02 05:00:23 +00:00
self . seconds = int ( settings [ ' seconds_playback_finished ' ] ) * 1000
2013-04-26 07:18:21 +00:00
try :
self . transmission = common . get_rpc_client ( )
except :
self . transmission = None
self . prev_settings = settings
2014-10-02 05:00:23 +00:00
def enableSpeedLimit ( self ) :
if self . transmission :
2014-10-05 03:20:44 +00:00
xbmc . executebuiltin ( ' Notification( %s , %s , %d , %s ) ' % ( __addonname__ , " Enabling speed limit... " , 5000 , __icon__ ) )
2014-10-02 05:00:23 +00:00
self . transmission . set_session ( alt_speed_enabled = True )
def disableSpeedLimit ( self ) :
if self . transmission :
2014-10-05 03:20:44 +00:00
xbmc . executebuiltin ( ' Notification( %s , %s , %d , %s ) ' % ( __addonname__ , " Disabling speed limit... " , 5000 , __icon__ ) )
2014-10-02 05:00:23 +00:00
self . transmission . set_session ( alt_speed_enabled = False )
2013-04-26 07:18:21 +00:00
player = SubstitutePlayer ( )
while ( not xbmc . abortRequested ) :
xbmc . sleep ( 5000 ) ;