The branch, eden has been updated
via effe220bd0082f9015b033db5c3d77601a3d76e6 (commit)
via 7cf7b4c8761ff74518e1732c650652a5911ac143 (commit)
via e741957a757b913fa00d2283f3d7935164336f8c (commit)
from 9fa9be2af05d9b8a0936914665d0fe3c15a57db7 (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=effe220bd0082f9015b033db5c3d77601a3d76e6
commit effe220bd0082f9015b033db5c3d77601a3d76e6
Author: spiff <[email protected]>
Date: Mon Jun 25 09:31:35 2012 +0200
[script.common.plugin.cache] -v1.0.0
diff --git a/script.common.plugin.cache/addon.xml
b/script.common.plugin.cache/addon.xml
index e0b2ea2..be9d0eb 100644
--- a/script.common.plugin.cache/addon.xml
+++ b/script.common.plugin.cache/addon.xml
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
-<addon id='script.common.plugin.cache' version='0.9.2' name='Common plugin
cache' provider-name='TheCollective'>
+<addon id='script.common.plugin.cache' version='1.0.0' name='Common plugin
cache' provider-name='TheCollective'>
<requires>
<import addon='xbmc.python' version='2.0'/>
</requires>
diff --git a/script.common.plugin.cache/changelog.txt
b/script.common.plugin.cache/changelog.txt
index ea5123b..d1b4042 100644
--- a/script.common.plugin.cache/changelog.txt
+++ b/script.common.plugin.cache/changelog.txt
@@ -1,4 +1,5 @@
-[B]TODO:[/B]
+[B]Version 1.0.0[/B]
+- Minor fixes
[B]Version 0.9.2[/B]
- Don't autodetect instancemode
diff --git a/script.common.plugin.cache/default.py
b/script.common.plugin.cache/default.py
old mode 100755
new mode 100644
diff --git a/script.common.plugin.cache/lib/StorageServer.py
b/script.common.plugin.cache/lib/StorageServer.py
old mode 100755
new mode 100644
index b112bfd..c9fcbfa
--- a/script.common.plugin.cache/lib/StorageServer.py
+++ b/script.common.plugin.cache/lib/StorageServer.py
@@ -33,7 +33,7 @@ except: pass
class StorageServer():
def __init__(self, table=None, timeout=24, instance=False):
- self.version = "0.9.2"
+ self.version = "1.0.0"
self.plugin = "StorageClient-" + self.version
self.instance = instance
self.die = False
@@ -695,7 +695,7 @@ class StorageServer():
return ""
def setCacheTimeout(self, timeout):
- self.timeout = int(timeout) * 3600
+ self.timeout = float(timeout) * 3600
def _log(self, description, level=0):
if self.dbg and self.dbglevel > level:
@@ -719,7 +719,6 @@ def checkInstanceMode():
settings = xbmcaddon.Addon(id='script.common.plugin.cache')
if settings.getSetting("autostart") == "false":
-
s = StorageServer(table=False, instance=True)
print " StorageServer Module loaded RUN(instance only)"
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=7cf7b4c8761ff74518e1732c650652a5911ac143
commit 7cf7b4c8761ff74518e1732c650652a5911ac143
Author: spiff <[email protected]>
Date: Mon Jun 25 09:30:52 2012 +0200
[script.module.parsedom] -v1.0.0
diff --git a/script.module.parsedom/addon.xml b/script.module.parsedom/addon.xml
index 4ec0400..15954c5 100644
--- a/script.module.parsedom/addon.xml
+++ b/script.module.parsedom/addon.xml
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
-<addon id="script.module.parsedom" version="0.9.2" name="Parsedom for xbmc
plugins" provider-name="TheCollective">
+<addon id="script.module.parsedom" version="1.0.0" name="Parsedom for xbmc
plugins" provider-name="TheCollective">
<requires>
<import addon='xbmc.python' version='2.0'/>
</requires>
diff --git a/script.module.parsedom/changelog.txt
b/script.module.parsedom/changelog.txt
index e149d4a..e7ed26e 100644
--- a/script.module.parsedom/changelog.txt
+++ b/script.module.parsedom/changelog.txt
@@ -1,3 +1,6 @@
+[B]Version 1.0.0[/B]
+- Minor fixes
+
[B]Version 0.9.1[/B]
- Stability and more functions
- Add cookie support to fetchPage.
diff --git a/script.module.parsedom/lib/CommonFunctions.py
b/script.module.parsedom/lib/CommonFunctions.py
index 6d744ef..21a17e9 100644
--- a/script.module.parsedom/lib/CommonFunctions.py
+++ b/script.module.parsedom/lib/CommonFunctions.py
@@ -26,7 +26,7 @@ import time
import HTMLParser
-version = "0.9.2"
+version = "1.0.0"
plugin = "CommonFunctions-" + version
print plugin
@@ -135,7 +135,7 @@ def stripTags(html):
def _getDOMContent(html, name, match, ret): # Cleanup
- log("match: " + match, 2)
+ log("match: " + match, 3)
endstr = "</" + name # + ">"
@@ -152,7 +152,7 @@ def _getDOMContent(html, name, match, ret): # Cleanup
pos = html.find("<" + name, pos + 1)
log("loop: " + str(start) + " < " + str(end) + " pos = " + str(pos), 8)
- log("start: %s, len: %s, end: %s" % (start, len(match), end), 2)
+ log("start: %s, len: %s, end: %s" % (start, len(match), end), 3)
if start == -1 and end == -1:
result = ""
elif start > -1 and end > -1:
@@ -166,18 +166,17 @@ def _getDOMContent(html, name, match, ret): # Cleanup
endstr = html[end:html.find(">", html.find(endstr)) + 1]
result = match + result + endstr
- log("done result length: " + str(len(result)), 2)
+ log("done result length: " + str(len(result)), 3)
return result
-
def _getDOMAttributes(match, name, ret):
- log("", 2)
+ log("", 3)
lst = re.compile('<' + name + '.*? ' + ret + '=(.[^>]*?)>', re.M |
re.S).findall(match)
ret = []
for tmp in lst:
cont_char = tmp[0]
if cont_char in "'\"":
- log("Using %s as quotation mark" % cont_char)
+ log("Using %s as quotation mark" % cont_char, 3)
# Limit down to next variable.
if tmp.find('=' + cont_char, tmp.find(cont_char, 1)) > -1:
@@ -187,7 +186,7 @@ def _getDOMAttributes(match, name, ret):
if tmp.rfind(cont_char, 1) > -1:
tmp = tmp[1:tmp.rfind(cont_char)]
else:
- log("No quotation mark found", 2)
+ log("No quotation mark found", 3)
if tmp.find(" ") > 0:
tmp = tmp[:tmp.find(" ")]
elif tmp.find("/") > 0:
@@ -197,11 +196,11 @@ def _getDOMAttributes(match, name, ret):
ret.append(tmp.strip())
- log("Done: " + repr(ret), 2)
+ log("Done: " + repr(ret), 3)
return ret
def _getDOMElements(item, name, attrs):
- log("Name: " + repr(name) + " - Attrs:" + repr(attrs) + " - HTML: " +
str(type(item)))
+ log("", 3)
lst = []
for key in attrs:
lst2 = re.compile('(<' + name + '[^>]*?(?:' + key + '=[\'"]' +
attrs[key] + '[\'"].*?>))', re.M | re.S).findall(item)
@@ -218,20 +217,20 @@ def _getDOMElements(item, name, attrs):
test.reverse()
for i in test: # Delete anything missing from the next list.
if not lst[i] in lst2:
- log("Purging mismatch " + str(len(lst)) + " - " +
repr(lst[i]), 1)
+ log("Purging mismatch " + str(len(lst)) + " - " +
repr(lst[i]), 3)
del(lst[i])
if len(lst) == 0 and attrs == {}:
- log("No list found, trying to match on name only", 1)
+ log("No list found, trying to match on name only", 3)
lst = re.compile('(<' + name + '>)', re.M | re.S).findall(item)
if len(lst) == 0:
lst = re.compile('(<' + name + ' .*?>)', re.M | re.S).findall(item)
- log("Done: " + str(type(lst)))
+ log("Done: " + str(type(lst)), 3)
return lst
def parseDOM(html, name="", attrs={}, ret=False):
- log("Name: " + repr(name) + " - Attrs:" + repr(attrs) + " - Ret: " +
repr(ret) + " - HTML: " + str(type(html)), 1)
+ log("Name: " + repr(name) + " - Attrs:" + repr(attrs) + " - Ret: " +
repr(ret) + " - HTML: " + str(type(html)), 3)
if isinstance(html, str) or isinstance(html, unicode):
html = [html]
@@ -252,13 +251,13 @@ def parseDOM(html, name="", attrs={}, ret=False):
lst = _getDOMElements(item, name, attrs)
if isinstance(ret, str):
- log("Getting attribute %s content for %s matches " % (ret,
len(lst) ), 2)
+ log("Getting attribute %s content for %s matches " % (ret,
len(lst) ), 3)
lst2 = []
for match in lst:
lst2 += _getDOMAttributes(match, name, ret)
lst = lst2
else:
- log("Getting element content for %s matches " % len(lst), 2)
+ log("Getting element content for %s matches " % len(lst), 3)
lst2 = []
for match in lst:
log("Getting element content for %s" % match, 4)
@@ -268,7 +267,7 @@ def parseDOM(html, name="", attrs={}, ret=False):
lst = lst2
ret_lst += lst
- log("Done", 1)
+ log("Done: " + repr(ret_lst), 3)
return ret_lst
@@ -313,7 +312,6 @@ def fetchPage(params={}):
request.add_header('Cookie', get("cookie"))
if get("refering"):
- log("Added refering url: %s" % get("refering"))
request.add_header('Referer', get("refering"))
try:
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=e741957a757b913fa00d2283f3d7935164336f8c
commit e741957a757b913fa00d2283f3d7935164336f8c
Author: spiff <[email protected]>
Date: Mon Jun 25 09:29:41 2012 +0200
[script.module.simple.downloader] -v0.9.3
diff --git a/script.module.simple.downloader/addon.xml
b/script.module.simple.downloader/addon.xml
index 28197a7..5ba8e63 100644
--- a/script.module.simple.downloader/addon.xml
+++ b/script.module.simple.downloader/addon.xml
@@ -1,9 +1,9 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
-<addon id='script.module.simple.downloader' version='0.9.2' name='Simple
downloader for xbmc plugins' provider-name='TheCollective'>
+<addon id='script.module.simple.downloader' version='0.9.3' name='Simple
Downloader for xbmc plugins' provider-name='TheCollective'>
<requires>
<import addon='xbmc.python' version='2.0'/>
- <import addon='script.common.plugin.cache' version='0.9.2'/>
- <import addon='script.module.parsedom' version='0.9.2'/>
+ <import addon='script.common.plugin.cache' version='1.0.0'/>
+ <import addon='script.module.parsedom' version='1.0.0'/>
</requires>
<extension point='xbmc.service' library="default.py" />
<extension point='xbmc.addon.metadata'>
diff --git a/script.module.simple.downloader/changelog.txt
b/script.module.simple.downloader/changelog.txt
index 0781cb3..0761647 100644
--- a/script.module.simple.downloader/changelog.txt
+++ b/script.module.simple.downloader/changelog.txt
@@ -2,6 +2,12 @@
- User interface for queue manipulation
- Not backgroundable download(With dialog and wait for return)
- Add "Trying rtmpdump", "Trying vlc", "Trying mplayer" messages to OSD
+- Fix skin xml issue.
+
+[B]Version 0.9.3[/B]
+- Fix UTF-8 issues.
+- Fix mkdirs issues.
+- Add support for user-agent
[B]Version 0.9.2[/B]
- Don't use select.select on windows
diff --git a/script.module.simple.downloader/default.py
b/script.module.simple.downloader/default.py
index 241f814..d94bbc2 100644
--- a/script.module.simple.downloader/default.py
+++ b/script.module.simple.downloader/default.py
@@ -1,54 +1,19 @@
-'''
- YouTube plugin for XBMC
- Copyright (C) 2010-2011 Tobias Ussing And Henrik Mosgaard Jensen
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-'''
-
import sys
-#import xbmc
-#import xbmcplugin
-#import xbmcaddon
-#import xbmcgui
-#try:
-# import xbmcvfs
-#except ImportError:
-# import xbmcvfsdummy as xbmcvfs
-
-# plugin constants
-#version = "2.9.1"
-plugin = "downloader"
-#author = "TheCollective"
-#url = "www.xbmc.com"
-
-# xbmc hooks
-#settings = xbmcaddon.Addon(id='plugin.video.youtube')
-#language = settings.getLocalizedString
-#dbg = settings.getSetting("debug") == "true"
-#dbglevel = 3
-dbg = True
-
-if (__name__ == "__main__" ):
- if dbg:
- print plugin + " ARGV: " + repr(sys.argv)
- else:
- print plugin
-
-# try:
-# import StorageServer
-# cache = StorageServer.StorageServer("YouTube")
-# except:
-# import storageserverdummy as StorageServer
-# cache = StorageServer.StorageServer("YouTube")
-
+import xbmc
+import xbmcgui
+import xbmcplugin
+import xbmcvfs
+import socket
+import xbmcaddon
+import cookielib
+import urllib2
+
+settings = xbmcaddon.Addon(id='script.module.simple.downloader')
+language = settings.getLocalizedString
+version = "0.9.3"
+plugin = "SimpleDownloader-" + version
+core = ""
+common = ""
+downloader = ""
+dbg = settings.getSetting("dbg") == "true"
+dbglevel = 3
diff --git a/script.module.simple.downloader/lib/DialogDownloadProgress.py
b/script.module.simple.downloader/lib/DialogDownloadProgress.py
index a0c78e6..fd8407a 100644
--- a/script.module.simple.downloader/lib/DialogDownloadProgress.py
+++ b/script.module.simple.downloader/lib/DialogDownloadProgress.py
@@ -188,6 +188,7 @@ class Window:
self.ADDON_SKIN = ("default",
XBMC_SKIN)[os.path.exists(os.path.join(self.SKINS_PATH, XBMC_SKIN))]
windowXml = DialogDownloadProgressXML("DialogDownloadProgress.xml",
addonDir, self.ADDON_SKIN)
+ #windowXml = DialogDownloadProgressXML("DialogProgress.xml", addonDir,
self.ADDON_SKIN)
self.controls = windowXml.controls
del windowXml
diff --git a/script.module.simple.downloader/lib/SimpleDownloader.py
b/script.module.simple.downloader/lib/SimpleDownloader.py
index ef64086..4564026 100644
--- a/script.module.simple.downloader/lib/SimpleDownloader.py
+++ b/script.module.simple.downloader/lib/SimpleDownloader.py
@@ -28,8 +28,8 @@ class SimpleDownloader():
dialog = ""
def __init__(self):
- self.version = "0.9.2"
- self.plugin = "SimpleDownloader-" + self.version
+ self.version = "0.9.3"
+ self.plugin = "SimpleDownloader" + self.version
if hasattr(sys.modules["__main__"], "common"):
self.common = sys.modules["__main__"].common
@@ -104,8 +104,7 @@ class SimpleDownloader():
self.temporary_path =
self.xbmc.translatePath(self.settings.getAddonInfo("profile"))
if not self.xbmcvfs.exists(self.temporary_path):
self.common.log("Making path structure: " +
repr(self.temporary_path))
- os.makedirs(self.temporary_path)
-
+ self.xbmcvfs.mkdir(self.temporary_path)
self.common.log("Done")
def download(self, filename, params={}, async=True):
@@ -181,16 +180,20 @@ class SimpleDownloader():
else:
self.common.log("Download complete, but file %s
not found" % repr(item["path_incomplete"]))
self._showMessage(self.language(204), "ERROR")
- else:
+ elif status != 300:
self.common.log("Failure: " + repr(item) + " - " +
repr(status))
self._showMessage(self.language(204),
self.language(302))
- self._removeItemFromQueue(filename)
- item = self._getNextItemFromQueue()
- if item:
- (filename, item) = item
+ if status == 300:
+ item = False
+ else:
+ self._removeItemFromQueue(filename)
+ item = self._getNextItemFromQueue()
+ if item:
+ (filename, item) = item
self.common.log("Finished download queue.")
+ self.cache.set("StopQueue", "")
if self.dialog:
self.dialog.close()
self.common.log("Closed dialog")
@@ -433,7 +436,7 @@ class SimpleDownloader():
proc = self._runCommand(get("cmd_call"))
output = ""
if proc:
- while proc.returncode == None:
+ while proc.returncode == None and "quit" not in params:
temp_output = proc.stdout.read(23)
if len(output) > 10000:
output = output[0:500] + "\r\n\r\n\r\n"
@@ -478,7 +481,7 @@ class SimpleDownloader():
proc.kill()
break
- if item["percent"] > item["old_percent"]:
+ if item["percent"] > item["old_percent"] or time.time() -
params["queue_mark"] > 3:
self._updateProgress(filename, item, params)
item["old_percent"] = item["percent"]
@@ -506,18 +509,24 @@ class SimpleDownloader():
except:
pass
+ if "quit" in params:
+ self.common.log("Download aborted.")
+ return 300
if retval == 1:
self.common.log("Download failed, binary output: %s" % output)
return 500
- else:
- self.common.log("done")
- return 200
+
+ self.common.log("Done")
+ return 200
def _downloadURL(self, filename, item):
self.common.log(filename)
url = urllib2.Request(item["url"])
- url.add_header("User-Agent", self.common.USERAGENT)
+ if "useragent" in item:
+ url.add_header("User-Agent", item["useragent"])
+ else:
+ url.add_header("User-Agent", self.common.USERAGENT)
file = self.common.openFile(item["path_incomplete"], "wb")
con = urllib2.urlopen(url)
@@ -528,12 +537,11 @@ class SimpleDownloader():
if con.info().getheader("Content-Length").strip():
item["total_size"] =
int(con.info().getheader("Content-Length").strip())
+ params = {"bytes_so_far": 0, "mark": 0.0, "queue_mark": 0.0,
"obytes_so_far": 0}
+ item["percent"] = 0.1
+ item["old_percent"] = -1
try:
- params = {"bytes_so_far": 0, "mark": 0.0, "queue_mark": 0.0,
"obytes_so_far": 0}
- item["percent"] = 0.1
- item["old_percent"] = -1
-
- while 1:
+ while "quit" not in params:
chunk = con.read(chunk_size)
file.write(chunk)
params["bytes_so_far"] += len(chunk)
@@ -544,14 +552,17 @@ class SimpleDownloader():
self._generatePercent(item, params)
- if item["percent"] > item["old_percent"]:
- self._updateProgress(filename, item, params)
+ self.common.log("recieved chunk: %s - %s" % (
repr(item["percent"] > item["old_percent"]), repr(time.time() -
params["queue_mark"])))
+ if item["percent"] > item["old_percent"] or time.time() -
params["queue_mark"] > 30:
+ self._run_async(self._updateProgress(filename, item,
params))
+
item["old_percent"] = item["percent"]
params["obytes_so_far"] = params["bytes_so_far"]
if not chunk:
break
+ self.common.log("Loop done")
con.close()
file.close()
@@ -570,7 +581,11 @@ class SimpleDownloader():
self._showMessage(self.language(204), "ERROR")
return 500
- self.common.log("done")
+ if "quit" in params:
+ self.common.log("Download aborted.")
+ return 300
+
+ self.common.log("Done")
return 200
def _convertSecondsToHuman(self, seconds):
@@ -617,8 +632,20 @@ class SimpleDownloader():
if new_delta:
item["last_delta"] = time.time()
+ def _getQueue(self):
+ self.common.log("")
+ queue = self.cache.get("SimpleDownloaderQueue")
+
+ try:
+ items = eval(queue)
+ except:
+ items = {}
+
+ self.common.log("Done: " + str(len(items)))
+ return items
+
def _updateProgress(self, filename, item, params):
- self.common.log("", 5)
+ self.common.log("", 3)
get = params.get
iget = item.get
queue = False
@@ -635,6 +662,8 @@ class SimpleDownloader():
elif hasattr(self, "queue"):
queue = self.queue
+ self.common.log("eval queue", 2)
+
try:
items = eval(queue)
except:
@@ -660,6 +689,7 @@ class SimpleDownloader():
self.dialog.update(percent=item["percent"], heading=heading,
label=iget("Title"))
else:
self.dialog.update(percent=item["percent"], heading=heading,
label=filename)
+ self.common.log("Done", 3)
#============================= Download Queue
=================================
def _getNextItemFromQueue(self):
@@ -694,7 +724,7 @@ class SimpleDownloader():
items = []
if filename:
queue = self.cache.get("SimpleDownloaderQueue")
- self.common.log("queue loaded : " + repr(queue))
+ self.common.log("queue loaded : " + repr(queue), 3)
if queue:
try:
@@ -714,7 +744,7 @@ class SimpleDownloader():
items.append((filename, params))
self.common.log("Added: " + filename + " to queue - " +
str(len(items)))
else:
- items.insert(1, (filename, params))
+ items.insert(0, (filename, params))
self.common.log("Moved " + filename + " to front of queue.
- " + str(len(items)))
self.cache.set("SimpleDownloaderQueue", repr(items))
@@ -729,7 +759,7 @@ class SimpleDownloader():
items = []
queue = self.cache.get("SimpleDownloaderQueue")
- self.common.log("queue loaded : " + repr(queue))
+ self.common.log("queue loaded : " + repr(queue), 3)
if queue:
try:
@@ -754,7 +784,7 @@ class SimpleDownloader():
items = []
if filename:
queue = self.cache.get("SimpleDownloaderQueue")
- self.common.log("queue loaded : " + repr(queue))
+ self.common.log("queue loaded : " + repr(queue), 3)
if queue:
try:
@@ -762,7 +792,7 @@ class SimpleDownloader():
except:
items = []
- self.common.log("pre items: %s " % repr(items))
+ self.common.log("pre items: %s " % repr(items), 3)
for index, item in enumerate(items):
(item_id, item) = item
if item_id == filename:
@@ -770,7 +800,7 @@ class SimpleDownloader():
del items[index]
items = items[:position] + [(filename, item)] +
items[position:]
break
- self.common.log("post items: %s " % repr(items))
+ self.common.log("post items: %s " % repr(items), 3)
self.cache.set("SimpleDownloaderQueue", repr(items))
diff --git
a/script.module.simple.downloader/resources/language/English/strings.xml
b/script.module.simple.downloader/resources/language/English/strings.xml
index 137efc3..c53681f 100644
--- a/script.module.simple.downloader/resources/language/English/strings.xml
+++ b/script.module.simple.downloader/resources/language/English/strings.xml
@@ -12,8 +12,17 @@
<string id="202">Downloading</string>
<string id="203">Download complete</string>
<string id="204">Download Failed</string>
+ <string id="205">Start Download</string>
+ <string id="206">Delete Download</string>
+ <string id="207">Error</string>
+ <string id="208">Error</string>
<!-- errors -->
<string id="301">Error</string>
<string id="302">vlc/mplayer/rtmpdump binary not found</string>
+
+ <string id="30100">Start Queue</string>
+ <string id="30102">Stop Queue</string>
+ <string id="30200">Settings</string>
+
</strings>
\ No newline at end of file
-----------------------------------------------------------------------
Summary of changes:
script.common.plugin.cache/addon.xml | 2 +-
script.common.plugin.cache/changelog.txt | 3 +-
script.common.plugin.cache/lib/StorageServer.py | 5 +-
script.module.parsedom/addon.xml | 2 +-
script.module.parsedom/changelog.txt | 3 +
script.module.parsedom/lib/CommonFunctions.py | 34 ++++----
script.module.simple.downloader/addon.xml | 6 +-
script.module.simple.downloader/changelog.txt | 6 ++
script.module.simple.downloader/default.py | 71 ++++------------
.../lib/DialogDownloadProgress.py | 1 +
.../lib/SimpleDownloader.py | 90 +++++++++++++-------
.../resources/language/English/strings.xml | 9 ++
12 files changed, 122 insertions(+), 110 deletions(-)
mode change 100755 => 100644 script.common.plugin.cache/default.py
mode change 100755 => 100644 script.common.plugin.cache/lib/StorageServer.py
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons