diff options
Diffstat (limited to 'plugin.video.montreal.greek-tv/resources/lib/cache.py')
-rw-r--r-- | plugin.video.montreal.greek-tv/resources/lib/cache.py | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/plugin.video.montreal.greek-tv/resources/lib/cache.py b/plugin.video.montreal.greek-tv/resources/lib/cache.py new file mode 100644 index 0000000..6c77d5f --- /dev/null +++ b/plugin.video.montreal.greek-tv/resources/lib/cache.py @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- + +''' + Tulip routine libraries, based on lambda's lamlib + Author Twilight0 + + License summary below, for more details please read license.txt file + + 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 2 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 re, hashlib, time + +try: + from sqlite3 import dbapi2 as database +except: + from pysqlite2 import dbapi2 as database + +import control + + +def get(function, timeout, *args, **table): + try: + response = None + + f = repr(function) + f = re.sub('.+\smethod\s|.+function\s|\sat\s.+|\sof\s.+', '', f) + + a = hashlib.md5() + for i in args: a.update(str(i)) + a = str(a.hexdigest()) + except: + pass + + try: + table = table['table'] + except: + table = 'rel_list' + + try: + control.makeFile(control.dataPath) + dbcon = database.connect(control.cacheFile) + dbcur = dbcon.cursor() + dbcur.execute("SELECT * FROM %s WHERE func = '%s' AND args = '%s'" % (table, f, a)) + match = dbcur.fetchone() + + response = eval(match[2].encode('utf-8')) + + t1 = int(match[3]) + t2 = int(time.time()) + update = (abs(t2 - t1) / 3600) >= int(timeout) + if update == False: + return response + except: + pass + + try: + r = function(*args) + if (r == None or r == []) and not response == None: + return response + elif (r == None or r == []): + return r + except: + return + + try: + r = repr(r) + t = int(time.time()) + dbcur.execute("CREATE TABLE IF NOT EXISTS %s (""func TEXT, ""args TEXT, ""response TEXT, ""added TEXT, ""UNIQUE(func, args)"");" % table) + dbcur.execute("DELETE FROM %s WHERE func = '%s' AND args = '%s'" % (table, f, a)) + dbcur.execute("INSERT INTO %s Values (?, ?, ?, ?)" % table, (f, a, r, t)) + dbcon.commit() + except: + pass + + try: + return eval(r.encode('utf-8')) + except: + pass + + +def timeout(function, *args, **table): + try: + response = None + + f = repr(function) + f = re.sub('.+\smethod\s|.+function\s|\sat\s.+|\sof\s.+', '', f) + + a = hashlib.md5() + for i in args: a.update(str(i)) + a = str(a.hexdigest()) + except: + pass + + try: + table = table['table'] + except: + table = 'rel_list' + + try: + control.makeFile(control.dataPath) + dbcon = database.connect(control.cacheFile) + dbcur = dbcon.cursor() + dbcur.execute("SELECT * FROM %s WHERE func = '%s' AND args = '%s'" % (table, f, a)) + match = dbcur.fetchone() + return int(match[3]) + except: + return + + +def clear(table=None): + try: + control.idle() + + if table is None: + table = ['rel_list', 'rel_lib'] + elif not type(table) == list: + table = [table] + + yes = control.yesnoDialog(control.lang(30401).encode('utf-8'), '', '') + if not yes: + return + + dbcon = database.connect(control.cacheFile) + dbcur = dbcon.cursor() + + for t in table: + try: + dbcur.execute("DROP TABLE IF EXISTS %s" % t) + dbcur.execute("VACUUM") + dbcon.commit() + except: + pass + + control.infoDialog(control.lang(30402).encode('utf-8')) + except: + pass + + |