506 Commits

Author SHA1 Message Date
Rob Weber
a9e4e1711b added wiki screenshots 2020-12-03 14:40:59 -06:00
Rob Weber
f9eebf9efa matrix is default branch 2020-12-03 14:07:17 -06:00
Rob Weber
201d04afeb updated version number 2020-11-17 09:54:14 -06:00
Rob Weber
2dabb23c2d Merge branch 'matrix'
# Conflicts:
#	README.md
2020-11-17 09:52:39 -06:00
Rob Weber
2f19ec2b75 added download stats to README.md 2020-06-18 15:37:12 -05:00
Rob Weber
db215873cf updated badge path 2020-06-17 13:51:49 -05:00
Rob Weber
bd963719d4 updated badge path 2020-06-17 13:51:00 -05:00
Rob Weber
18b7f338c7 added attributes file to export-ignore 2020-06-16 15:07:16 -05:00
Rob Weber
92a9245bdc added export ignore items 2020-06-16 15:02:21 -05:00
Rob Weber
568c3758a4 add export-ignore files 2020-06-16 14:54:15 -05:00
robweber
af999f7d04 wrong rep 2020-06-15 20:56:11 -05:00
robweber
1264ab86b2 space 2020-06-15 20:48:15 -05:00
robweber
90c458d4fc updated changelog.md 2020-06-15 20:46:39 -05:00
robweber
0e6f5acfb5 added deploy script using kodi-addon-submitter 2020-06-15 20:44:41 -05:00
Wuff
c9dd381037 Version 1.6.3 - fix validatePath error (issue 166) (#167) 2020-05-20 13:01:43 -05:00
Rob Weber
55b2ac83d4 version bump 2020-04-09 14:37:09 -05:00
Rob Weber
0d14dd17c6 replace png path with jpg #165 2020-04-09 13:53:29 -05:00
Rob Weber
9fa354b467 replace PNG screenshots with JPG #165 2020-04-09 13:50:34 -05:00
Oldřich Jedlička
006485b19e Remove upper-case PNGs (#164)
Signed-off-by: Oldřich Jedlička <oldium.pro@gmail.com>
2020-02-11 15:23:52 -06:00
Rob Weber
3c2f512ecf update changelog 2019-12-31 11:03:18 -06:00
Rob Weber
190b4fd86f one more context lib 2019-12-31 11:03:11 -06:00
Rob Weber
9ecf706d63 use contextlib 2019-12-31 10:49:16 -06:00
Rob Weber
05c53b7ed8 localize advanced editor strings 2019-12-31 10:41:15 -06:00
Rob Weber
8bc73f2832 don't need this file 2019-12-31 10:33:13 -06:00
Rob Weber
edc4a7b20f updated to release version v1.6.1 2019-12-30 10:21:01 -06:00
Rob Weber
90b4aeeebe pep8 fixes 2019-12-30 10:17:58 -06:00
Rob Weber
7ce9123e1f updated changelog 2019-12-30 10:14:35 -06:00
Rob Weber
8bfef6692f Merge branch 'master' into matrix 2019-12-30 10:13:23 -06:00
Rob Weber
e63560f0c4 added a clean path function and applied it to rotate backups 2019-12-30 10:09:01 -06:00
Wuff
51f2ef3973 Fix deleting old backups on remote drives + log error (#163) 2019-12-30 09:59:03 -06:00
Rob Weber
04bac77690 moved scheduler to resources/lib and created non-complex entry point 2019-12-17 15:02:07 -06:00
Rob Weber
b1f6d36d73 updated news and version (beta2) 2019-12-10 15:24:56 -06:00
Rob
5d398836ba Show File Transfer Size (#160)
adds file transfer size to progress bar - closes #157
2019-12-10 15:16:54 -06:00
Rob Weber
23a14d67c4 Merge branch '1.6.0_fixes' into matrix 2019-12-06 13:56:06 -06:00
Rob Weber
0eebe1c5cc was using wrong dropbox version 2019-12-06 13:52:38 -06:00
Rob Weber
4d55385179 these files don't exist anymore 2019-12-06 13:33:31 -06:00
Rob Weber
ac68001aa1 labeled Dropbox dep version 2019-12-06 13:31:28 -06:00
Rob Weber
233dff0e15 removed references to dropbox code removal 2019-12-06 13:30:54 -06:00
Rob Weber
6f69f80742 use dropbox library module instead of bundling code 2019-12-06 13:30:00 -06:00
Rob Weber
47fcb119f3 pull build from matrix branch 2019-12-04 11:53:51 -06:00
Rob Weber
f9f49e3fe6 Merge branch 'master' into matrix 2019-12-04 11:53:12 -06:00
Rob Weber
7c23c17e33 Merge branch '1.6.0_fixes' 2019-12-04 11:49:35 -06:00
Rob Weber
710bcd08f8 pep8 fixes 2019-12-04 11:38:25 -06:00
Rob Weber
5e2d099448 fixes per enen92 2019-12-04 11:31:00 -06:00
Rob Weber
8d66fa6a9f part of #159 - this will get rid of the most significant logging and keep the essentials 2019-11-27 14:24:35 -06:00
Rob Weber
5ee610a586 update getSetting calls to get ints and bools where needed 2019-11-27 14:19:41 -06:00
Rob Weber
8c4465f552 add methods for getting bools and int values directly 2019-11-27 14:19:25 -06:00
Rob Weber
3849a902ea working 16.1 beta 2019-11-27 14:05:08 -06:00
Rob Weber
4492ab593e update news 2019-11-27 13:14:42 -06:00
Rob Weber
16e13c7d80 version bump - 1.6.0 2019-11-26 13:14:57 -06:00
Rob Weber
0cc0684263 Use the dropbox module instead of bundling code - module still needs to be updated in Kodi repo 2019-11-26 12:58:35 -06:00
Rob Weber
dd5b99c978 use setArt(), setting icon in constructor is deprecated 2019-11-26 11:31:40 -06:00
Rob Weber
6c99667afa replace relativedelta.py with one from dateutil package 2019-11-26 11:13:25 -06:00
Rob Weber
6514b3db02 added pep8 badge 2019-11-26 11:07:11 -06:00
Rob Weber
88341d9e1f pep8 - round 3 2019-11-26 10:49:17 -06:00
Rob Weber
95649c2b3f pep8 styling round 2 2019-11-26 10:43:38 -06:00
Rob Weber
3e9de429dd ignore bare except error 2019-11-26 10:31:48 -06:00
Rob Weber
db18c6a7b4 pep8 style fixes - round 1 2019-11-25 15:56:59 -06:00
Rob Weber
35e05acaf2 pep8 multi line imports 2019-11-25 15:48:42 -06:00
Rob Weber
92ec8bf25c pep8 commas 2019-11-25 15:45:41 -06:00
Rob Weber
0c79aef4e7 pep8 spaces 2019-11-25 15:33:34 -06:00
Rob Weber
fea7dca500 don't test relativedelta.py 2019-11-25 15:20:36 -06:00
Rob Weber
f7665c8ddd pep8 comments 2019-11-25 15:19:57 -06:00
Rob Weber
bbbfc3dd84 exclude dropbox 2019-11-22 15:21:20 -06:00
Rob Weber
0b03914175 use matrix as target 2019-11-22 15:18:36 -06:00
Rob Weber
51553f7720 pull from the right branch 2019-11-22 15:14:59 -06:00
Rob Weber
294683fb43 updated readme and changelog 2019-11-22 15:14:12 -06:00
Rob Weber
b74c1af704 target is Kodi 19 - matrix 2019-11-22 15:14:05 -06:00
Rob Weber
edd4002d3f fix dropbox import 2019-11-22 15:01:56 -06:00
Rob Weber
3aa912ca4c remove kodi-six, use python3 kodi libs 2019-11-22 14:53:20 -06:00
Rob Weber
5c3e1712f6 need to import local file 2019-11-22 14:53:07 -06:00
Rob Weber
82bdc955b5 marked dropbox specific imports 2019-11-22 14:52:51 -06:00
Rob Weber
4f1e5060e9 updated changelog 2019-10-11 13:17:30 -05:00
Rob Weber
7d895a6028 for python 3 need version 9+ of Dropbox 2019-10-11 13:16:38 -05:00
Rob Weber
7ede17fbbd pointing at wrong branch 2019-10-10 15:32:23 -05:00
Rob Weber
d32620ea18 added flake8 testing for travis-ci 2019-10-10 14:59:13 -05:00
Rob Weber
def99767e8 use leia branch here 2019-10-10 11:38:19 -05:00
Rob Weber
c7a9a8512d Merge branch 'master' into leia
# Conflicts:
#	README.md
2019-10-10 11:37:57 -05:00
Rob Weber
332afffc5b updated badge url 2019-10-10 11:35:42 -05:00
Rob Weber
42d0f1b451 added some shield urls 2019-10-09 14:49:53 -05:00
Rob Weber
8d07310980 updated changelog 2019-09-30 14:37:03 -05:00
Rob Weber
048d016e0e googleDrive removed, use isdigit() on object directly 2019-09-30 14:36:54 -05:00
Rob Weber
c50c5245fc fix dropbox import 2019-09-30 14:36:33 -05:00
Rob Weber
e91037208b Merge branch 'master' into leia 2019-09-30 14:23:19 -05:00
Rob Weber
ff2ca53a22 compare url was wrong 2019-09-30 14:12:17 -05:00
Rob Weber
1a27b279b0 version bump - 1.5.2 2019-09-30 14:09:15 -05:00
Rob Weber
6dfa4a5520 minor code fixes based on travis-ci output 2019-09-30 14:06:50 -05:00
Rob
a7b9aeb9c1 Replace Dropbox files with Kodi Module (#152)
* remove dropbox lib locally and use script.module.dropbox
closes #151
2019-09-30 13:55:40 -05:00
Rob Weber
7226178bfb updated changelog 2019-09-30 09:45:09 -05:00
Rob Weber
f5bd7130e2 don't need this import anymore 2019-09-30 09:45:03 -05:00
Rob Weber
ae76d24e86 use linux path seperator (/), was causing remote file system issues using os.path 2019-09-30 09:44:18 -05:00
Rob Weber
4d56331d8f fix for getting val file from non-zipped remote system 2019-09-30 09:33:06 -05:00
Rob Weber
45cf9a367d don't need this twice 2019-09-20 08:39:21 -05:00
Rob Weber
d8ceecb168 added some dates 2019-09-20 08:37:53 -05:00
Rob Weber
a2d7e8613a updated changelog to keepachangelog format 2019-09-20 08:31:27 -05:00
Rob Weber
c0b0fa82cb somehow screenshots lost 2019-09-11 15:31:04 -05:00
Rob Weber
6ac1d3559b updated build url 2019-09-11 15:29:30 -05:00
Rob Weber
d93589ecad Merge branch 'master' into leia 2019-09-11 10:16:14 -05:00
Rob Weber
b21c11de26 Merge branch 'master' into krypton 2019-09-11 10:05:16 -05:00
Rob Weber
a4bb3f3feb completely changed this class, default no longer matters. Just restore settings that differ from current, ignore default flags closes #154 2019-09-11 10:02:45 -05:00
Rob Weber
1f6324b2d5 use path separators for os 2019-09-11 08:58:21 -05:00
Rob Weber
12b25f7cea version bump 2019-09-10 15:38:34 -05:00
Rob
5d9d8a1820 Guisettings fix (#156)
fix guisettings restore issues - thanks Bluerayx
2019-09-10 15:36:52 -05:00
Rob Weber
2fdf8d37fe Merge branch 'master' into krypton 2019-09-10 15:17:23 -05:00
Rob Weber
aa94060cfe removed Google Drive support - too many python2/3 dependency issues 2019-09-05 14:30:06 -05:00
Rob Weber
b9e0424ea5 dropbox change per https://www.dropboxforum.com/t5/API-Support-Feedback/Upload-Error-with-v2-migration-from-v1/td-p/244561 2019-08-30 15:26:52 -05:00
Rob Weber
495ecb1048 fixes for unicode strs 2019-08-28 15:37:56 -05:00
Rob Weber
a1c0c0bbfe don't need to decode string 2019-08-28 14:54:31 -05:00
Rob Weber
9f570233d9 update get_params to remove urlparse 2019-08-28 14:50:33 -05:00
Rob Weber
b38aff2a8e move pydrive to it's own addon 2019-08-28 14:48:41 -05:00
Rob Weber
456ebe9374 updated Dropbox lib 2019-08-28 14:48:24 -05:00
Rob Weber
30f8b93629 update get_params, remove urlparse dep 2019-08-27 15:04:30 -05:00
Rob Weber
94f872fb81 use future for urllib2 2019-08-27 15:03:43 -05:00
Rob Weber
8f8402ae8a use kodi-six for kodi imports 2019-08-27 15:01:24 -05:00
Rob Weber
db93e40f59 don't need to encode here 2019-08-27 14:56:54 -05:00
Rob Weber
72c77fb33a fixed some imports 2019-08-27 14:55:22 -05:00
Rob Weber
1f0e262c5b leia removed this attribute 2019-08-27 14:47:18 -05:00
Rob Weber
b75487bb2a change Kodi version to Leia 2019-08-27 14:44:17 -05:00
Rob Weber
b34e538d6b probot not adhering to onlyLabels at the moment 2019-08-27 10:41:19 -05:00
Rob Weber
b5a7aada4c added probot to help with stale issues 2019-08-27 09:53:25 -05:00
Rob Weber
1a9c43b998 Merge branch 'master' of https://github.com/robweber/xbmcbackup 2019-08-27 09:42:23 -05:00
Rob Weber
b7f4b14fe2 delmit with comma, not ampersand (xml formatting) 2019-08-27 09:42:07 -05:00
Rob Weber
787b054bba Merge branch 'master' of https://github.com/robweber/xbmcbackup 2019-08-27 09:08:31 -05:00
Rob Weber
a7be48a341 forgot to add screenshots back in 2019-08-27 09:08:05 -05:00
Rob Weber
2fe76b7b52 Merge branch 'master' of https://github.com/robweber/xbmcbackup 2019-08-27 09:06:02 -05:00
Rob Weber
3aed105fd7 lowercase filename ext 2019-08-27 09:05:23 -05:00
Rob Weber
c9b4554eac allow folder/id mistmatch for this addon 2019-08-27 09:02:21 -05:00
Rob Weber
e736b964a5 added build status badge 2019-08-27 09:01:19 -05:00
Rob Weber
4c5f6774df added travis testing script (kodi addon checker) 2019-08-27 08:45:45 -05:00
Rob Weber
1f2e315208 updated screenshots 2019-08-27 08:30:26 -05:00
Rob Weber
138f910d07 updated breaking change dialog (onetime) 2019-08-26 15:43:56 -05:00
Rob Weber
1d3b2f58ab updated version - out of beta 2019-08-26 15:43:44 -05:00
Rob
865416977d Update for Leia (#117)
* updated addon.xml for Krypton

* default log level is always debug now

* added screenshots per krypton format

* started new way of defining backup directories

* reconfigured simple backup process

* added an advanced backup editor and combined settings.xml scripts into a launcher

* added strings for advanced editor

* there was a function to do this

* match excluded with regex

* updated def for the addons set

* directory has to end in slash to use exists()

* added a backup set chooser on restore

* added string for restore browser

* utilize details to show root folder and icons

* save non translated paths, better cross platform support

* revert dropbox python 2.6 changes

* start of #132

* can't have duplicate ids

* updated strings

* closes #132

* added a disclaimer for breaking changes

* split backup and restore into separate functions

* updated scripting to pass in list of sets to restore

* beta version

* added 2 min delay in startup - part of #147

* forgot to remove debug message

* change to wait for abort in case someone tries to close Kodi

* add retroplayer game saves to default file list

* display restore points with most recent on top

* remove length check, breaking change with this version means old archives are no longer compatible

* format restore list according to regional settings

* this function isn't used anymore, legacy of old file manager

* use images folder as default

* added note about compatibility

* added utils function for regional date, use for scheduler notifications as well

* add/remove include and exclude directories to a set

* paths should have / at the end

* show path relative to root

* if in advanced mode allow jumping to editor from launch screen

* check that path is within root folder of set

* cannot have duplicate set names or rules regarding folders within a set

* put strings in correct lang file

* beta version bump

* accidentally deleted string id

* change exclude criteria. Regex was not matching in complex cases

* make sure the dest folder (backup set root) exists before writing to it

* modify select display to show recursive value for included folders

* use a context menu here

* added ability to toggle recursion of sub folders

* beta 3

* added support doc

* wrong branch

* don't need this import anymore

* don't need these imports

* part of #133
2019-08-26 15:40:15 -05:00
Rob Weber
68093b2130 part of #133 2019-08-26 15:36:53 -05:00
Rob Weber
701a1831bf don't need these imports 2019-08-26 15:18:38 -05:00
Rob Weber
493e0d3a2e don't need this import anymore 2019-08-26 15:13:26 -05:00
Rob Weber
d87e209226 Merge branch 'master' into krypton 2019-08-26 14:55:52 -05:00
Rob
d703374792 Update issue templates 2019-08-26 14:46:28 -05:00
Rob Weber
c057f66a1e add support file 2019-08-26 14:06:16 -05:00
Rob Weber
9960e2fc6b wrong branch 2019-08-26 14:05:43 -05:00
Rob Weber
6aae9d9247 added support doc 2019-08-26 14:04:10 -05:00
Rob Weber
004b8dae58 beta 3 2019-08-23 14:43:00 -05:00
Rob Weber
6b934ed30c added ability to toggle recursion of sub folders 2019-08-23 14:30:11 -05:00
Rob Weber
e950400222 use a context menu here 2019-08-23 14:19:49 -05:00
Rob Weber
cb2bb8a237 modify select display to show recursive value for included folders 2019-08-23 14:16:58 -05:00
Rob Weber
eb765c974b make sure the dest folder (backup set root) exists before writing to it 2019-08-23 13:40:40 -05:00
Rob Weber
d18ed2960e change exclude criteria. Regex was not matching in complex cases 2019-08-22 14:42:41 -05:00
Rob Weber
9f1755686c accidentally deleted string id 2019-08-22 13:45:40 -05:00
Rob Weber
534b3b108f beta version bump 2019-08-22 13:30:59 -05:00
Rob Weber
4a8b891129 put strings in correct lang file 2019-08-22 13:30:02 -05:00
Rob Weber
49af21a67e cannot have duplicate set names or rules regarding folders within a set 2019-08-22 13:23:41 -05:00
Rob Weber
3ee2cb0414 check that path is within root folder of set 2019-08-22 13:07:03 -05:00
Rob Weber
061fd3efed if in advanced mode allow jumping to editor from launch screen 2019-08-22 13:01:02 -05:00
Rob Weber
76c2fdc0c2 show path relative to root 2019-08-22 13:00:45 -05:00
Rob Weber
2c999b46b9 paths should have / at the end 2019-08-22 13:00:35 -05:00
Rob Weber
4d891ab551 add/remove include and exclude directories to a set 2019-08-22 12:38:17 -05:00
Rob Weber
6c33e7c9ba added utils function for regional date, use for scheduler notifications as well 2019-08-20 11:50:46 -05:00
Rob Weber
f0d8e297a9 added note about compatibility 2019-08-20 11:37:54 -05:00
Rob Weber
04ec3bd8a8 use images folder as default 2019-08-20 11:32:07 -05:00
Rob Weber
65ea3c98c4 Merge branch 'master' into krypton
# Conflicts:
#	addon.xml
#	icon.png
#	resources/images/icon.png
#	resources/media/icon.png
#	scheduler.py
2019-08-20 11:29:14 -05:00
Rob Weber
ee2f38e865 missed a print statement 2019-08-19 15:34:32 -05:00
Rob Weber
4513eb67f9 fixed error handling for python 2.7+ 2019-08-19 15:23:48 -05:00
Rob Weber
d0b1d6bb34 fix language codes 2019-08-19 14:50:52 -05:00
Rob Weber
34529471a7 use monitor.abortRequested() 2019-08-19 14:26:15 -05:00
Rob Weber
c44d71b8b4 updated path 2019-08-19 14:21:40 -05:00
Rob Weber
bc91dfe2a2 updated croniter to match libraryautoupdate (newest) 2019-08-19 14:20:37 -05:00
Rob Weber
27fbadebda fixed addon.xml per guidlines on wiki 2019-08-19 14:18:17 -05:00
Rob Weber
4108f333e2 this function isn't used anymore, legacy of old file manager 2019-08-19 13:07:40 -05:00
Rob Weber
913090637c format restore list according to regional settings 2019-08-19 13:05:12 -05:00
Rob Weber
7139b920ad remove length check, breaking change with this version means old archives are no longer compatible 2019-08-19 12:48:16 -05:00
Rob Weber
48d07c24a0 display restore points with most recent on top 2019-08-19 11:52:21 -05:00
Rob Weber
90e4b0c1f4 add retroplayer game saves to default file list 2019-08-19 11:41:08 -05:00
Rob Weber
c9415cbf59 change to wait for abort in case someone tries to close Kodi 2019-08-09 10:01:53 -05:00
Rob Weber
32d2fde51c added timeout on startup to allow time to sync 2019-08-09 09:59:57 -05:00
robweber
181654b414 forgot to remove debug message 2019-08-03 10:31:18 -05:00
robweber
71b048418e added 2 min delay in startup - part of #147 2019-08-03 10:29:28 -05:00
Rob Weber
1896a684b0 beta version 2019-07-30 13:51:17 -05:00
Rob Weber
545bd93e8c updated scripting to pass in list of sets to restore 2019-07-30 13:26:55 -05:00
robweber
83a01a48bf split backup and restore into separate functions 2019-07-29 16:58:00 -05:00
Rob Weber
dcc8482d73 added a disclaimer for breaking changes 2019-02-04 13:23:12 -06:00
Rob Weber
85306f9469 closes #132 2019-02-04 11:57:36 -06:00
Rob Weber
c0d3b01ade updated strings 2019-02-04 11:57:17 -06:00
Rob Weber
5c6a8ce91a can't have duplicate ids 2019-02-04 11:40:42 -06:00
Rob Weber
c8f148cd1a Merge branch 'master' into krypton 2019-02-04 11:33:35 -06:00
Rob Weber
2e7080fef8 add no media file, part of #135 2018-02-12 08:46:54 -06:00
Rob Weber
e148bd4894 part of #134 2018-01-23 08:25:58 -06:00
Rob Weber
b6e57b04b1 start of #132 2018-01-23 08:17:02 -06:00
Rob Weber
8ac5da3b66 version bump 2017-12-29 13:27:17 -06:00
Rob Weber
adbf225ea2 revert dropbox python 2.6 changes 2017-12-29 13:25:40 -06:00
Rob Weber
d9d6c1ed42 Merge branch 'master' into krypton 2017-12-29 13:24:45 -06:00
Rob
55d6ca7464 Dropbox sessions (#130)
added file chunk support for files > 50MB, closes #129
2017-12-29 13:22:49 -06:00
Rob Weber
9490f7565c missed log statement in testing 2017-12-27 10:06:07 -06:00
Rob Weber
6a8573a0c8 version bump, closes #126 2017-12-27 09:57:47 -06:00
Rob
4b8b847544 Dropbox 2.6 fixes (#127)
Dropbox lib fixes for python 2.6
2017-12-27 09:55:20 -06:00
Rob Weber
f5f7bcfcb5 save non translated paths, better cross platform support 2017-12-08 11:36:51 -06:00
Rob Weber
4608f04d96 utilize details to show root folder and icons 2017-12-08 11:16:59 -06:00
Rob Weber
e1c8b5a61c Merge branch 'master' into krypton 2017-12-08 10:53:38 -06:00
Rob Weber
e02245e422 dirs can't end in slash for dropbox "exists" method part of #114 2017-12-08 08:46:12 -06:00
Rob Weber
ada1efb165 Merge branch 'master' into krypton 2017-12-07 08:34:37 -06:00
Rob Weber
588132c8dc nr should initialize before if statement, fixes #124 2017-12-07 08:28:10 -06:00
Rob Weber
5a43b5e340 added string for restore browser 2017-12-06 09:26:39 -06:00
Rob Weber
33bc84c288 added a backup set chooser on restore 2017-12-06 09:23:32 -06:00
Rob Weber
8c61616d3c directory has to end in slash to use exists() 2017-12-06 09:22:27 -06:00
Rob Weber
622939901e updated def for the addons set 2017-12-06 09:11:01 -06:00
Rob Weber
756f50bba1 match excluded with regex 2017-12-05 15:40:09 -06:00
Rob Weber
5fefbd286d there was a function to do this 2017-12-05 15:05:14 -06:00
Rob Weber
5779784e0a added strings for advanced editor 2017-12-05 15:04:20 -06:00
Rob Weber
24f570e888 added an advanced backup editor and combined settings.xml scripts into a launcher 2017-12-05 14:20:32 -06:00
Rob Weber
489dcd317f reconfigured simple backup process 2017-12-05 09:35:43 -06:00
Rob Weber
216e2f4561 Merge branch 'master' into krypton 2017-12-04 15:36:55 -06:00
Rob Weber
f31c2f7b4d imports missed during dropbox merge 2017-12-04 15:30:07 -06:00
Rob Weber
c3fe86293d Merge branch 'master' into krypton 2017-12-04 15:16:41 -06:00
robweber
92f84b07db language folder country code fix 2017-12-03 17:40:11 -06:00
Rob
af1ae52e69 Merge Dropbox V2 (#123)
* pulled all dropbox v1 code, added v2. fixed authorization flow
2017-12-03 17:32:21 -06:00
Rob Weber
87b1a832c5 updated for google oauth and googleapi version bumps 2017-11-22 15:38:06 -06:00
Rob Weber
20ee7a92ad started new way of defining backup directories 2017-11-08 15:57:44 -06:00
Rob Weber
64daaa13e8 Merge branch 'master' into krypton 2017-11-08 13:50:17 -06:00
Rob Weber
009d67d65b updated oauth2client version 2017-11-08 13:49:45 -06:00
Rob Weber
dda08d04a3 added screenshots per krypton format 2017-11-08 13:47:46 -06:00
Rob Weber
469b5ff340 default log level is always debug now 2017-11-08 13:32:07 -06:00
Rob Weber
ff2f764b2f Merge branch 'master' into krypton 2017-11-08 13:30:39 -06:00
Rob Weber
30ddff0bf2 updated README.md with links to wiki 2017-11-08 13:02:53 -06:00
Rob Weber
ec0c52ee6e converted to po files. closes #104 2017-11-08 08:54:30 -06:00
Rob Weber
4647bdec14 updated changelog.txt 2017-11-08 08:34:41 -06:00
Rob Weber
fc2c4b341a indent error - always returned false 2017-11-07 15:19:46 -06:00
Rob
71e8e44e27 Merge pull request #116 from robweber/miss_scheduled
Miss scheduled
2017-11-07 15:11:23 -06:00
Rob Weber
2af3070528 allow user to turn on/off 2017-11-07 15:10:21 -06:00
Rob Weber
7e01f51e86 use xbmcvfs for file reads/writes 2017-11-07 15:03:50 -06:00
Rob Weber
af93f1916b copy/paste from the original pull request 2017-11-07 14:35:36 -06:00
Rob Weber
4689ce9b82 closes #113 2017-11-07 14:23:23 -06:00
Rob Weber
db4b404a88 part of #110 2017-11-07 14:19:27 -06:00
Rob Weber
2927e31c59 updated FAQ in README.md 2017-04-06 12:50:18 -05:00
Rob Weber
7d51ee05bc updated addon.xml for Krypton 2017-02-16 15:11:22 -06:00
Rob Weber
2c634f9250 exclude packages dir by default, not needed closes #102 2017-02-10 15:19:22 -06:00
Rob Weber
3fcc15ebe5 updated changelog.txt 2017-01-31 15:02:39 -06:00
Rob Weber
94f0887393 fixes #99 2017-01-31 15:02:03 -06:00
Rob Weber
87c638a0d6 updated README.md 2017-01-31 09:33:16 -06:00
Rob Weber
fcafc77180 debug is default anyway 2017-01-31 09:15:48 -06:00
Rob Weber
72e9950af7 updated changelog.txt 2017-01-31 09:13:55 -06:00
Rob Weber
c46f684ea5 change this as settings are saved until close, call specific type with arg 2017-01-31 09:07:49 -06:00
Rob Weber
b1d16df817 put all strings in strings.xml 2017-01-31 08:16:54 -06:00
Rob Weber
49f6ae5270 moved cloud creation code to an authorizer class
added authorize as part of settings
2017-01-31 08:08:00 -06:00
Rob Weber
2e7552896a split general and remote directory areas 2017-01-30 12:59:03 -06:00
Rob
d3ed0bc63c Merge pull request #98 from robweber/tinyurl
Use TinyURL for OAuth
2017-01-30 12:54:57 -06:00
Rob Weber
8edaae803b use tinyurl for oauth urls 2017-01-30 12:51:50 -06:00
Rob Weber
d846cffd80 add tinyurl library and 2017-01-30 12:51:36 -06:00
Rob
439c8aae28 Merge pull request #97 from robweber/settings_utf_error
Encode Settings with UTF
2017-01-30 09:22:29 -06:00
Rob Weber
ca454d5eee version bump 2017-01-23 11:45:34 -06:00
Rob
17aeb98bf2 Merge pull request #96 from robweber/dropbox_2.6
Koying's patch for #94
2017-01-23 11:44:02 -06:00
Rob Weber
8a6518fd2d encode setting value as utf string 2017-01-23 11:34:35 -06:00
Rob Weber
b7c24896c9 trying koying's patch for #94 2017-01-23 09:57:01 -06:00
Rob
405783cde0 Update readme (#93)
convert readme to md type of file
2017-01-20 09:25:52 -06:00
Rob Weber
9f949e6320 restrict to jarvis and above 2017-01-13 11:36:42 -06:00
Rob Weber
cff2ea86b7 fixes #90 2017-01-13 11:28:48 -06:00
Rob Weber
e162ff3c19 version bump 2017-01-05 10:39:02 -06:00
Rob Weber
622039febb updated dropbox v1 api 2017-01-05 10:37:41 -06:00
Rob Weber
d0028d440c wonder how long this has been there, fixes #82 2017-01-05 09:10:11 -06:00
Rob Weber
210a907f8a updated google client version 2015-11-16 09:26:48 -06:00
Rob Weber
0926c5d3a1 version bump 2015-06-26 15:33:20 -05:00
Rob Weber
3e38f992b5 added extractor progress bar and additional progress info 2015-06-26 15:32:22 -05:00
Rob Weber
032a772a81 try tor emove error in pydrive 2015-06-26 14:46:18 -05:00
Rob Weber
97a977c721 minor fixes 2015-06-19 14:30:45 -05:00
Rob Weber
9add0b2981 Merge branch 'pydrive_fix' 2015-06-19 13:44:37 -05:00
Rob Weber
7ed70ca9cb delete the validation file after it was copied 2015-06-19 12:49:28 -05:00
Rob Weber
2a5accfed1 attempted fix for wrong args error 2015-05-26 08:43:21 -05:00
Rob Weber
faccf424b7 updated changelog.txt 2015-05-08 19:47:22 -05:00
robweber
2ad895626a Merge pull request #72 from brokeh/master
Fix duplicate files in zip backups
2015-05-08 19:45:59 -05:00
Rob Weber
98a369db6f closes #71 2015-05-08 19:40:28 -05:00
Rob Weber
09b6010738 added google drive support 2015-05-08 19:26:52 -05:00
Andrew Brock
6786a233e0 Fix zip files getting an extra copy of each file on each run of the scheduler 2015-05-06 21:36:50 +10:00
robweber
7d2c8c54c6 Merge pull request #67 from robweber/helix_google_drive
Helix google drive
2015-04-27 15:31:30 -05:00
Rob Weber
7448b6fea1 use most current versions of these 2015-04-27 15:30:11 -05:00
Rob Weber
99e19b8fd5 use this more restrictive scope 2015-04-27 15:21:12 -05:00
Rob Weber
1d7ca0afcf these appear to do nothing, deps are needed 2015-04-24 10:01:30 -05:00
Rob Weber
1eb84c6ecf added google drive string back in 2015-04-24 09:29:26 -05:00
Rob Weber
f0cce73851 Merge branch 'master' into helix_google_drive
Conflicts:
	resources/language/English/strings.xml
2015-04-24 09:28:05 -05:00
Rob Weber
776c3872ae version bump 2015-04-24 09:24:03 -05:00
Rob Weber
02e3a73623 make compression setting compatible with python 2.6 and above 2015-04-24 09:23:56 -05:00
Rob Weber
eaf5f12245 version bump 2015-03-26 10:44:36 -05:00
Rob Weber
49f6b176e8 exit if we can't delete the old archive 2015-03-26 10:38:51 -05:00
Rob Weber
5050af931c updated readme 2015-02-13 09:50:16 -06:00
Rob Weber
5c40b0edc4 mixed up string ids 2015-02-13 09:50:07 -06:00
Rob Weber
044cdc4bdc added google drive to removal list 2015-02-13 09:44:50 -06:00
Rob Weber
9d7076da0c Merge branch 'master' into helix_google_drive
Conflicts:
	addon.xml
	resources/language/English/strings.xml
	resources/settings.xml
2015-02-13 09:42:26 -06:00
Rob Weber
d62f829421 version bump 2015-02-13 09:33:23 -06:00
Rob Weber
6de7ccaddf closes #63 2015-02-13 09:28:55 -06:00
Rob Weber
65d10e22d9 fixed xbmc.python import 2015-01-06 15:28:50 -06:00
Rob Weber
f887df0197 folder should be Kodi Backup 2014-11-21 14:17:48 -06:00
Rob Weber
e395c60293 removed xbmc reference 2014-11-21 13:48:11 -06:00
Rob Weber
16f4d4073a weird space we don't need 2014-11-21 13:42:39 -06:00
Rob Weber
fec65afc8f Merge branch 'google_drive' into helix_google_drive
Conflicts:
	resources/lib/backup.py
2014-11-21 13:42:12 -06:00
Rob Weber
ee5dfed50b changed helix version number 2014-11-21 13:30:53 -06:00
Rob Weber
7730c727e5 fixed type in dropbox rmfile 2014-11-21 13:30:22 -06:00
Rob Weber
d9e31e32ad reworked strings again, insert "mode" into gui 2014-11-21 13:25:19 -06:00
Rob Weber
138047bd32 Kodi requires slash on directory "exists" 2014-11-21 10:44:53 -06:00
Rob Weber
2ac05ab042 make this text more specific 2014-11-21 10:44:42 -06:00
Rob Weber
b91591ec05 changed XBMC to Kodi references 2014-11-21 10:38:44 -06:00
Rob Weber
e803573340 dropbox unicode error 2014-11-10 12:40:29 -06:00
Rob Weber
687e830bcd version bump 2014-11-10 12:34:30 -06:00
Rob Weber
c578fe15d8 create a .restored version of guisettings 2014-11-10 12:33:55 -06:00
Rob Weber
d68679f534 updated dependencies 2014-11-05 09:48:59 -06:00
Rob Weber
744ba77251 updated for new file write checks 2014-11-05 08:47:47 -06:00
Rob Weber
fae5a052c7 string id changed 2014-11-05 08:47:30 -06:00
Rob Weber
8473542aaf Merge branch 'master' into google_drive
Conflicts:
	resources/language/English/strings.xml
	resources/lib/backup.py
2014-11-05 08:40:07 -06:00
robweber
72b2abfe8d Merge pull request #58 from robweber/gui_settings
Add limited system settings restore
2014-10-31 11:48:09 -05:00
Rob Weber
d6d7221551 updated readme,changelog and version info 2014-10-31 11:47:14 -05:00
Rob Weber
0b6a3ae506 restore xbmc allowed settings via json 2014-10-31 11:40:47 -05:00
Rob Weber
2fc26b6e8c show notification if files failed to copy 2014-10-31 09:56:02 -05:00
Rob Weber
f41f37782d version bump 2014-10-31 09:51:44 -05:00
Rob Weber
9e5873fcb7 check if destination is writeable 2014-10-31 09:50:37 -05:00
robweber
b0ecaa8416 Merge pull request #57 from robweber/master
Update from Master
2014-10-24 15:27:27 -05:00
Rob Weber
d335634618 openelec instructions invalid 2014-10-23 09:45:38 -05:00
Rob Weber
355135853b version bump 2014-10-23 09:42:35 -05:00
Rob Weber
f8c00b473f added userdata/library to config path 2014-10-23 09:41:10 -05:00
Rob Weber
cdf67dbd0c spelling 2014-10-13 14:35:21 -05:00
Rob Weber
69afda758b updated readme for google drive 2014-10-13 14:33:47 -05:00
Rob Weber
64ae75252f some spacing 2014-10-10 08:50:29 -05:00
Rob Weber
9246c9b586 vfs should return encoded dirs/files 2014-10-10 08:49:21 -05:00
Rob Weber
e90c8e7803 slight changes so mkdir works 2014-10-09 15:19:24 -05:00
Rob Weber
cf40edad79 use 'xbmc backup' as root directory 2014-10-09 14:42:59 -05:00
Rob Weber
e316e82013 create google file system 2014-10-09 14:40:05 -05:00
Rob Weber
9c73b5b0b8 added google drive to settings 2014-10-09 14:34:33 -05:00
Rob Weber
06fbef26db depends on googleapi 2014-10-09 14:34:26 -05:00
Rob Weber
74cb8c2b28 added google drive vfs 2014-10-09 14:30:39 -05:00
Rob Weber
c36df5ade9 pydrive license 2014-10-09 11:32:15 -05:00
Rob Weber
0df7364bea added pydrive files 2014-10-09 11:31:38 -05:00
Rob Weber
b593a55120 update to ignore file 2014-10-09 11:31:26 -05:00
Rob Weber
3e32882afc shouldn't always be logging this 2014-10-08 15:08:35 -05:00
Rob Weber
4d109d138f version bump 2014-10-08 13:02:39 -05:00
Rob Weber
08be62b4ec typo 2014-10-08 13:01:44 -05:00
Rob Weber
7bab6a9ada version bump 2014-10-07 11:22:12 -05:00
Rob Weber
f0a6b3351a missed a translate path 2014-10-07 11:21:47 -05:00
Rob Weber
64d788e9f7 add full path since it will be trimmed later 2014-10-06 15:55:57 -05:00
Rob Weber
62104184de changelog update 2014-10-05 14:20:29 -05:00
Rob Weber
91af11c9f7 need to expand out home path 2014-10-05 14:20:23 -05:00
Rob Weber
d9ff17eeec version bump 2014-10-05 14:06:40 -05:00
Rob Weber
53ddc92325 use zip64 2014-10-05 14:06:32 -05:00
Rob Weber
250a5021e0 closes #55 2014-08-08 10:39:03 -05:00
Rob Weber
eb2f5dce74 use "special://" as root and translate before writes 2014-08-08 10:37:16 -05:00
Rob Weber
b14fda20fb write the file based on the true source xbmcvfs.File 2014-08-08 10:26:39 -05:00
Rob Weber
38cc67a54d don't need to encode file path, just the name 2014-08-04 20:14:49 -05:00
Rob Weber
d69a1b2d27 delete old file, if it exists 2014-08-04 19:58:56 -05:00
Rob Weber
d7a0e622be try and encode filenames before writing to zip 2014-08-04 15:40:14 -05:00
Rob Weber
a1c91ef51c updated strings for zip notifications 2014-08-01 14:36:10 -05:00
Rob Weber
45b6cea057 best test we can do for zip file without looking in them 2014-08-01 14:32:29 -05:00
robweber
80f4e6bdfb Merge pull request #54 from robweber/zip_files
Zip files
2014-08-01 14:25:33 -05:00
Rob Weber
f249ea1583 cosmetics 2014-08-01 14:15:27 -05:00
Rob Weber
9945dc628e don't write to filesystem, use addFile 2014-08-01 14:14:40 -05:00
Rob Weber
24e1311db5 version bump 2014-08-01 14:09:37 -05:00
Rob Weber
49783f712a updated readme 2014-08-01 14:06:55 -05:00
Rob Weber
1255283f4d should clean up zip resources after extract 2014-08-01 14:03:03 -05:00
Rob Weber
b3bbdd6911 need to reset vfs to default root dirs before copying zip 2014-08-01 13:54:22 -05:00
Rob Weber
5dfa9d9b76 old logging and misssed name 2014-08-01 13:14:47 -05:00
Rob Weber
545843e949 need to treat backup zips as files 2014-08-01 13:12:43 -05:00
Rob Weber
647bd8811b don't need these checks anymore 2014-08-01 13:06:35 -05:00
Rob Weber
e6215dde51 read/write zip to temp directory 2014-08-01 13:05:58 -05:00
Rob Weber
9a89066e66 can restore full file tree 2014-08-01 12:57:55 -05:00
Rob Weber
c28f9fd26b will copy zip file from remote to dest 2014-08-01 12:37:57 -05:00
Rob Weber
933fdbdf09 copy zip file and open in write mode 2014-07-31 17:29:59 -05:00
Rob Weber
c49aebeba1 list zip files for restore 2014-07-31 16:02:53 -05:00
Rob Weber
525dd8ff86 delete temp zip file when done 2014-07-31 15:20:22 -05:00
Rob Weber
19fcb8bd46 created zip vfs, will create and copy directories to remote share 2014-07-30 15:16:58 -05:00
Rob Weber
24385a2c68 don't write to remote directly, use file manager 2014-07-30 13:41:54 -05:00
Rob Weber
6dc23de55b updated language files 2014-07-29 09:11:37 -05:00
Rob Weber
eeb25a4c58 version bump 2014-07-29 08:45:13 -05:00
Rob Weber
2365649f86 fixes #53 2014-07-29 08:43:34 -05:00
Rob Weber
097238cf7b version bump 2014-06-24 11:39:15 -05:00
robweber
dd3a50027e Merge pull request #52 from robweber/dropbox_fix
Fix for dropbox file recursion errors
2014-06-24 11:38:14 -05:00
robweberjr@gmail.com
ee435a90ef attempted fix for Dropbox file recursion 2014-06-03 13:34:02 -05:00
robweberjr@gmail.com
23b70af3dc closes #51 2014-05-06 13:44:00 -05:00
Rob Weber
a439863c05 bump xbmc python version 2014-04-05 10:10:38 -05:00
robweberjr@gmail.com
6f34d39822 updated progress bar display - needed new class 2014-03-31 13:16:11 -05:00
robweberjr@gmail.com
e025b3213c Merge branch 'gotham-dev'
Conflicts:
	addon.xml
	changelog.txt
	resources/language/Bulgarian/strings.xml
2014-03-31 12:45:28 -05:00
robweberjr@gmail.com
9f794549c2 fixed backup rotation error - fix from Gotham branch 2014-03-31 12:40:00 -05:00
robweberjr@gmail.com
290446c3a8 fixed error in backup rotation 2014-03-31 12:37:11 -05:00
robweberjr@gmail.com
35c1717699 Version bump and README.txt 2014-03-31 12:05:44 -05:00
robweber
3a25c1c4eb Merge pull request #48 from robweber/scripting_updates
Scripting Updates
2014-03-31 11:58:34 -05:00
robweberjr@gmail.com
37fb30d7ab allow sending of "archive" parameter for restores 2014-03-31 11:54:11 -05:00
robweberjr@gmail.com
a09677930f removed redundant log message 2014-03-31 09:14:28 -05:00
robweberjr@gmail.com
ed696a5c4f Merge branch 'gotham-dev' of https://github.com/robweber/xbmcbackup into gotham-dev 2014-03-26 12:03:18 -05:00
robweber
6f4de551dc Merge pull request #45 from NEOhidra/master
updated Bulgarian translation
2014-03-26 11:59:18 -05:00
robweber
6ad083ced8 Merge pull request #46 from NEOhidra/gotham-dev
updated Bulgarian translation
2014-03-26 11:59:11 -05:00
Rob Weber
eecdf4277c updated gitignore 2014-03-23 17:10:53 -05:00
NEOhidra
450687ba5d updated Bulgarian translation 2014-03-23 10:28:32 +02:00
NEOhidra
a217960576 updated Bulgarian translation 2014-03-23 09:52:41 +02:00
robweberjr@gmail.com
7f42129606 added home window properties 2014-03-18 13:48:53 -05:00
robweberjr@gmail.com
4312625003 updated README.txt 2014-03-17 13:11:49 -05:00
Rob Weber
2bec306892 Merge branch 'master' into gotham-dev
Conflicts:
	addon.xml
	changelog.txt
2014-02-09 14:09:57 -06:00
Rob Weber
542bc692d9 bump xbmc python version 2014-02-09 14:03:51 -06:00
Rob Weber
70ced05cd5 version bump 2014-02-09 14:02:04 -06:00
Rob Weber
405bbc08b5 added hour and minute to backup folder names 2014-02-09 13:56:25 -06:00
Rob Weber
775a5aeda2 Merge branch 'master' into gotham-dev
Conflicts:
	addon.xml
	changelog.txt
	resources/lib/utils.py
2014-01-23 12:53:30 -06:00
Rob Weber
e185ddf131 attempted fix for unicode errors on logging 2014-01-23 12:47:21 -06:00
Rob Weber
aec7d19b00 changelog update 2014-01-20 13:05:09 -06:00
Rob Weber
b0b611b5c9 added version info to logs 2014-01-20 13:04:50 -06:00
Rob Weber
884633073a version bump 2014-01-20 13:04:03 -06:00
Rob Weber
4fcd40c745 added version info to logs 2014-01-20 13:02:29 -06:00
Rob Weber
77dbd69ce2 version bump, closes #36 2014-01-20 12:53:27 -06:00
Rob Weber
e3be458a28 use xbmcgui.notification() part of #36 2014-01-20 12:48:23 -06:00
Rob Weber
987d90de12 added options for background progress bar. part of #36 2014-01-20 12:42:49 -06:00
Rob Weber
163124089b version increment for Gotham 2014-01-20 11:40:00 -06:00
Rob Weber
4dd6c90ab9 modified directories not backing up - thanks bertel333 2014-01-12 10:12:09 -06:00
Rob Weber
d28596728b fixes #39 2013-12-05 14:26:35 -06:00
Rob Weber
25a9faed9a string lost during lang merge 2013-12-05 14:24:06 -06:00
Rob Weber
83213c5561 added license tag 2013-12-03 11:54:42 -06:00
robweber
4962a9c63b Merge pull request #38 from robweber/profiles
added support for userdata/profiles folder
2013-10-21 07:00:09 -07:00
Rob Weber
968248aaaf added support for userdata/profiles folder 2013-10-21 08:59:04 -05:00
Rob Weber
2b14f23a1d should encode() all strings before displaying notification fixes #33 2013-10-01 13:22:03 -05:00
Rob Weber
1a4e64572a fixed settings display error 2013-09-16 08:16:55 -05:00
Rob Weber
1c7fdeb5a7 updated lang files 2013-09-09 14:07:27 -05:00
Rob Weber
fbd53619cb clean up monitor on exit 2013-09-09 13:27:59 -05:00
Rob Weber
dcfb5a1f89 add notification when schedule changes 2013-08-25 11:22:10 -05:00
Rob Weber
f028bffca4 added setting for 'one-off' schedules 2013-08-25 10:58:23 -05:00
Rob Weber
3ae5ce8f6f version bump closes #30 2013-05-09 14:35:45 -05:00
Rob Weber
a7044cd17c added new strings 2013-05-09 14:35:31 -05:00
Rob Weber
af11c1a990 check for advanced settings and restart xbmc to continue (#30) 2013-05-09 14:24:10 -05:00
Rob Weber
c9d285c76f added FAQ to README.txt 2013-04-12 08:33:17 -05:00
Rob Weber
9cbd6270e9 optional elements moved to correct spot 2013-04-04 13:24:41 -05:00
rob
7ed09f3715 missed some new language strings 2013-04-01 11:28:29 -05:00
rob
ff4cbf5493 updated lang files 2013-04-01 11:17:00 -05:00
Rob Weber
f071dbd832 added 2 of the optional addon.xml tags
version bump
2013-04-01 11:06:57 -05:00
Rob Weber
47308c6282 updated readme 2013-04-01 11:04:27 -05:00
Rob Weber
6151cc771b updated changelog.txt 2013-04-01 10:59:55 -05:00
Rob Weber
e63ba10473 moved settings changed to Monitor class
use xbmc.sleep instead
2013-04-01 10:59:20 -05:00
Rob Weber
7652a90c1a updated changelog.txt 2013-03-04 11:42:55 -06:00
Rob Weber
47f4b16571 added check for backup verification before delete 2013-03-04 11:41:07 -06:00
Rob Weber
d1620f116c updated support documents and language strings 2013-03-04 11:05:59 -06:00
Rob Weber
27a4554ffa added program support for 2 custom dirs 2013-03-04 11:03:25 -06:00
Rob Weber
92a672e1ad updated settings.xml to 2 custom sources with enable/disable 2013-03-04 10:33:27 -06:00
robweber
4da499ebaa Merge pull request #28 from robweber/testing
Merge custom directory code
2013-03-04 08:29:05 -08:00
Rob Weber
db7f7a02f5 return boolean on complete (match super class) 2013-03-04 10:27:25 -06:00
Rob Weber
7e703ca08c fixed Dropbox VFS 2013-03-04 10:22:09 -06:00
Rob Weber
498e161347 updated README.txt to provide info on the media deletion bug 2013-02-27 12:58:27 -06:00
Rob Weber
625de8fa71 updated readme and version 2013-01-29 11:32:47 -06:00
Rob Weber
1357d45945 preliminary restore support 2013-01-29 11:00:16 -06:00
Rob Weber
9165f8b2dc added backup rotation 2013-01-29 10:38:08 -06:00
Rob Weber
2d123318d9 got progress bar to work correctly again 2013-01-29 10:34:48 -06:00
Rob Weber
a9b63500c3 Merge branch 'testing' of https://github.com/robweber/xbmcbackup into testing 2013-01-28 15:45:21 -06:00
Rob Weber
052cd1a062 can now backup custom directories - other functions stripped out for now 2013-01-28 15:44:22 -06:00
Rob Weber
cfdc3694ef Merge branch 'master' of https://github.com/robweber/xbmcbackup into testing 2013-01-18 15:00:16 -06:00
robweber
f2d61ed19d Merge pull request #27 from robweber/master
update testing
2013-01-18 12:59:57 -08:00
Rob Weber
36332f20b8 will now check for arguments "backup" or "restore" to bypass dialog prompt 2013-01-04 10:29:00 -06:00
Rob Weber
3cd1ae3247 updated xbmc python version 2012-12-31 08:31:48 -06:00
Rob Weber
8e7aacca4f updated readme and changelog 2012-12-30 15:19:27 -06:00
Rob Weber
6eb5b7f986 fixed shutdown function in scheduler.py 2012-12-30 15:19:17 -06:00
Rob Weber
e582be4c7b added message to create Dropbox key/secret 2012-12-30 15:18:59 -06:00
Rob Weber
361be97e34 vfs.py should pull dropbox info from settings 2012-12-28 19:06:12 -06:00
Rob Weber
e32383c9ed added dropbox key/secret settings 2012-12-28 19:03:24 -06:00
Rob Weber
e40e6c685d support for quitting xbmc after scheduled backup 2012-12-13 15:11:25 -06:00
Rob Weber
46cd3c6731 remove token file if Dropbox authorization revoked 2012-12-13 14:18:14 -06:00
Rob Weber
9fe364ef86 testing branch 2012-12-11 14:18:35 -06:00
Rob Weber
018a1a1e82 added multiple encoding try/except block 2012-12-11 13:39:13 -06:00
Rob Weber
a036cde5a8 updated README.txt 2012-11-28 11:25:28 -06:00
Rob Weber
f4f4b658a0 updated changelog.txt 2012-11-28 10:39:52 -06:00
Rob Weber
52b6b74b9e removed unneeded variable 2012-11-28 10:19:37 -06:00
Rob Weber
042ed51ef3 allow user to choose restore point 2012-11-28 10:19:03 -06:00
Rob Weber
16e55bdd23 removed references .ready() no longer needed 2012-11-28 09:57:34 -06:00
Rob Weber
926382e28e updated title 2012-11-28 09:47:40 -06:00
Rob Weber
f6cac868d7 added more info to progress bar 2012-11-28 09:37:37 -06:00
Rob Weber
4ff0e49d82 Merge branch 'dropbox'
Conflicts:
	addon.xml
	changelog.txt
	resources/lib/backup.py
	resources/settings.xml
2012-11-28 09:33:47 -06:00
Rob Weber
1f25e11c93 modified backup class to display more info 2012-11-28 08:56:58 -06:00
Rob Weber
18c85870ec moved mode selection to gui 2012-11-28 08:54:23 -06:00
Rob Weber
c1784c0485 version bump for Frodo 2012-11-16 09:23:38 -06:00
Rob Weber
738033897f Merge remote-tracking branch 'remotes/origin/frodo-dev'
Conflicts:
	addon.xml
	changelog.txt
2012-11-16 09:09:39 -06:00
robweber
4f6128b39c fixed copy() with put() 2012-11-06 15:12:14 -06:00
robweber
da5d98a344 updated strings.xml 2012-11-06 13:09:33 -06:00
robweber
755e212b26 Updated version and README.txt information 2012-11-06 11:38:01 -06:00
robweber
be7aea90bb added "restore" to Dropbox functions 2012-11-06 11:37:39 -06:00
robweber
535cd43e8a updated dropbox methods - listdir now works 2012-11-05 15:46:17 -06:00
robweber
5b6b5d6c9a implemented mkdir, exists, and copy for dropbox vfs
removed "dropbox path" setting
2012-11-05 12:25:25 -06:00
robweber
33e10c2a61 fixed backup rotation 2012-11-05 11:13:48 -06:00
robweber
140610db5a Merge branch 'dropbox' of https://github.com/robweber/xbmcbackup into dropbox 2012-11-05 10:57:21 -06:00
robweber
c4a8e60729 Merge branch 'frodo-dev' of https://github.com/robweber/xbmcbackup into dropbox 2012-11-05 10:54:30 -06:00
Rob Weber
cb6fdd7efe finished xbmcvfs wrapper, started dropbox wrapper 2012-11-04 14:39:17 -06:00
robweber
6c20e3a3ad started on VFS files 2012-11-02 15:59:40 -05:00
robweber
847ad3a510 version bump 2012-11-02 15:27:59 -05:00
robweber
49f7c2fbbd Merge branch 'frodo-dev' of https://github.com/robweber/xbmcbackup into frodo-dev 2012-11-02 15:26:22 -05:00
robweber
e600703c94 fixes #20 2012-11-02 15:24:45 -05:00
robweber
9eb857396a modified backup.py to test dropbox api
added start of vfs.py to abstract file repos
2012-10-26 09:42:10 -05:00
robweber
9bc0c27ccf created dummy pkg_resource.py file so that dropbox api will work 2012-10-26 09:31:08 -05:00
robweber
d3eab55f8a moved dropbox library 2012-10-26 09:30:50 -05:00
robweber
5ec8770057 added method to return addon path 2012-10-26 09:17:21 -05:00
robweber
4749978adb test of dropbox import 2012-10-22 15:02:30 -05:00
robweber
1321e244a7 added dropbox resource files 2012-10-22 14:34:12 -05:00
robweber
ad2ddfa22f added dropbox settings 2012-10-22 14:33:53 -05:00
robweber
77f138e159 Merge branch 'master' of https://github.com/robweber/xbmcbackup into frodo-dev 2012-10-22 14:21:03 -05:00
robweber
8ffbe3a791 Merge pull request #19 from robweber/master
update Frodo with master
2012-10-22 12:20:40 -07:00
robweber
5caeff23c9 restored __init__.py files 2012-10-22 13:53:01 -05:00
robweber
7bed37a6c2 Merge pull request #18 from robweber/master
Merge Master with Frodo
2012-10-16 07:35:33 -07:00
robweber
6b5b465121 update changelog and version bump 2012-09-28 09:15:39 -05:00
robweber
28e3d08f0c added string value for backup rotation setting 2012-09-28 09:15:20 -05:00
robweber
db7021d97e Merge branch 'frodo-dev' of https://github.com/robweber/xbmcbackup into frodo-dev 2012-09-19 11:44:39 -05:00
robweber
272ea8b8a9 added backup rotation closes #10 2012-09-19 11:43:36 -05:00
robweber
a3724657c7 Merge branch 'master' of https://github.com/robweber/xbmcbackup into frodo-dev 2012-09-13 09:54:03 -05:00
robweber
3892a16778 Merge pull request #16 from robweber/master
Merge Master with Frodo
2012-09-13 07:53:36 -07:00
robweber
dd39dc182e forgot utils import 2012-09-12 15:34:13 -05:00
robweber
719a189de6 Merge branch 'master' into frodo-dev
Conflicts:
	addon.xml
	changelog.txt
	default.py
	resources/lib/backup.py
2012-09-12 15:30:54 -05:00
robweber
557771ee95 Merge branch 'frodo-dev' of https://github.com/robweber/xbmcbackup into frodo-dev 2012-09-12 15:04:28 -05:00
robweber
2cf9356f9c created backup.py in prep for pull from master 2012-09-12 15:03:46 -05:00
robweber
dff28f2653 Merge pull request #12 from robweber/master
Update Frodo branch
2012-08-28 17:18:18 -07:00
robweber
377d7cd58d Merge branch 'frodo-dev' of https://github.com/robweber/xbmcbackup into frodo-dev 2012-08-20 14:37:32 -05:00
robweber
d908f23d72 merge with master moved 0.2.0 info 2012-08-20 14:36:57 -05:00
robweber
92b74eb41c Merge branch 'master' of https://github.com/robweber/xbmcbackup into frodo-dev 2012-08-20 14:36:16 -05:00
robweber
3d1729b721 Merge pull request #8 from robweber/master
Merge with Master
2012-08-20 12:34:48 -07:00
robweber
38b2c0b535 updated addon.xml and changelog.txt 2012-08-20 14:29:28 -05:00
robweber
e4f25f174f removed VFS library, now using xbmcvfs exclusively 2012-08-20 14:27:35 -05:00
71 changed files with 32 additions and 3908 deletions

32
README.md Normal file
View File

@@ -0,0 +1,32 @@
# Backup Addon
### __This is not the default branch - go to the [Matrix branch](https://github.com/robweber/xbmcbackup/tree/matrix) for the current supported version__
## About
I've had to recover my database, thumbnails, and source configuration enough times that I just wanted a quick easy way to back them up. That is what this addon is meant to do.
## Running the Program
Running the program will allow you to select Backup or Restore as a running mode. Selecting Backup will push files to your remote store using the addon settings you defined. Selecting Restore will give you a list of restore points currently in your remote destination. Selecting one will pull the files matching your selection criteria from the restore point to your local Kodi folders.
For more specific information please check out the [wiki on Github](https://github.com/robweber/xbmcbackup/wiki) for this project. Advanced descriptions for the following are all there:
* [Configuration](https://github.com/robweber/xbmcbackup/wiki/Configuration)
* [Cloud Storage](https://github.com/robweber/xbmcbackup/wiki/Cloud-Storage)
* [Scheduling](https://github.com/robweber/xbmcbackup/wiki/Scheduling)
* [Scripting](https://github.com/robweber/xbmcbackup/wiki/Scripting)
* [FAQ](https://github.com/robweber/xbmcbackup/wiki/FAQ)
## Attributions
Icon files from Open Iconic — www.useiconic.com/open

View File

@@ -1,23 +0,0 @@
XBMC Backup
About:
I've had to recover my database, thumbnails, and source configuration enough times that I just wanted a quick easy way to back them up. That is what this addon is meant to do.
Usage:
In the addon settings you can define a remote path for the destination of your xbmc files. Each backup will create a folder named in a month, day, year format so you can create multiple backups.
On the Backup Selection page you can select which items from your user profile folder will be sent to the backup location. By default all are turned on except the Addon Data directory.
To restore your data simply switch the Mode from "backup" to "restore" and type the date of the backup you wish to restore from . The files will be copied from your remote directory to the local path. The file selection criteria will be used for the restore as well.
Scheduling:
You can also schedule backups to be completed on a set interval via the scheduling area. When it is time for the backup to run it will be executed in the background.
What this Addon Will Not Do:
This is not meant as an XBMC file sync solution. If you have multiple frontends you want to keep in sync this addon may work in a "poor man's" sort of way but it is not intended for that.
This backup will not check the backup destination and delete files that do not match. It is best to only do one backup per day so that each folder is correct.

View File

@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="script.xbmcbackup"
name="XBMC Backup" version="0.1.7" provider-name="robweber">
<requires>
<import addon="xbmc.python" version="2.0"/>
</requires>
<extension point="xbmc.python.script" library="default.py">
<provides>executable</provides>
</extension>
<extension point="xbmc.service" library="scheduler.py" start="startup" />
<extension point="xbmc.addon.metadata">
<summary lang="de">Die XBMC Datenbank sichern und bei Dateiverlust oder Beschädigung wiederherstellen.</summary>
<summary lang="en">Backup and restore your XBMC database and configuration files in the event of a crash or file corruption.</summary>
<summary lang="es">Haz copia de seguridad de tu base de datos y configuración y recupera todo en caso de fallo.</summary>
<summary lang="es_MX">Respalda y restaura tu base de datos y archivos de configuración de XBMC dado el evento de un cuelgue o corrupción de archivos. </summary>
<summary lang="fr">Sauvegarder et restaurer vos bases de données XBMC et vos fichiers de configuration en cas de crash ou de fichiers corrompus.</summary>
<summary lang="he">גיבוי ושחזור מסד הנתונים וקבצי ההגדרות של XBMC במקרה של קריסה או קבצים פגומים.</summary>
<summary lang="lt">Atsarginė kopija katra atkuria jūsų XBMC duomenų bazę ir konfigūracijos failus avarijos ar failo sugadinimo metu.</summary>
<summary lang="pl">Stwórz kopię bezpieczeńśtwa oraz przywróć twoją bazę XBMC łącznie z plikami konfiguracyjnymi w przypadku awarii lub uszkodzenia plików.</summary>
<summary lang="pt_BR">Backup e restaure o banco de dados do XBMC e seus arquivos de configuração, no caso de falha ou corrupção de arquivo</summary>
<summary lang="sk">Zálohovanie a obnova XBMC databázy a konfiguračných súborov pre prípad havárie alebo poškodenia súboru.</summary>
<summary lang="sv">Ta backupp av eller återställ din XBMC-databas och konfigurationsfiler i händelse av en krash eller filkorruption.</summary>
<description lang="de">Jemals deine XBMC Konfiguration zerschossen und dir dann gewünscht, dass ein Backup existiert? Jetzt kannst du eine Sicherung mit nur einem Klick erzeugen. Du kannst deine Datenbanen, Playlisten, Thumbnails, Addons und andere Details zu einem Ort deiner Wahl sichern.</description>
<description lang="en">Ever hosed your XBMC configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by XBMC. Backups can be run on demand or via a scheduler. </description>
<description lang="es_MX">¿Alguna vez haz echado a perder tu configuración de XBMC y haz deseado tener un respaldo? Ahora puedes tenerlo con un simple click. Puedes exportar tu base de datos, listas de reproducción, miniaturas, addons y otros detalles de configuración correspondientes a cualquier fuente que pueda escribir XBMC. Los respaldos pueden ser efectuados a pedido o mediante una programación temporal</description>
<description lang="fr">Avez-vous déjà perdu votre configuration XBMC et espéré avoir fait une sauvegarde ? Maintenant, vous pouvez le faire en un simple click. Vous pouvez exporter vos bases de données, playlists, miniatures, addons et autres fichiers de configuration vers n'importe quel endroit accessible depuis XBMC.</description>
<description lang="he">Ever hosed your XBMC configuration and wished you'd had a backup? Now you can with one easy click. You can export your database, playlist, thumbnails, addons and other configuration details to any source writeable by XBMC. Backups can be run on demand or via a scheduler. </description>
<description lang="lt">Kada naujinate ir konfiguruojate savo XBMC ar susimastėte, kad jums reikalinga atsarginė kopija? Dabar galite tai atlikti vienu spustelėjimu. Savo duomenų bazes, atkūrimą, miniatiūras, priedus ir kitas konfigūracijos failus galite eksportuoti iš bet kokio šaltinio. Atsarginė(-ės) kopija(-os) gali būti paleistos pareikalavus arba per tvarkaraštį.</description>
<description lang="pl">Straciłeś kiedyś swoją konfigurację XBMC i marzyłeś o tym by mieć backup? Teraz już możesz i to w prosty sposób. Możesz eksportować twoją bazę, playlisty, miniatury, dodatki oraz wiele więcej do dowolnego źródłą prosto z XBMC. Kopia bezpieczeństwa może być uruchomiona na rządanie lub przez plan.</description>
<description lang="pt_BR">Sempre se preocupou com sua configuração do XBMC e desejou ter backup? Agora você pode, e somente com um simples clique. Você pode exportar seu banco de dados, lista de reprodução, miniaturas, addons e outros detalhes de configuração para qualquer fonte gravável pelo XBMC. Os backups podem ser executados sob demanda ou ser agendados.</description>
<description lang="sk">Už ste niekedy poškodili konfiguráciu XBMC a priali si mať zálohu? Teraz môžete - na jeden klik. Môžete exportovať Vašu databázu, playlist, náhľady, doplnky a konfigurácie na ktorýkoľvek zdroj zapisovateľný XBMC. Zálohy môžu byť púšťané na požiadanie alebo plánovačom. </description>
<description lang="sv">Har du någonsin tappat bort din XBMC konfiguration och önskat att du hade en backup? Nu kan du enkelt med ett klick. Du kan exportera din databas, spellista, minityrer, tillägg och andra konfigurationsdetaljer till valfri källa som är skrivbar för XBMC. Backupper kan köras på begäran eller via scheman.</description>
<platform>all</platform>
</extension>
</addon>

View File

@@ -1,84 +0,0 @@
[b]Version 0.1.7[/b]
minor bug fixes and translations updates
[b]Version 0.1.6[/b]
merged scheduler branch with master, can now schedule backups on an interval
[b]Version 0.1.5[/b]
pulled xbmcbackup class into separate library
[b]Version 0.1.4[/b]
added more verbose error message for incorrect paths
[b]Version 0.1.3[/b]
backup folder format - thanks zeroram
added German translations - thanks dersphere
removed need for separate verbose logging setting
updated utf-8 encoding for all logging
backup now uses date as folder name, restore allows user to type date of last backup
[b]Version 0.1.2[/b]
added French language translation - thanks mikebzh44
added some utf-8 encoding tags to filenames
[b]Version 0.1.1[/b]
added check for key in vfs.py - Thanks Martijn!
[b]Version 0.1.0[/b]
removed transparency from icon.png
[b]Version 0.0.9 [/b]
modified vfs.py again to filter out xsp files (smart playlists). Created running list for these types of compressed files
added enable/disable logging toggle in settings
[b]Version 0.0.8[/b]
modified vfs.py script to exclude handling zip files as directories, added keymap and peripheral data folders in the "config" section
[b]Version 0.0.7[/b]
removed "restore.txt" file and now write file listing to memory list instead
[b]Version 0.0.6[/b]
Added the vfs module created by paddycarey
File Selection is now followed for both backup and restore options
[b]Version 0.0.5[/b]
Added option to manually type a path rather than browse for one (only one used)
Show progress bar right away so you know this is doing something
[b]Version 0.0.4[/b]
Finished code for restore mode.
[b]Version 0.0.3[/b]
Added progress bar and "silent" option for running on startup or as a script
[b]Version 0.0.2[/b]
First version, should backup directories as needed

View File

@@ -1,7 +0,0 @@
from resources.lib.backup import XbmcBackup
#run the profile backup
backup = XbmcBackup()
if(backup.isReady()):
backup.run()

BIN
icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

View File

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<strings>
<string id="30010">XBMC Backup</string>
<string id="30011">General</string>
<string id="30012">File Selection</string>
<string id="30013">Scheduling</string>
<string id="30016">Backup</string>
<string id="30017">Restore</string>
<string id="30018">Browse Path</string>
<string id="30019">Type Path</string>
<string id="30020">Browse Remote Path</string>
<string id="30021">Backup Folder Name</string>
<string id="30022">Run Silent</string>
<string id="30023">Mode</string>
<string id="30024">Type Remote Path</string>
<string id="30025">Remote Path Type</string>
<string id="30030">User Addons</string>
<string id="30031">Addon Data</string>
<string id="30032">Database</string>
<string id="30033">Playlist</string>
<string id="30034">Thumbnails/Fanart</string>
<string id="30035">Config Files</string>
<string id="30045">Error: Remote path doesn't exist</string>
<string id="30046">Starting</string>
<string id="30047">Local Dir</string>
<string id="30048">Remote Dir</string>
<string id="30049">Gathering file list</string>
<string id="30050">Remote Path exists - may have old files in it!</string>
<string id="30051">Creating Files List</string>
<string id="30052">Writing file</string>
<string id="30053">Starting scheduled backup</string>
<string id="30060">Enable Scheduler</string>
<string id="30061">Schedule</string>
<string id="30062">Hour of Day</string>
<string id="30063">Day of Week</string>
<string id="30064">Cron Schedule</string>
<string id="30065">Sunday</string>
<string id="30066">Monday</string>
<string id="30067">Tuesday</string>
<string id="30068">Wednesday</string>
<string id="30069">Thursday</string>
<string id="30070">Friday</string>
<string id="30071">Saturday</string>
<string id="30072">Every Day</string>
<string id="30073">Every Week</string>
<string id="30074">First Day of Month</string>
<string id="30075">Custom Schedule</string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010">Sauvegarde XBMC</string>
<string id="30011">Général</string>
<string id="30012">Sélection des fichiers</string>
<string id="30013">Planification</string>
<string id="30016">Sauvegarde</string>
<string id="30017">Restauration</string>
<string id="30018">Parcourir</string>
<string id="30019">Saisir</string>
<string id="30020">Parcourir le chemin de sauvegarde</string>
<string id="30021">Nom du répertoire de sauvegarde</string>
<string id="30022">Mode silencieux</string>
<string id="30023">Mode</string>
<string id="30024">Saisir le chemin de sauvegarde</string>
<string id="30025">Mode de saisie du chemin</string>
<string id="30030">Addons de l'utilisaeur</string>
<string id="30031">Données des addons</string>
<string id="30032">Base de données</string>
<string id="30033">Playliste</string>
<string id="30034">Miniatures / Fanart</string>
<string id="30035">Fichiers de configuration</string>
<string id="30045">Erreur : chemin distant n'existe pas</string>
<string id="30046">Démarrage</string>
<string id="30047">Dossier Local</string>
<string id="30048">Dossier Distant</string>
<string id="30049">Collecte de la liste des fichiers</string>
<string id="30050">Le chemin distant existe - d'anciens fichiers peuvent s'y trouver !</string>
<string id="30051">Création de la liste des fichiers</string>
<string id="30052">Ecriture du fichier</string>
<string id="30053">Démarrage de la sauvegarde planifiée</string>
<string id="30060">Activer le planificateur</string>
<string id="30061">Planifier</string>
<string id="30062">Heure</string>
<string id="30063">Jour de la semaine</string>
<string id="30064">Planification Cron</string>
<string id="30065">Dimanche</string>
<string id="30066">Lundi</string>
<string id="30067">Mardi</string>
<string id="30068">Mercredi</string>
<string id="30069">Jeudi</string>
<string id="30070">Vendredi</string>
<string id="30071">Samedi</string>
<string id="30072">Chaque jour</string>
<string id="30073">Chaque semaine</string>
<string id="30074">Premier jour du mois</string>
<string id="30075">Planification personnalisée</string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010">XBMC Backup</string>
<string id="30011">Allgemein</string>
<string id="30012">Datenauswahl</string>
<string id="30013">Zeitplan</string>
<string id="30016">Sichern</string>
<string id="30017">Wiederherstellen</string>
<string id="30018">Verzeichnis wählen</string>
<string id="30019">Verzeichnis eintippen</string>
<string id="30020">Entferntes Verzeichnis wählen</string>
<string id="30021">Sicherungsverzeichnisname</string>
<string id="30022">Im Hintergrund arbeiten</string>
<string id="30023">Modus</string>
<string id="30024">Entferntes Verzeichnis</string>
<string id="30025">Typ Entferntes Verzeichnis</string>
<string id="30030">Benutzer Addons</string>
<string id="30031">Addon Daten</string>
<string id="30032">Datenbanken</string>
<string id="30033">Playlisten</string>
<string id="30034">Thumbnails/Fanart</string>
<string id="30035">Config Dateien</string>
<string id="30045">Fehler: Entferntes Verzeichnis nicht konfiguriert</string>
<string id="30046">Starte</string>
<string id="30047">Lokales Verzeichnis</string>
<string id="30048">Entferntes Verzeichnis</string>
<string id="30049">Dateiliste wird erzeugt</string>
<string id="30050">Entferntes Verzeichnis existiert - es könnte bereits Dateien beinhalten!</string>
<string id="30051">Dateiliste wird erzeugt</string>
<string id="30052">Schreibe Datei</string>
<string id="30053">Starte geplantes backup</string>
<string id="30060">Zeitplaner einschalten</string>
<string id="30061">Zeitplan</string>
<string id="30062">Stunde</string>
<string id="30063">Wochentag</string>
<string id="30064">Cron Plan</string>
<string id="30065">Sonntag</string>
<string id="30066">Montag</string>
<string id="30067">Dienstag</string>
<string id="30068">Mittwoch</string>
<string id="30069">Donnerstag</string>
<string id="30070">Freitag</string>
<string id="30071">Samstag</string>
<string id="30072">Jeden Tag</string>
<string id="30073">Jede Woche</string>
<string id="30074">Erster Tag eines Monats</string>
<string id="30075">Benutzerdefiniert</string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<strings>
<string id="30010"></string>
<string id="30011"></string>
<string id="30012"></string>
<string id="30013"></string>
<string id="30016"></string>
<string id="30017"></string>
<string id="30018"></string>
<string id="30019"></string>
<string id="30020"></string>
<string id="30021"></string>
<string id="30022"></string>
<string id="30023"></string>
<string id="30024"></string>
<string id="30025"></string>
<string id="30030"></string>
<string id="30031"></string>
<string id="30032"></string>
<string id="30033"></string>
<string id="30034"></string>
<string id="30035"></string>
<string id="30045"></string>
<string id="30046"></string>
<string id="30047"></string>
<string id="30048"></string>
<string id="30049"></string>
<string id="30050"></string>
<string id="30051"></string>
<string id="30052"></string>
<string id="30053"></string>
<string id="30060"></string>
<string id="30061"></string>
<string id="30062"></string>
<string id="30063"></string>
<string id="30064"></string>
<string id="30065"></string>
<string id="30066"></string>
<string id="30067"></string>
<string id="30068"></string>
<string id="30069"></string>
<string id="30070"></string>
<string id="30071"></string>
<string id="30072"></string>
<string id="30073"></string>
<string id="30074"></string>
<string id="30075"></string>
</strings>

View File

@@ -1,210 +0,0 @@
import xbmc
import xbmcgui
import vfs as vfs
import utils as utils
import os
import time
class FileManager:
walk_path = ''
fileArray = None
verbose_log = False
def __init__(self,path):
self.walk_path = path
def createFileList(self):
self.fileArray = []
self.verbose_log = utils.getSetting("verbose_log") == 'true'
#figure out which syncing options to run
if(utils.getSetting('backup_addons') == 'true'):
self.addFile("-addons")
self.walkTree(self.walk_path + "addons/")
self.addFile("-userdata")
if(utils.getSetting('backup_addon_data') == 'true'):
self.addFile("-userdata/addon_data")
self.walkTree(self.walk_path + "userdata/addon_data/")
if(utils.getSetting('backup_database') == 'true'):
self.addFile("-userdata/Database")
self.walkTree(self.walk_path + "userdata/Database")
if(utils.getSetting("backup_playlists") == 'true'):
self.addFile("-userdata/playlists")
self.walkTree(self.walk_path + "userdata/playlists")
if(utils.getSetting("backup_thumbnails") == "true"):
self.addFile("-userdata/Thumbnails")
self.walkTree(self.walk_path + "userdata/Thumbnails")
if(utils.getSetting("backup_config") == "true"):
self.addFile("-userdata/keymaps")
self.walkTree(self.walk_path + "userdata/keymaps")
self.addFile("-userdata/peripheral_data")
self.walkTree(self.walk_path + "userdata/peripheral_data")
#this part is an oddity
configFiles = vfs.listdir(self.walk_path + "userdata/",extra_metadata=True)
for aFile in configFiles:
if(aFile['file'].endswith(".xml")):
self.addFile(aFile['file'][len(self.walk_path):])
def walkTree(self,directory):
for (path, dirs, files) in vfs.walk(directory):
#create all the subdirs first
for aDir in dirs:
self.addFile("-" + aDir[len(self.walk_path):])
#copy all the files
for aFile in files:
filePath = aFile[len(self.walk_path):]
self.addFile(filePath)
def addFile(self,filename):
#write the full remote path name of this file
utils.log("Add File: " + filename,xbmc.LOGDEBUG)
self.fileArray.append(filename)
def getFileList(self):
return self.fileArray
class XbmcBackup:
#constants for initiating a back or restore
Backup = 0
Restore = 1
local_path = ''
remote_path = ''
restoreFile = None
#for the progress bar
progressBar = None
filesLeft = 0
filesTotal = 1
fileManager = None
def __init__(self):
self.local_path = xbmc.makeLegalFilename(xbmc.translatePath("special://home"),False);
if(utils.getSetting('remote_selection') == '1'):
self.remote_path = utils.getSetting('remote_path_2')
utils.setSetting("remote_path","")
elif(utils.getSetting('remote_selection') == '0'):
self.remote_path = utils.getSetting("remote_path")
#fix slashes
self.remote_path = self.remote_path.replace("\\","/")
#check if trailing slash is included
if(self.remote_path[-1:] != "/"):
self.remote_path = self.remote_path + "/"
utils.log(utils.getString(30046))
def run(self,mode=-1,runSilent=False):
#check if we should use the progress bar
if(utils.getSetting('run_silent') == 'false' and not runSilent):
self.progressBar = xbmcgui.DialogProgress()
self.progressBar.create(utils.getString(30010),utils.getString(30049) + "......")
#determine backup mode
if(mode == -1):
mode = int(utils.getSetting('addon_mode'))
#append backup folder name
if(mode == self.Backup and self.remote_path != ''):
self.remote_path = self.remote_path + time.strftime("%Y%m%d") + "/"
elif(mode == self.Restore and utils.getSetting("backup_name") != '' and self.remote_path != ''):
self.remote_path = self.remote_path + utils.getSetting("backup_name") + "/"
else:
self.remote_path = ""
utils.log(utils.getString(30047) + ": " + self.local_path)
utils.log(utils.getString(30048) + ": " + self.remote_path)
#run the correct mode
if(mode == self.Backup):
utils.log(utils.getString(30023) + " - " + utils.getString(30016))
self.fileManager = FileManager(self.local_path)
#for backups check if remote path exists
if(vfs.exists(self.remote_path)):
#this will fail - need a disclaimer here
utils.log(utils.getString(30050))
self.syncFiles()
else:
utils.log(utils.getString(30023) + " - " + utils.getString(30017))
self.fileManager = FileManager(self.remote_path)
#for restores remote path must exist
if(vfs.exists(self.remote_path)):
self.restoreFiles()
else:
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30045),self.remote_path)
if(utils.getSetting('run_silent') == 'false' and not runSilent):
self.progressBar.close()
def syncFiles(self):
#make the remote directory
vfs.mkdir(self.remote_path)
utils.log(utils.getString(30051))
self.fileManager.createFileList()
allFiles = self.fileManager.getFileList()
#write list from local to remote
self.writeFiles(allFiles,self.local_path,self.remote_path)
def restoreFiles(self):
self.fileManager.createFileList()
utils.log(utils.getString(30051))
allFiles = self.fileManager.getFileList()
#write list from remote to local
self.writeFiles(allFiles,self.remote_path,self.local_path)
#call update addons to refresh everything
xbmc.executebuiltin('UpdateLocalAddons')
def writeFiles(self,fileList,source,dest):
utils.log("Writing files to: " + dest)
self.filesTotal = len(fileList)
self.filesLeft = self.filesTotal
#write each file from source to destination
for aFile in fileList:
if(not self.checkCancel()):
utils.log('Writing file: ' + source + aFile,xbmc.LOGDEBUG)
self.updateProgress(aFile)
if (aFile.startswith("-")):
vfs.mkdir(xbmc.makeLegalFilename(dest + aFile[1:],False))
else:
vfs.copy(xbmc.makeLegalFilename(source + aFile),xbmc.makeLegalFilename(dest + aFile,False))
def updateProgress(self,message=''):
self.filesLeft = self.filesLeft - 1
#update the progress bar
if(self.progressBar != None):
self.progressBar.update(int((float(self.filesTotal - self.filesLeft)/float(self.filesTotal)) * 100),message)
def checkCancel(self):
result = False
if(self.progressBar != None):
result = self.progressBar.iscanceled()
return result
def isReady(self):
return True if self.remote_path != '' else False

View File

@@ -1,308 +0,0 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
from time import time, mktime
from datetime import datetime, date
from relativedelta import relativedelta
search_re = re.compile(r'^([^-]+)-([^-/]+)(/(.*))?$')
only_int_re = re.compile(r'^\d+$')
any_int_re = re.compile(r'^\d+')
star_or_int_re = re.compile(r'^(\d+|\*)$')
__all__ = ('croniter',)
class croniter(object):
RANGES = (
(0, 59),
(0, 23),
(1, 31),
(1, 12),
(0, 6),
(0, 59)
)
DAYS = (
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
)
ALPHACONV = (
{ },
{ },
{ },
{ 'jan':1, 'feb':2, 'mar':3, 'apr':4, 'may':5, 'jun':6,
'jul':7, 'aug':8, 'sep':9, 'oct':10, 'nov':11, 'dec':12 },
{ 'sun':0, 'mon':1, 'tue':2, 'wed':3, 'thu':4, 'fri':5, 'sat':6 },
{ }
)
LOWMAP = (
{},
{},
{0: 1},
{0: 1},
{7: 0},
{},
)
bad_length = 'Exactly 5 or 6 columns has to be specified for iterator' \
'expression.'
def __init__(self, expr_format, start_time=time()):
if isinstance(start_time, datetime):
start_time = mktime(start_time.timetuple())
self.cur = start_time
self.exprs = expr_format.split()
if len(self.exprs) != 5 and len(self.exprs) != 6:
raise ValueError(self.bad_length)
expanded = []
for i, expr in enumerate(self.exprs):
e_list = expr.split(',')
res = []
while len(e_list) > 0:
e = e_list.pop()
t = re.sub(r'^\*(/.+)$', r'%d-%d\1' % (self.RANGES[i][0],
self.RANGES[i][1]),
str(e))
m = search_re.search(t)
if m:
(low, high, step) = m.group(1), m.group(2), m.group(4) or 1
if not any_int_re.search(low):
low = self.ALPHACONV[i][low.lower()]
if not any_int_re.search(high):
high = self.ALPHACONV[i][high.lower()]
if (not low or not high or int(low) > int(high)
or not only_int_re.search(str(step))):
raise ValueError("[%s] is not acceptable" %expr_format)
for j in xrange(int(low), int(high)+1):
if j % int(step) == 0:
e_list.append(j)
else:
if not star_or_int_re.search(t):
t = self.ALPHACONV[i][t.lower()]
try:
t = int(t)
except:
pass
if t in self.LOWMAP[i]:
t = self.LOWMAP[i][t]
if t != '*' and (int(t) < self.RANGES[i][0] or
int(t) > self.RANGES[i][1]):
raise ValueError("[%s] is not acceptable, out of range" % expr_format)
res.append(t)
res.sort()
expanded.append(['*'] if (len(res) == 1 and res[0] == '*') else res)
self.expanded = expanded
def get_next(self, ret_type=float):
return self._get_next(ret_type, is_prev=False)
def get_prev(self, ret_type=float):
return self._get_next(ret_type, is_prev=True)
def _get_next(self, ret_type=float, is_prev=False):
expanded = self.expanded[:]
if ret_type not in (float, datetime):
raise TypeError("Invalid ret_type, only 'float' or 'datetime' " \
"is acceptable.")
if expanded[2][0] != '*' and expanded[4][0] != '*':
bak = expanded[4]
expanded[4] = ['*']
t1 = self._calc(self.cur, expanded, is_prev)
expanded[4] = bak
expanded[2] = ['*']
t2 = self._calc(self.cur, expanded, is_prev)
if not is_prev:
result = t1 if t1 < t2 else t2
else:
result = t1 if t1 > t2 else t2
else:
result = self._calc(self.cur, expanded, is_prev)
self.cur = result
if ret_type == datetime:
result = datetime.fromtimestamp(result)
return result
def _calc(self, now, expanded, is_prev):
if is_prev:
nearest_method = self._get_prev_nearest
nearest_diff_method = self._get_prev_nearest_diff
sign = -1
else:
nearest_method = self._get_next_nearest
nearest_diff_method = self._get_next_nearest_diff
sign = 1
offset = len(expanded) == 6 and 1 or 60
dst = now = datetime.fromtimestamp(now + sign * offset)
day, month, year = dst.day, dst.month, dst.year
current_year = now.year
DAYS = self.DAYS
def proc_month(d):
if expanded[3][0] != '*':
diff_month = nearest_diff_method(month, expanded[3], 12)
days = DAYS[month - 1]
if month == 2 and self.is_leap(year) == True:
days += 1
reset_day = days if is_prev else 1
if diff_month != None and diff_month != 0:
if is_prev:
d += relativedelta(months=diff_month)
else:
d += relativedelta(months=diff_month, day=reset_day,
hour=0, minute=0, second=0)
return True, d
return False, d
def proc_day_of_month(d):
if expanded[2][0] != '*':
days = DAYS[month - 1]
if month == 2 and self.is_leap(year) == True:
days += 1
diff_day = nearest_diff_method(d.day, expanded[2], days)
if diff_day != None and diff_day != 0:
if is_prev:
d += relativedelta(days=diff_day)
else:
d += relativedelta(days=diff_day, hour=0, minute=0, second=0)
return True, d
return False, d
def proc_day_of_week(d):
if expanded[4][0] != '*':
diff_day_of_week = nearest_diff_method(d.isoweekday() % 7, expanded[4], 7)
if diff_day_of_week != None and diff_day_of_week != 0:
if is_prev:
d += relativedelta(days=diff_day_of_week)
else:
d += relativedelta(days=diff_day_of_week, hour=0, minute=0, second=0)
return True, d
return False, d
def proc_hour(d):
if expanded[1][0] != '*':
diff_hour = nearest_diff_method(d.hour, expanded[1], 24)
if diff_hour != None and diff_hour != 0:
if is_prev:
d += relativedelta(hours = diff_hour)
else:
d += relativedelta(hours = diff_hour, minute=0, second=0)
return True, d
return False, d
def proc_minute(d):
if expanded[0][0] != '*':
diff_min = nearest_diff_method(d.minute, expanded[0], 60)
if diff_min != None and diff_min != 0:
if is_prev:
d += relativedelta(minutes = diff_min)
else:
d += relativedelta(minutes = diff_min, second=0)
return True, d
return False, d
def proc_second(d):
if len(expanded) == 6:
if expanded[5][0] != '*':
diff_sec = nearest_diff_method(d.second, expanded[5], 60)
if diff_sec != None and diff_sec != 0:
dst += relativedelta(seconds = diff_sec)
return True, d
else:
d += relativedelta(second = 0)
return False, d
if is_prev:
procs = [proc_second,
proc_minute,
proc_hour,
proc_day_of_week,
proc_day_of_month,
proc_month]
else:
procs = [proc_month,
proc_day_of_month,
proc_day_of_week,
proc_hour,
proc_minute,
proc_second]
while abs(year - current_year) <= 1:
next = False
for proc in procs:
(changed, dst) = proc(dst)
if changed:
next = True
break
if next:
continue
return mktime(dst.timetuple())
raise "failed to find prev date"
def _get_next_nearest(self, x, to_check):
small = [item for item in to_check if item < x]
large = [item for item in to_check if item >= x]
large.extend(small)
return large[0]
def _get_prev_nearest(self, x, to_check):
small = [item for item in to_check if item <= x]
large = [item for item in to_check if item > x]
small.reverse()
large.reverse()
small.extend(large)
return small[0]
def _get_next_nearest_diff(self, x, to_check, range_val):
for i, d in enumerate(to_check):
if d >= x:
return d - x
return to_check[0] - x + range_val
def _get_prev_nearest_diff(self, x, to_check, range_val):
candidates = to_check[:]
candidates.reverse()
for d in candidates:
if d <= x:
return d - x
return (candidates[0]) - x - range_val
def is_leap(self, year):
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
return True
else:
return False
if __name__ == '__main__':
base = datetime(2010, 1, 25)
itr = croniter('0 0 1 * *', base)
n1 = itr.get_next(datetime)
print n1

View File

@@ -1,430 +0,0 @@
"""
Copyright (c) 2003-2010 Gustavo Niemeyer <gustavo@niemeyer.net>
This module offers extensions to the standard python 2.3+
datetime module.
"""
__author__ = "Gustavo Niemeyer <gustavo@niemeyer.net>"
__license__ = "PSF License"
import datetime
import calendar
__all__ = ["relativedelta", "MO", "TU", "WE", "TH", "FR", "SA", "SU"]
class weekday(object):
__slots__ = ["weekday", "n"]
def __init__(self, weekday, n=None):
self.weekday = weekday
self.n = n
def __call__(self, n):
if n == self.n:
return self
else:
return self.__class__(self.weekday, n)
def __eq__(self, other):
try:
if self.weekday != other.weekday or self.n != other.n:
return False
except AttributeError:
return False
return True
def __repr__(self):
s = ("MO", "TU", "WE", "TH", "FR", "SA", "SU")[self.weekday]
if not self.n:
return s
else:
return "%s(%+d)" % (s, self.n)
MO, TU, WE, TH, FR, SA, SU = weekdays = tuple([weekday(x) for x in range(7)])
class relativedelta:
"""
The relativedelta type is based on the specification of the excelent
work done by M.-A. Lemburg in his mx.DateTime extension. However,
notice that this type does *NOT* implement the same algorithm as
his work. Do *NOT* expect it to behave like mx.DateTime's counterpart.
There's two different ways to build a relativedelta instance. The
first one is passing it two date/datetime classes:
relativedelta(datetime1, datetime2)
And the other way is to use the following keyword arguments:
year, month, day, hour, minute, second, microsecond:
Absolute information.
years, months, weeks, days, hours, minutes, seconds, microseconds:
Relative information, may be negative.
weekday:
One of the weekday instances (MO, TU, etc). These instances may
receive a parameter N, specifying the Nth weekday, which could
be positive or negative (like MO(+1) or MO(-2). Not specifying
it is the same as specifying +1. You can also use an integer,
where 0=MO.
leapdays:
Will add given days to the date found, if year is a leap
year, and the date found is post 28 of february.
yearday, nlyearday:
Set the yearday or the non-leap year day (jump leap days).
These are converted to day/month/leapdays information.
Here is the behavior of operations with relativedelta:
1) Calculate the absolute year, using the 'year' argument, or the
original datetime year, if the argument is not present.
2) Add the relative 'years' argument to the absolute year.
3) Do steps 1 and 2 for month/months.
4) Calculate the absolute day, using the 'day' argument, or the
original datetime day, if the argument is not present. Then,
subtract from the day until it fits in the year and month
found after their operations.
5) Add the relative 'days' argument to the absolute day. Notice
that the 'weeks' argument is multiplied by 7 and added to
'days'.
6) Do steps 1 and 2 for hour/hours, minute/minutes, second/seconds,
microsecond/microseconds.
7) If the 'weekday' argument is present, calculate the weekday,
with the given (wday, nth) tuple. wday is the index of the
weekday (0-6, 0=Mon), and nth is the number of weeks to add
forward or backward, depending on its signal. Notice that if
the calculated date is already Monday, for example, using
(0, 1) or (0, -1) won't change the day.
"""
def __init__(self, dt1=None, dt2=None,
years=0, months=0, days=0, leapdays=0, weeks=0,
hours=0, minutes=0, seconds=0, microseconds=0,
year=None, month=None, day=None, weekday=None,
yearday=None, nlyearday=None,
hour=None, minute=None, second=None, microsecond=None):
if dt1 and dt2:
if not isinstance(dt1, datetime.date) or \
not isinstance(dt2, datetime.date):
raise TypeError, "relativedelta only diffs datetime/date"
if type(dt1) is not type(dt2):
if not isinstance(dt1, datetime.datetime):
dt1 = datetime.datetime.fromordinal(dt1.toordinal())
elif not isinstance(dt2, datetime.datetime):
dt2 = datetime.datetime.fromordinal(dt2.toordinal())
self.years = 0
self.months = 0
self.days = 0
self.leapdays = 0
self.hours = 0
self.minutes = 0
self.seconds = 0
self.microseconds = 0
self.year = None
self.month = None
self.day = None
self.weekday = None
self.hour = None
self.minute = None
self.second = None
self.microsecond = None
self._has_time = 0
months = (dt1.year*12+dt1.month)-(dt2.year*12+dt2.month)
self._set_months(months)
dtm = self.__radd__(dt2)
if dt1 < dt2:
while dt1 > dtm:
months += 1
self._set_months(months)
dtm = self.__radd__(dt2)
else:
while dt1 < dtm:
months -= 1
self._set_months(months)
dtm = self.__radd__(dt2)
delta = dt1 - dtm
self.seconds = delta.seconds+delta.days*86400
self.microseconds = delta.microseconds
else:
self.years = years
self.months = months
self.days = days+weeks*7
self.leapdays = leapdays
self.hours = hours
self.minutes = minutes
self.seconds = seconds
self.microseconds = microseconds
self.year = year
self.month = month
self.day = day
self.hour = hour
self.minute = minute
self.second = second
self.microsecond = microsecond
if type(weekday) is int:
self.weekday = weekdays[weekday]
else:
self.weekday = weekday
yday = 0
if nlyearday:
yday = nlyearday
elif yearday:
yday = yearday
if yearday > 59:
self.leapdays = -1
if yday:
ydayidx = [31,59,90,120,151,181,212,243,273,304,334,366]
for idx, ydays in enumerate(ydayidx):
if yday <= ydays:
self.month = idx+1
if idx == 0:
self.day = yday
else:
self.day = yday-ydayidx[idx-1]
break
else:
raise ValueError, "invalid year day (%d)" % yday
self._fix()
def _fix(self):
if abs(self.microseconds) > 999999:
s = self.microseconds//abs(self.microseconds)
div, mod = divmod(self.microseconds*s, 1000000)
self.microseconds = mod*s
self.seconds += div*s
if abs(self.seconds) > 59:
s = self.seconds//abs(self.seconds)
div, mod = divmod(self.seconds*s, 60)
self.seconds = mod*s
self.minutes += div*s
if abs(self.minutes) > 59:
s = self.minutes//abs(self.minutes)
div, mod = divmod(self.minutes*s, 60)
self.minutes = mod*s
self.hours += div*s
if abs(self.hours) > 23:
s = self.hours//abs(self.hours)
div, mod = divmod(self.hours*s, 24)
self.hours = mod*s
self.days += div*s
if abs(self.months) > 11:
s = self.months//abs(self.months)
div, mod = divmod(self.months*s, 12)
self.months = mod*s
self.years += div*s
if (self.hours or self.minutes or self.seconds or self.microseconds or
self.hour is not None or self.minute is not None or
self.second is not None or self.microsecond is not None):
self._has_time = 1
else:
self._has_time = 0
def _set_months(self, months):
self.months = months
if abs(self.months) > 11:
s = self.months//abs(self.months)
div, mod = divmod(self.months*s, 12)
self.months = mod*s
self.years = div*s
else:
self.years = 0
def __radd__(self, other):
if not isinstance(other, datetime.date):
raise TypeError, "unsupported type for add operation"
elif self._has_time and not isinstance(other, datetime.datetime):
other = datetime.datetime.fromordinal(other.toordinal())
year = (self.year or other.year)+self.years
month = self.month or other.month
if self.months:
assert 1 <= abs(self.months) <= 12
month += self.months
if month > 12:
year += 1
month -= 12
elif month < 1:
year -= 1
month += 12
day = min(calendar.monthrange(year, month)[1],
self.day or other.day)
repl = {"year": year, "month": month, "day": day}
for attr in ["hour", "minute", "second", "microsecond"]:
value = getattr(self, attr)
if value is not None:
repl[attr] = value
days = self.days
if self.leapdays and month > 2 and calendar.isleap(year):
days += self.leapdays
ret = (other.replace(**repl)
+ datetime.timedelta(days=days,
hours=self.hours,
minutes=self.minutes,
seconds=self.seconds,
microseconds=self.microseconds))
if self.weekday:
weekday, nth = self.weekday.weekday, self.weekday.n or 1
jumpdays = (abs(nth)-1)*7
if nth > 0:
jumpdays += (7-ret.weekday()+weekday)%7
else:
jumpdays += (ret.weekday()-weekday)%7
jumpdays *= -1
ret += datetime.timedelta(days=jumpdays)
return ret
def __rsub__(self, other):
return self.__neg__().__radd__(other)
def __add__(self, other):
if not isinstance(other, relativedelta):
raise TypeError, "unsupported type for add operation"
return relativedelta(years=other.years+self.years,
months=other.months+self.months,
days=other.days+self.days,
hours=other.hours+self.hours,
minutes=other.minutes+self.minutes,
seconds=other.seconds+self.seconds,
microseconds=other.microseconds+self.microseconds,
leapdays=other.leapdays or self.leapdays,
year=other.year or self.year,
month=other.month or self.month,
day=other.day or self.day,
weekday=other.weekday or self.weekday,
hour=other.hour or self.hour,
minute=other.minute or self.minute,
second=other.second or self.second,
microsecond=other.second or self.microsecond)
def __sub__(self, other):
if not isinstance(other, relativedelta):
raise TypeError, "unsupported type for sub operation"
return relativedelta(years=other.years-self.years,
months=other.months-self.months,
days=other.days-self.days,
hours=other.hours-self.hours,
minutes=other.minutes-self.minutes,
seconds=other.seconds-self.seconds,
microseconds=other.microseconds-self.microseconds,
leapdays=other.leapdays or self.leapdays,
year=other.year or self.year,
month=other.month or self.month,
day=other.day or self.day,
weekday=other.weekday or self.weekday,
hour=other.hour or self.hour,
minute=other.minute or self.minute,
second=other.second or self.second,
microsecond=other.second or self.microsecond)
def __neg__(self):
return relativedelta(years=-self.years,
months=-self.months,
days=-self.days,
hours=-self.hours,
minutes=-self.minutes,
seconds=-self.seconds,
microseconds=-self.microseconds,
leapdays=self.leapdays,
year=self.year,
month=self.month,
day=self.day,
weekday=self.weekday,
hour=self.hour,
minute=self.minute,
second=self.second,
microsecond=self.microsecond)
def __nonzero__(self):
return not (not self.years and
not self.months and
not self.days and
not self.hours and
not self.minutes and
not self.seconds and
not self.microseconds and
not self.leapdays and
self.year is None and
self.month is None and
self.day is None and
self.weekday is None and
self.hour is None and
self.minute is None and
self.second is None and
self.microsecond is None)
def __mul__(self, other):
f = float(other)
return relativedelta(years=self.years*f,
months=self.months*f,
days=self.days*f,
hours=self.hours*f,
minutes=self.minutes*f,
seconds=self.seconds*f,
microseconds=self.microseconds*f,
leapdays=self.leapdays,
year=self.year,
month=self.month,
day=self.day,
weekday=self.weekday,
hour=self.hour,
minute=self.minute,
second=self.second,
microsecond=self.microsecond)
def __eq__(self, other):
if not isinstance(other, relativedelta):
return False
if self.weekday or other.weekday:
if not self.weekday or not other.weekday:
return False
if self.weekday.weekday != other.weekday.weekday:
return False
n1, n2 = self.weekday.n, other.weekday.n
if n1 != n2 and not ((not n1 or n1 == 1) and (not n2 or n2 == 1)):
return False
return (self.years == other.years and
self.months == other.months and
self.days == other.days and
self.hours == other.hours and
self.minutes == other.minutes and
self.seconds == other.seconds and
self.leapdays == other.leapdays and
self.year == other.year and
self.month == other.month and
self.day == other.day and
self.hour == other.hour and
self.minute == other.minute and
self.second == other.second and
self.microsecond == other.microsecond)
def __ne__(self, other):
return not self.__eq__(other)
def __div__(self, other):
return self.__mul__(1/float(other))
def __repr__(self):
l = []
for attr in ["years", "months", "days", "leapdays",
"hours", "minutes", "seconds", "microseconds"]:
value = getattr(self, attr)
if value:
l.append("%s=%+d" % (attr, value))
for attr in ["year", "month", "day", "weekday",
"hour", "minute", "second", "microsecond"]:
value = getattr(self, attr)
if value is not None:
l.append("%s=%s" % (attr, `value`))
return "%s(%s)" % (self.__class__.__name__, ", ".join(l))

View File

@@ -1,26 +0,0 @@
import xbmc
import xbmcaddon
__addon_id__= 'script.xbmcbackup'
__Addon = xbmcaddon.Addon(__addon_id__)
def data_dir():
return __Addon.getAddonInfo('profile')
def log(message,loglevel=xbmc.LOGNOTICE):
xbmc.log(encode(__addon_id__ + ": " + message),level=loglevel)
def showNotification(message):
xbmc.executebuiltin("Notification(" + getString(30010) + "," + message + ",4000," + xbmc.translatePath(__Addon.getAddonInfo('path') + "/icon.png") + ")")
def getSetting(name):
return __Addon.getSetting(name)
def setSetting(name,value):
__Addon.setSetting(name,value)
def getString(string_id):
return __Addon.getLocalizedString(string_id)
def encode(string):
return string.encode('UTF-8','replace')

View File

@@ -1,256 +0,0 @@
'''
Convenience wrappers and extensions for some commonly used VFS functions
in XBMC addons. This module exposes all the functionality of xbmcvfs plus
some extra functions.
Copyright (C) 2012 Patrick Carey
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 json
import os
import xbmc
import xbmcvfs
import urllib
def walk(path):
'''
Reimplementation of os.walk using XBMC's jsonrpc API.
This has the nice added benefits of being able to walk remote
directories and inside compressed files such as rars/zips.
'''
dir_tree = [[path]]
current_depth = 0
not_dir = ['.zip','.xsp','.rar']
while True:
if current_depth > -1:
try:
current_path = dir_tree[current_depth].pop(0)
current_dirs, current_files = [], []
for x in listdir(current_path, extra_metadata=True):
file_ext = x['file'].split('.')[-1]
if x['filetype'] == 'directory' and not any(file_ext in s for s in not_dir):
current_dirs.append(urllib.unquote(x['file']))
else:
current_files.append(urllib.unquote(x['file']))
except IndexError:
current_depth -= 1
dir_tree.pop()
else:
yield (current_path, current_dirs, current_files)
if current_dirs:
current_depth += 1
dir_tree.append(current_dirs)
else:
break
def listdir(path, extra_metadata=False):
'''
Reimplementation of os.listdir using XBMC's jsonrpc API.
Returns a list of file/directory names from the specified path
Accepts an optional boolean 'extra_metadata' as the second argument
which will cause the function to instead return a list of dictionaries
containing all of the metadata about each file that was retrieved from
XBMC.
'''
fileList = []
json_response = xbmc.executeJSONRPC('{ "jsonrpc" : "2.0" , "method" : "Files.GetDirectory" , "params" : { "directory" : "%s" , "sort" : { "method" : "file" } } , "id" : 1 }' % path.encode('utf-8').replace('\\', '\\\\'))
jsonobject = json.loads(json_response)
if jsonobject.has_key('result') and jsonobject['result']['files']:
for item in jsonobject['result']['files']:
if extra_metadata:
fileList.append(item)
else:
fileList.append(item['file'])
return fileList
def copy(source, destination):
"""
copy(source, destination) -- Copy file to destination, returns true/false.
source : file to copy.
destination : destination file
example:
- success = vfs.copy(source, destination)
"""
return xbmcvfs.copy(source, destination)
def delete(path):
"""
delete(file) -- Delete file
file : file to delete
example:
- vfs.delete(file)
"""
return xbmcvfs.delete(path)
def exists(path):
"""
exists(path) -- Check if file exists, returns true/false.
path : file or folder
example:
- success = vfs.exists(path)
"""
return xbmcvfs.exists(path)
def mkdir(path):
"""
mkdir(path) -- Create a folder.
path : folder
example:
- success = vfs.mkdir(path)
"""
return xbmcvfs.mkdir(path)
def rename(source, target):
"""
rename(file, newFileName) -- Rename file, returns true/false.
file : file to reaname
newFileName : new filename, including the full path
example:
- success = vfs.rename(file, newFileName)
"""
return xbmcvfs.rename(source, target)
def rmdir(path):
"""
rmdir(path) -- Remove a folder.
path : folder
example:
- success = vfs.rmdir(path)
"""
return xbmcvfs.rmdir(path)
def comparepathlists(list1, list2, fullpath=False):
"""
comparepathlists(list1, list2) -- Compare two lists of paths
list1 : list, contains paths (local or remote, absolute or relative)
list2 : list, contains paths (local or remote, absolute or relative)
fullpath : boolean, set True to compare perform straight comparison of lists
set False (default) to compare on filename portions of each list
returns: dictionary:
common_items: list, contains paths of items common to both lists
list1_items: list, contains paths of items found only in list1
list2_items: list, contains paths of items found only in list2
example:
- compare = comparepathlists(list1, list2)
"""
# initialise dict to store results and temp data
results = {}
temp_data = {}
if fullpath:
temp_path = lambda x: x
else:
temp_path = lambda x: os.path.split(x)[1]
for path in list1:
temp_data['list1'].append(temp_path(path))
for path in list2:
temp_data['list2'].append(temp_path(path))
# get items not in list 2
results['list1_items'] = []
gen = (i for i, x in enumerate(temp_data['list1']) if not x in temp_data['list2'])
for i in gen:
results['list1_items'].append(list1[i])
# get items not in list 1
results['list2_items'] = []
gen = (i for i, x in enumerate(temp_data['list2']) if not x in temp_data['list1'])
for i in gen:
results['list2_items'].append(list2[i])
return results

View File

@@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<settings>
<category id="general" label="30011">
<setting id="addon_mode" type="enum" lvalues="30016|30017" default="0" label="30023" />
<setting id="remote_selection" type="enum" lvalues="30018|30019" default="0" label="30025"/>
<setting id="remote_path_2" type="text" label="30024" default="" visible="eq(-1,1)" />
<setting id="remote_path" type="folder" label="30020" visible="eq(-2,0)" />
<setting id="backup_name" type="text" label="30021" default="backup_date" visible="eq(-4,1)"/>
<setting id="run_silent" type="bool" label="30022" default="false" />
</category>
<category id="selection" label="30012">
<setting id="backup_addons" type="bool" label="30030" default="true" />
<setting id="backup_addon_data" type="bool" label="30031" default="false" />
<setting id="backup_database" type="bool" label="30032" default="true" />
<setting id="backup_playlists" type="bool" label="30033" default="true" />
<setting id="backup_thumbnails" type="bool" label="30034" default="true" />
<setting id="backup_config" type="bool" label="30035" default="true" />
</category>
<category id="scheduling" label="30013">
<setting id="enable_scheduler" type="bool" label="30060" default="false" />
<setting id="schedule_interval" type="enum" label="30061" lvalues="30072|30073|30074|30075" default="0" enable="eq(-1,true)"/>
<setting id="schedule_time" type="labelenum" label="30062" values="00:00|01:00|02:00|03:00|04:00|05:00|06:00|07:00|08:00|09:00|10:00|11:00|12:00|13:00|14:00|15:00|16:00|17:00|18:00|19:00|20:00|21:00|22:00|23:00" default="00:00" visible="!eq(-1,3)" enable="eq(-2,true)"/>
<setting id="day_of_week" type="enum" label="30063" lvalues="30065|30066|30067|30068|30069|30070|30071" default="0" visible="eq(-2,1)" enable="eq(-3,true)"/>
<setting id="cron_schedule" type="text" label="30064" default="0 0 * * *" visible="eq(-3,3)" enable="eq(-4,true)"/>
</category>
</settings>

View File

@@ -1,97 +0,0 @@
import xbmc
import datetime
import time
import os
import resources.lib.utils as utils
from resources.lib.croniter import croniter
from resources.lib.backup import XbmcBackup
class BackupScheduler:
enabled = "false"
next_run = 0
settings_update_time = 0
def __init__(self):
self.enabled = utils.getSetting("enable_scheduler")
if(self.enabled == "true"):
self.setup()
def setup(self):
#scheduler was turned on, find next run time
utils.log("scheduler enabled, finding next run time")
self.findNextRun(time.time(),True)
utils.log("scheduler will run again on " + datetime.datetime.fromtimestamp(self.next_run).strftime('%m-%d-%Y %H:%M'))
def start(self):
while(not xbmc.abortRequested):
current_enabled = utils.getSetting("enable_scheduler")
if(current_enabled == "true" and self.enabled == "false"):
#scheduler was just turned on
self.enabled = current_enabled
self.setup()
elif (current_enabled == "false" and self.enabled == "true"):
#schedule was turn off
self.enabled = current_enabled
elif(self.enabled == "true"):
#scheduler is still on
now = time.time()
if(self.next_run <= now):
if(utils.getSetting('run_silent') == 'false'):
utils.showNotification(utils.getString(30053))
#run the job in backup mode, hiding the dialog box
backup = XbmcBackup()
backup.run(XbmcBackup.Backup,True)
self.findNextRun(now,True)
else:
self.findNextRun(now)
time.sleep(10)
def findNextRun(self,now,forceUpdate = False):
mod_time = self.settings_update_time
#check if the schedule has been modified
try:
#get the last modified time of the file
mod_time = os.path.getmtime(xbmc.translatePath(utils.data_dir()) + "settings.xml")
except:
#don't do anything here
mod_time = self.settings_update_time
if(mod_time > self.settings_update_time or forceUpdate):
self.settings_update_time = mod_time
#find the cron expression and get the next run time
cron_exp = self.parseSchedule()
cron_ob = croniter(cron_exp,datetime.datetime.fromtimestamp(now))
new_run_time = cron_ob.get_next(float)
if(new_run_time != self.next_run):
self.next_run = new_run_time
utils.log("scheduler will run again on " + datetime.datetime.fromtimestamp(self.next_run).strftime('%m-%d-%Y %H:%M'))
def parseSchedule(self):
schedule_type = int(utils.getSetting("schedule_interval"))
cron_exp = utils.getSetting("cron_schedule")
hour_of_day = utils.getSetting("schedule_time")
hour_of_day = int(hour_of_day[0:2])
if(schedule_type == 0):
#every day
cron_exp = "0 " + str(hour_of_day) + " * * *"
elif(schedule_type == 1):
#once a week
day_of_week = utils.getSetting("day_of_week")
cron_exp = "0 " + str(hour_of_day) + " * * " + day_of_week
elif(schedule_type == 2):
#first day of month
cron_exp = "0 " + str(hour_of_day) + " 1 * *"
return cron_exp
BackupScheduler().start()

BIN
screenshots/screenshot1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
screenshots/screenshot2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
screenshots/screenshot3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
screenshots/screenshot4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

BIN
screenshots/screenshot5.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
screenshots/screenshot6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB