The branch, frodo has been updated
via 709a0185569e4bbb6135561c20adfad41f040a25 (commit)
via d6ffef2a33329f62b79cb0596974cf7560439366 (commit)
from 641e75e05ecf4ea5473869663af6709ffe45edae (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=709a0185569e4bbb6135561c20adfad41f040a25
commit 709a0185569e4bbb6135561c20adfad41f040a25
Author: sphere <[email protected]>
Date: Fri Mar 14 08:11:39 2014 +0100
[plugin.audio.mixcloud] updated to version 1.1.1
diff --git a/plugin.audio.mixcloud/README b/plugin.audio.mixcloud/README
index a2ba9f4..12fd2a0 100644
--- a/plugin.audio.mixcloud/README
+++ b/plugin.audio.mixcloud/README
@@ -2,7 +2,7 @@
XBMC Mixcloud Plugin - jackyNIX/Bochi
============================================
-Current version: 1.1.0 frodo
+Current version: 1.1.1 frodo
============================================
diff --git a/plugin.audio.mixcloud/addon.xml b/plugin.audio.mixcloud/addon.xml
index 4b93e52..65b3cb7 100644
--- a/plugin.audio.mixcloud/addon.xml
+++ b/plugin.audio.mixcloud/addon.xml
@@ -1,14 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.audio.mixcloud"
name="MixCloud"
- version="1.1.0"
+ version="1.1.1"
provider-name="jackyNIX/Bochi">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.simplejson" version="2.0.10"/>
</requires>
- <extension point="xbmc.python.pluginsource"
- library="default.py">
+ <extension point="xbmc.python.pluginsource" library="default.py">
<provides>audio</provides>
</extension>
<extension point="xbmc.addon.metadata">
@@ -21,6 +20,9 @@
<description lang="fr">Mixcloud redéfinit la radio. Ãcoutez les
émissions radio, podcasts et mixes DJ sur demande.</description>
<description lang="de">Mixcloud erfindet Radio neu. Höre Radioshows,
Podcasts und DJ Mixe wann immer Du willst.</description>
<platform>all</platform>
- <language>en nl fr de</language>
+ <language></language>
+ <license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
+ <forum>http://forum.xbmc.org/showthread.php?tid=116386</forum>
+ <source>https://github.com/jackyNIX/xbmc-mixcloud-plugin</source>
</extension>
</addon>
diff --git a/plugin.audio.mixcloud/changelog.txt
b/plugin.audio.mixcloud/changelog.txt
index 77d3586..02256dd 100644
--- a/plugin.audio.mixcloud/changelog.txt
+++ b/plugin.audio.mixcloud/changelog.txt
@@ -1,3 +1,6 @@
+1.1.1
+- Modified getstream url
+
1.1.0
- Added German localisation
- Added compatibility to frodo python engine
diff --git a/plugin.audio.mixcloud/default.py b/plugin.audio.mixcloud/default.py
index 1f71c78..94f25e5 100644
--- a/plugin.audio.mixcloud/default.py
+++ b/plugin.audio.mixcloud/default.py
@@ -3,7 +3,7 @@
'''
@author: jackyNIX
-Copyright (C) 2011 jackyNIX
+Copyright (C) 2011-2014 jackyNIX
This file is part of XBMC MixCloud Plugin.
@@ -331,12 +331,17 @@ def get_stream(cloudcast_key):
ck="http://www.mixcloud.com"+cloudcast_key
if debugenabled:
print('MIXCLOUD '+'resolving cloudcast stream for '+ck)
- request = urllib2.Request('http://offliberty.com/off.php',
'track=%s&refext=' % ck)
- request.add_header('Referer', 'http://offliberty.com/')
- response = urllib2.urlopen(request)
- data = response.read()
- match = re.search('HREF="(.*)" class="download"', data)
- return match.group(1)
+ for retry in range(1, 10):
+# request = urllib2.Request('http://offliberty.com/off.php',
'track=%s&refext=' % ck)
+ request = urllib2.Request('http://offliberty.com/off54.php',
'track=%s&refext=' % ck)
+ request.add_header('Referer', 'http://offliberty.com/')
+ response = urllib2.urlopen(request)
+ data=response.read()
+ match=re.search('HREF="(.*)" class="download"', data)
+ if match:
+ return match.group(1)
+ elif debugenabled:
+ print('wrong response try=%s code=%s len=%s, trying again...' %
(retry, response.getcode(), len(data)))
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=d6ffef2a33329f62b79cb0596974cf7560439366
commit d6ffef2a33329f62b79cb0596974cf7560439366
Author: sphere <[email protected]>
Date: Fri Mar 14 08:10:26 2014 +0100
[plugin.dbmc] updated to version 0.7.1
diff --git a/plugin.dbmc/addon.xml b/plugin.dbmc/addon.xml
index 54ff80a..4c68c86 100644
--- a/plugin.dbmc/addon.xml
+++ b/plugin.dbmc/addon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.dbmc" name="Dbmc" version="0.7.0"
+<addon id="plugin.dbmc" name="Dbmc (Dropbox add-on)" version="0.7.1"
provider-name="Joost Kop">
<requires>
<import addon="xbmc.python" version="2.1.0" />
@@ -28,7 +28,7 @@
<license>GNU GENERAL PUBLIC LICENSE. Version 2, June
1991</license>
<forum>http://forum.xbmc.org/showthread.php?tid=172902</forum>
<website>https://sourceforge.net/projects/xbmc-dropbox/</website>
+
<source>https://sourceforge.net/p/xbmc-dropbox/code/ci/master/tree/</source>
<email />
- <source />
</extension>
</addon>
diff --git a/plugin.dbmc/changelog.txt b/plugin.dbmc/changelog.txt
index c3ba11b..bdda8f2 100644
--- a/plugin.dbmc/changelog.txt
+++ b/plugin.dbmc/changelog.txt
@@ -1,11 +1,14 @@
+[B]0.7.1:[/B]
+- Fixed synchronization crash when a syncing a file fails
+- Fixed not able to upload files
+- Add (Dropbox addon) to the name (Make it come up in 'dropbox' searches)
+- Add Dbmc icon to the sync notifications
+
[B]0.7.0:[/B]
- Changes for getting addon into XBMC official repository
- Fixed login (step 8)
- Improved synchronization handling when no token (access code) present
-[B]0.6.4:[/B]
-- Add DBMC to official xbmc-addons repository
-
[B]0.6.3:[/B]
- Improve addon behavior with sync service
- Fix some synchronization bugs
@@ -19,6 +22,14 @@
[B]0.6.1:[/B]
- Added one way (from dropbox to local system) synchronization option
+[B]0.5.4:[/B]
+- Added File/Folder download context menu item
+
+[B]0.5.3:[/B]
+- Fix showing unicoded-string directory
+- Fix creating new folder on file-item
+- Set Background cache dialog timeout to 7 secs
+
[B]0.5.2:[/B]
- Added option to stream music and video i.s.o. caching them. Note: picture
cannot be streamed, they are still cached
diff --git a/plugin.dbmc/resources/lib/dropboxclient.py
b/plugin.dbmc/resources/lib/dropboxclient.py
index 0a73fb2..5c47e23 100644
--- a/plugin.dbmc/resources/lib/dropboxclient.py
+++ b/plugin.dbmc/resources/lib/dropboxclient.py
@@ -43,9 +43,9 @@ except:
def command():
"""a decorator for handling authentication and exceptions"""
def decorate(f):
- def wrapper(self, *args):
+ def wrapper(self, *args, **keywords):
try:
- return f(self, *args)
+ return f(self, *args, **keywords)
except TypeError, e:
log_error('TypeError: %s' %str(e))
except rest.ErrorResponse, e:
diff --git a/plugin.dbmc/resources/lib/utils.py
b/plugin.dbmc/resources/lib/utils.py
index 751b1d2..51a66b2 100644
--- a/plugin.dbmc/resources/lib/utils.py
+++ b/plugin.dbmc/resources/lib/utils.py
@@ -5,6 +5,7 @@ ADDON = xbmcaddon.Addon(id='plugin.dbmc')
LANGUAGE_STRING = ADDON.getLocalizedString
ADDON_NAME = xbmcaddon.Addon().getAddonInfo('id')
ADDON_PATH = xbmcaddon.Addon().getAddonInfo('path')
+ICON = xbmcaddon.Addon().getAddonInfo('icon')
DATAPATH = xbmc.translatePath(
xbmcaddon.Addon().getAddonInfo('profile') )
DROPBOX_SEP = '/'
diff --git a/plugin.dbmc/sync_dropbox.py b/plugin.dbmc/sync_dropbox.py
index 291101c..65cefb2 100644
--- a/plugin.dbmc/sync_dropbox.py
+++ b/plugin.dbmc/sync_dropbox.py
@@ -25,7 +25,7 @@ import xbmcvfs
import time, datetime
import threading
-import shutil, os
+import shutil, os, traceback
from stat import *
import pickle
@@ -157,7 +157,7 @@ class DropboxSynchronizer:
if self.root:
self.root.updateLocalRootPath(self._syncPath)
log('SyncPath updated')
- xbmc.executebuiltin('Notification(%s,%s,%i)' %
(LANGUAGE_STRING(30103), tempPath, 7000))
+ xbmc.executebuiltin('Notification(%s,%s,%d,%s)' %
(LANGUAGE_STRING(30103), tempPath, 7000, ICON))
else:
log_error('New sync location is not empty: %s'%(tempPath))
dialog = xbmcgui.Dialog()
@@ -369,14 +369,14 @@ class SynchronizeThread(threading.Thread):
now = time.time()
if (self._lastProgressUpdate + self.PROGRESS_TIMEOUT) < now:
log('Synchronizing number of items: %s/%s' % (handled, total) )
- xbmc.executebuiltin('Notification(%s,%s,%i)' %
(LANGUAGE_STRING(30114), str(handled)+'/'+str(total), 7000))
+ xbmc.executebuiltin('Notification(%s,%s,%d,%s)' %
(LANGUAGE_STRING(30114), str(handled)+'/'+str(total), 7000, ICON))
self._lastProgressUpdate = now
#Also store the new data (frequently)
self._dropboxSyncer.storeSyncData()
def updateProgressFinished(self, handled, total):
log('Number of items synchronized: %s' % (handled) )
- xbmc.executebuiltin('Notification(%s,%s%s,%i)' %
(LANGUAGE_STRING(30106), LANGUAGE_STRING(30107), handled, 7000))
+ xbmc.executebuiltin('Notification(%s,%s%s,%d,%s)' %
(LANGUAGE_STRING(30106), LANGUAGE_STRING(30107), handled, 10000, ICON))
class SyncObject(object):
@@ -386,6 +386,7 @@ class SyncObject(object):
OBJECT_2_REMOVE = 3
OBJECT_ADD_CHILD = 4
OBJECT_REMOVED = 5
+ OBJECT_SKIP = 6
def __init__(self, path, client):
#note: path is case-insensitive, meta['path'] is case-sensitive
@@ -399,6 +400,8 @@ class SyncObject(object):
self._remoteClientModifiedTime = 0
self._newRemoteTimeStamp = 0
self._localTimeStamp = 0
+ self._failure = False
+ self._state = self.OBJECT_IN_SYNC
def setItemInfo(self, meta):
log_debug('Set stored metaData: %s'%self.path)
@@ -477,6 +480,9 @@ class SyncFile(SyncObject):
super(SyncFile, self).__init__(path, client)
def inSync(self):
+ if self._state == self.OBJECT_SKIP:
+ log_debug('Skipping file: %s'%self._localPath)
+ return self.OBJECT_IN_SYNC #fake object in sync...
localPresent = False
if self._localPath:
localPresent = xbmcvfs.exists(self._localPath)
@@ -515,23 +521,34 @@ class SyncFile(SyncObject):
return self.OBJECT_IN_SYNC
def sync(self):
- fileStatus = self.inSync()
- if fileStatus == self.OBJECT_2_DOWNLOAD:
- log_debug('Download file to: %s'%self._localPath)
- self._client.saveFile(self.path, self._localPath)
- self.updateTimeStamp()
- elif fileStatus == self.OBJECT_2_UPLOAD:
- log_debug('Upload file: %s'%self._localPath)
- self._client.upload(self._localPath, self.path)
- st = os.stat(self._localPath)
- self._localTimeStamp = st[ST_MTIME]
- elif fileStatus == self.OBJECT_2_REMOVE:
- log_debug('Removing file: %s'%self._localPath)
- os.remove(self._localPath)
- elif fileStatus == self.OBJECT_IN_SYNC or fileStatus ==
self.OBJECT_REMOVED:
- pass
- else:
- log_error('Unknown file status(%s) for: %s!'%(fileStatus,
self.path))
+ if self._state == self.OBJECT_SKIP:
+ return
+ try:
+ self._state = self.inSync()
+ if self._state == self.OBJECT_2_DOWNLOAD:
+ log_debug('Download file to: %s'%self._localPath)
+ self._client.saveFile(self.path, self._localPath)
+ self.updateTimeStamp()
+ elif self._state == self.OBJECT_2_UPLOAD:
+ log_debug('Upload file: %s'%self._localPath)
+ self._client.upload(self._localPath, self.path)
+ st = os.stat(self._localPath)
+ self._localTimeStamp = st[ST_MTIME]
+ elif self._state == self.OBJECT_2_REMOVE:
+ log_debug('Removing file: %s'%self._localPath)
+ os.remove(self._localPath)
+ elif self._state == self.OBJECT_IN_SYNC or self._state ==
self.OBJECT_REMOVED:
+ pass
+ else:
+ log_error('Unknown file status(%s) for: %s!'%(self._state,
self.path))
+ except Exception, e:
+ log_error('Exception occurred for file %s' % self._localPath)
+ log_error( traceback.format_exc() )
+ if(self._failure):
+ #failure happened before... So skip this item in all the next
syncs!
+ self._state = self.OBJECT_SKIP
+ log_error('Skipping file in next syncs: %s'% self._localPath)
+ self._failure = True
def setItemInfo(self, path, meta):
if path == self.path:
@@ -613,6 +630,9 @@ class SyncFolder(SyncObject):
return self._children[childPath]
def inSync(self):
+ if self._state == self.OBJECT_SKIP:
+ log_debug('Skipping folder: %s'%self._localPath)
+ return self.OBJECT_IN_SYNC #fake object in sync...
localPresent = False
if self._localPath:
localPresent = xbmcvfs.exists(self._localPath)
@@ -635,26 +655,37 @@ class SyncFolder(SyncObject):
return self.OBJECT_IN_SYNC
def sync(self):
- folderStatus = self.inSync()
- if folderStatus == self.OBJECT_2_DOWNLOAD:
- log_debug('Create folder: %s'%self._localPath)
- xbmcvfs.mkdirs( self._localPath )
- self.updateTimeStamp()
- elif folderStatus == self.OBJECT_2_UPLOAD:
- log_error('Can\'t upload folder: %s'%self._localPath)
- #TODO Add files if new files found local
- #TODO: modify timestamp of dir...
- elif folderStatus == self.OBJECT_2_REMOVE:
- log_debug('Remove folder: %s'%self._localPath)
- shutil.rmtree(self._localPath)
- elif folderStatus == self.OBJECT_ADD_CHILD:
- #TODO
- pass
- elif folderStatus == self.OBJECT_IN_SYNC:
- pass
- else:
- log_error('Unknown folder status(%s) for : %s!'%(folderStatus,
self.path))
-
+ if self._state == self.OBJECT_SKIP:
+ return
+ try:
+ self._state = self.inSync()
+ if self._state == self.OBJECT_2_DOWNLOAD:
+ log_debug('Create folder: %s'%self._localPath)
+ xbmcvfs.mkdirs( self._localPath )
+ self.updateTimeStamp()
+ elif self._state == self.OBJECT_2_UPLOAD:
+ log_error('Can\'t upload folder: %s'%self._localPath)
+ #TODO Add files if new files found local
+ #TODO: modify timestamp of dir...
+ elif self._state == self.OBJECT_2_REMOVE:
+ log_debug('Remove folder: %s'%self._localPath)
+ shutil.rmtree(self._localPath)
+ elif self._state == self.OBJECT_ADD_CHILD:
+ #TODO
+ pass
+ elif self._state == self.OBJECT_IN_SYNC:
+ pass
+ else:
+ log_error('Unknown folder status(%s) for : %s!'%(self._state,
self.path))
+ except Exception, e:
+ log_error('Exception occurred for folder %s' % self._localPath)
+ log_error( traceback.format_exc() )
+ if(self._failure):
+ #failure happened before... So skip this item in all the next
syncs!
+ self._state = self.OBJECT_SKIP
+ log_error('Skipping folder in next syncs: %s'% self._localPath)
+ self._failure = True
+
def getItems2Sync(self):
dirs2Sync = []
items2Sync = []
-----------------------------------------------------------------------
Summary of changes:
plugin.audio.mixcloud/README | 2 +-
plugin.audio.mixcloud/addon.xml | 10 ++-
plugin.audio.mixcloud/changelog.txt | 3 +
plugin.audio.mixcloud/default.py | 19 +++--
plugin.dbmc/addon.xml | 4 +-
plugin.dbmc/changelog.txt | 17 ++++-
plugin.dbmc/resources/lib/dropboxclient.py | 4 +-
plugin.dbmc/resources/lib/utils.py | 1 +
plugin.dbmc/sync_dropbox.py | 113 ++++++++++++++++++----------
9 files changed, 113 insertions(+), 60 deletions(-)
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/13534_NeoTech
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons