195 Commits

Author SHA1 Message Date
Rob Weber
5b57a3c0c3 added fix from helix 2015-05-08 19:52:39 -05:00
Andrew Brock
2dbc2fa71b Fix zip files getting an extra copy of each file on each run of the scheduler 2015-05-08 19:51:11 -05:00
Rob Weber
31ea62c9bc version bump 2014-11-21 13:33:59 -06:00
Rob Weber
7c740826c7 fixed dropbox rmfile type 2014-11-21 13:33:48 -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
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
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
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
91 changed files with 6449 additions and 2662 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
*.pyo
.project
.pydevproject

View File

@@ -1,23 +1,104 @@
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:
Remote Destination/File Selection:
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.
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 YYYYMMDDHHmm format so you can create multiple backups. You can keep a set number of backups by setting the integer value of the Backups to Keep setting greater than 0.
If you choose to compress your backups there are a few things you need to be aware of. Compressing takes place on the server you are trying to backup and then only the archive is copied to the remote backup location. This means you must have sufficient space available to allow for creating the archive. When restoring a zipped archive the process is the same. It is first copied to your local storage, extracted, and the contents put to their correct locations. The archive is then deleted. Zipped and non-zipped backups can be mixed in the same archive folder.
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.
You can also define non-XBMC directories on your device. See "Custom Directories" for more information on how these are handled.
Restores:
During the restore process there are a few checks and post-run procedures to know about.
The first is a version check. If you are restoring to a different version of XBMC than the one used to create the backup archive you'll get a warning. In most cases it is OK to proceed, just know that some specific items like addons and database files may not work correctly.
The next check is for an advancedsettings.xml file. If you've created this file and it exists in your restore archive you'll be asked to reboot XBMC. This is so that the file can be loaded and used for any special settings, mainly path substitutions, you may have had that would affect the rest of the restore. XBMC Backup will prompt you to continue the restore process when you reboot the program.
The last bit of post-processing is done after all the backup files have been restored. If you have restored your configuration files the addon will attempt to restore any system specific settings that it can from the guisettings.xml file. This is done by comparing the restored file with settings via the JSONPRC Settings.SetSettingValue method. Only system specific settings can be restored so you will get any custom views or skin specific settings back. See the FAQ for how to restore these.
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.
You can 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:
When using the "Shutdown" function this will call XBMC's Shutdown method as defined in System Settings -> Power Saving -> Shutdown Function. This can be simply exiting xbmc, hibernating, or shutting down your htpc.
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.
Running the Program:
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.
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 XBMC folders.
Custom Directories:
You can define custom directories that are not a part of your XBMC folder structure for backup. These create a custom_hash folder in your backup destination. The hash for these folders is very important. During a restore if the hash of the file path in Custom 1 does not match the hash in the restore folder it will not move the files. This is to prevent files from being restored to the wrong location in the event you change file paths in the addon settings. A dialog box will let you know if file paths do not match up.
Up to 2 Custom directories can be specified.
Using Dropbox:
Using Dropbox as a storage target adds a few steps the first time you wish to run a backup. First you will need to sign-up for you own developer app key and secret by visiting https://www.dropbox.com/developers. Name your app whatevery you want, and make it an "App Folder" type application. Your app can run in developer mode and you should never need to apply for production status. This is to get around Dropbox's rule not allow distribution of production key/secret pairs.
Once you have your app key and secret add them to the settings. XBMC Backup now needs to have permission to access your Dropbox account. When you see the prompt regarding the Dropbox URL Authorization DO NOT click OK. Check your XBMC log file for a line from "script.xbmcbackup" containing the authorization URL. Cut/paste this into a browser and click Allow. Once this is done you can click "OK" in XBMC and proceed as normal. XBMC Backup will cache the authorization code so you only have to do this once, or if you revoke the Dropbox permissions.
Scripting XBMC Backup:
If you wish to script this addon using an outside scheduler or script it can be given parameters via the Xbmc.RunScript() or JsonRPC.Addons.ExecuteAddon() methods. Parameters given are either "backup" or "restore" to launch the correct program mode. If mode is "restore", an additional "archive" parameter can be given to set the restore point to be used instead of prompting via the GUI. An example would be:
Python code:
-------------------------------------------
RunScript(script.xbmcbackup,mode=backup)
-------------------------------------------
or
JSON Request:
-------------------------------------------
{ "jsonrpc": "2.0", "method": "Addons.ExecuteAddon","params":{"addonid":"script.xbmcbackup","params":{"mode":"restore","archive":"000000000000"}}, "id": 1 }
-------------------------------------------
There is also a windows parameter that can be used to check if XBMC Backup is running within a skin or from another program. It is attached to the home window, an example of using it would be the following:
Python code:
-------------------------------------------
#kick off the xbmc backup
xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "method": "Addons.ExecuteAddon","params":{"addonid":"script.xbmcbackup","params":{"mode":"backup"}}, "id": 1 }')
#sleep for a few seconds to give it time to kick off
xbmc.sleep(10000)
window = xbmcgui.Window(10000)
while (window.getProperty('script.xbmcbackup.running') == 'true'):
#do something here, probably just sleep for a few seconds
xbmc.sleep(5000)
#backup is now done, continue with script
-------------------------------------------
FAQ:
I can't see any restore points when choosing "Restore", what is the problem?
If you've created restore points with an older version of the addon (pre 0.3.6) you may see this issue. New versions of the addon look for a file called xbmcbackup.val to validate that a folder is a valid restore archive. Your older restore folders may not have this file. All you need to do is create a blank text file and rename it to xbmcbackup.val. Then put this file inside the archive directory. Your restore points should show up after selecting "Restore" in the addon again.
Several settings aren't being restored, this includes views, weather, etc. How do I get these back?
GUISETTINGS.xml is a configuration file used heavily by XBMC for remembering GUI specific settings. Due to the fact that XBMC reads this file on startup, and writes from memory to this file on shutdown; it is not possible to restore this file while XBMC is running. This addon attempts to restore what settings it can via the JSONRPC interface, however you will still most likely be missing your specific skin settings and view settings. To get these back you must manually move this file from your backup archives if you wish to restore it. User SouthMark has posted the following steps for restoring in the OpenELEC system where this is more difficult:
1. Run the restore of your backup
2. SSH using putty to the IP Address of your media centre username: root Password openelec
3. Type "systemctl stop xbmc.service" - Your media center machine should now go blank
5. Connect to your machine using WinSCP and copy the guisettings.xml file to the userdata folder (this is the guisettings.xml file from your backup), alternatively you can copy this file directly to an SMB share and use putty to move it to the right spot.
6. go back to your putty window and type "systemctl start xbmc.service"
Why is the Addon prompting me to restart XBMC to continue?
If you have an advancedsettings file in your restore folder the addon will ask you if you want to restore this file and restart xbmc to continue. This is because the advancedsettings file may contain path substitution information that you want to be loaded when doing the rest of your restore. By restoring this file and restarting xbmc it will be loaded and the rest of your files will go where they are supposed to. If you know your file does not contain any path substitutions you can select "no" and continue as normal.

View File

@@ -1,37 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="script.xbmcbackup"
name="XBMC Backup" version="0.1.7" provider-name="robweber">
name="XBMC Backup" version="0.6.1" provider-name="robweber">
<requires>
<import addon="xbmc.python" version="2.0"/>
<import addon="xbmc.python" version="2.14.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="ar">إنسخ إحتياطياً قاعده بيانات إكس بى إم سى وملفات اﻹعدادات فى حاله وقوع إنهيار مع إمكانيه اﻹسترجاع</summary>
<summary lang="be">Backup and restore your XBMC database and configuration files in the event of a crash or file corruption.</summary>
<summary lang="bg">Добавката може да създава резервно копие на XBMC и възстановява (след това) Вашата база от данни и настройки, в случай на необходимост.</summary>
<summary lang="ca">Feu còpies de seguretat i restaureu la vostra base de dades de l'XBMC i dels fitxers de configuració en el cas de fallada o corrupció dels fitxers.</summary>
<summary lang="cs">Zálohování a obnovení XBMC databáze a konfiguračních souborů v případě chyby nebo poškození souborů.</summary>
<summary lang="da">Sikkerhedskopiér og genskab din XBMC database og konfigurationsfiler i tilfælde af et nedbrud eller en ødelagt fil.</summary>
<summary lang="de">Die XBMC Datenbank sichern und bei Dateiverlust oder Beschädigung wiederherstellen.</summary>
<summary lang="el">Δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων και των ρυθμίσεων του XBMC για την πιθανότητα σφαλμάτων ή καταστροφής αρχείων.</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="en_NZ">Backup and restore your XBMC database and configuration files in the event of a crash or file corruption.</summary>
<summary lang="en_US">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="eu">XBMC datu-basea eta konfigurazio fitxategien babes-kopia egin kraskatze edo fitxategi hondamena saihesteko</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="fr_CA">Sauvegarder et restaurer votre base de données et vos fichiers de configuration XBMC dans le cas d'un plantage ou d'une corruption de fichier.</summary>
<summary lang="gl">Crear copia de seguranza e restaurar a base de datos e ficheiros de configuración de XBMC no caso dun fallo ou corrupción de ficheiros.</summary>
<summary lang="he">גיבוי ושחזור מסד הנתונים וקבצי ההגדרות של XBMC במקרה של קריסה או קבצים פגומים.</summary>
<summary lang="hr">Sigurnosno kopirajte i obnovite vašu XBMC bazu podataka i datoteke podešavanja prilikom rušenja ili oštećenja datoteka.</summary>
<summary lang="hu">Biztonsági mentés készítése az XBMC adatbázisról és a beállítófájlokról vagy állítsa helyre azokat egy rendszerösszeomlás vagy adatvesztés után.</summary>
<summary lang="id">Cadangkan dan kembalikan basis data XBMC Anda beserta berkas konfigurasi apabila terjadi kerusakan atau korupsi berkas.</summary>
<summary lang="it">Effettua il backup o ripristina il tuo database di XBMC e i file di configurazione qualora si verifichi una chiusura imprevista o un danneggiamento dei file.</summary>
<summary lang="ja">システムのクラッシュやファイル破損に備えて、XBMC のデータベースや設定ファイルをバックアップ・リストアできます。</summary>
<summary lang="ko">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="nl">Back-up en herstel je XBMC database en configuratiebestanden in geval van een crash of bestandscorruptie.</summary>
<summary lang="no">Sikkerhetskopier og gjenopprett dine XBMC-databaser og -konfigurasjonsfiler i tilfelle et krasj eller filkorrupsjon.</summary>
<summary lang="pl">Stwórz kopię bezpieczeństwa oraz przywróć twoją bazę danych XBMC łącznie z plikami konfiguracyjnymi, w przypadku awarii lub uszkodzenia plików.</summary>
<summary lang="pt">Crie cópias de segurança da base de dados do XBMC e dos ficheiros de configuração. Pode restaurar o conteúdo se ocorrer um crash ou corrupção de ficheiros.</summary>
<summary lang="pt_BR">Faça 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="ru">Сохраняйте и восстанавливайте базу данных и конфигурационные файлы XBMC, чтоб не допустить потерю данных в случае аварии или повреждений файлов.</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>
<summary lang="zh">备份和恢复 XBMC 数据库和配置文件,以防范系统崩溃或文件损坏问题。</summary>
<description lang="ar">أسبق لك ان أضعت تخصيصاتك المفضله ورغبت لو كان بإمكانك نسخهم إحتياطياً ؟ اﻷن بات بإمكانك ذلك. يمكنك إستخراج قاعده بياناتك وقوائم التشغيل والملحقات وتخصيصاتك المفضله وغيره الى اى مصدر خارجى قابل للكتابه من قِبَل إكس بى إم سى او مباشرتاً الى نظام تخزين سحابى. يمكنك تفعيل النسخ اﻹحتياطى عند الحاجه او جدولته مُسبقاً</description>
<description lang="be">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 or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. </description>
<description lang="bg">Някога да сте губили всички настройки, които сте правили по XBMC? А разполагахте ли с резервно копие? Е сега можете да създавате резервни копия само с едно кликване. Можете да изнасяте базата от данни, плейлистите, миниатюрите, добавките и други, на всяко място до което XBMC има права за писане или директно в Dropbox. Можете да настроите и автоматично създаване на копия през определен интервал от време.</description>
<description lang="ca">Alguna vegada s'ha carregat la seva configuració de l'XBMC i ha desitjat tenir una còpia de seguretat? Ara pot fer-ho amb un simple clic. Pot exportar la seva base de dades, llista de reproducció, miniatures, complements i altres detalls de la configuració a qualsevol font que pugui ser escrita per l'XBMC o directament a l'emmagatzematge en el núvol Dropbox. Les còpies de seguretat es poden executar sota demanda o per mitjà d'un planificador.</description>
<description lang="da">Har du prøvet at slette din XBMC opsætning, og ønsket at du havde haft sikkerhedskopi? Nu kan du få det med et enkelt klik. Du kan eksportere din database, afspilninglister, miniaturebilleder, addons og andre opsætningsdetaljer til enhver kilde, som er skrivbar for XBMC eller direkt til Dropbox cloud lager. Sikkerhedskopier kan køres manuelt eller via en tidsplan.</description>
<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="el">Σας έτυχε ποτέ να χάσετε τις ρυθμίσεις του XBMC και να εύχεστε να είχατε αντίγραφο ασφαλείας; Πλέον μπορείτε με ένα απλό κλικ. Μπορείτε να εξάγετε τη βάση δεδομένων, τις λίστες αναπαραγωγής, τις μικρογραφίες, τα πρόσθετα και άλλες λεπτομέρειες της εγκατάστασης σε οποιαδήποτε πηγή στην οποία μπορεί να γράψει το XBMC, ή απευθείας στο λογαριασμό σας στο Dropbox. Τα αντίγραφα μπορούν να γίνονται κατ' επιλογή ή μέσω προγραμματισμού.</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 or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. </description>
<description lang="en_NZ">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 or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. </description>
<description lang="en_US">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 or directly to Dropbox cloud storage. Backups can be run on demand or via a scheduler. </description>
<description lang="es">¿Alguna vez te has cargado la configuración de XBMC y habrías deseado tener una copia de seguridad? Ahora puedes tenerla con un único click. Exporta tus base de datos, listas de reproducción, miniaturas, addons y resto de configuraciones a cualquier fuente accesible por XBMC o a tu almacenamiento en Dropbox. Las copias de seguridad pueden programarse o realizarse bajo demanda.</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="fr_CA">Avez-vous déjà ruiné votre configuration XBMC et souhaité avoir une sauvegarde? Vous le pouvez maintenant en un seul clic. Vous pouvez exporter vos base de données, liste de lecture, imagettes, addiciels et autres détails de configurations vers n'importe quelle source inscriptible depuis XBMC ou directement vers le stockage en nuage Dropbox. Les sauvegardes peuvent être exécutées sur demande ou à l'aide d'un ordonnanceur.</description>
<description lang="gl">De seguro que algunha vez eliminou a configuración do XBMC e desexou ter unha copia de seguranza?. Agora pode cun só clic. Pode exportar a súa base de datos, listaxes de reprodución, miniaturas, complementos e outros detalles da configuración a calquera medio escribíbel ou directamente ao Dropbox. As copias de seguranza pódense executar baixo demanda ou programadas.</description>
<description lang="he">האם אי פעם נפגמו הגדרות XBMC וייחלת שהיה לך גיבוי ? כעת אתה יכול ליצור כזה בלחיצת כפתור קלילה. ניתן לייצא את בסיס הנתונים, רשימות ההשמעה, התמונות הממוזערות, הרחבות והגדרות נוספות לכל יעד שיש ל-XBMC הרשאת כתיבה לו או ישירות לשירות אחסון הענן דרופבוקס. ניתן לתזמן מראש גיבויים או להריצם ידנית.</description>
<description lang="hr">Jeste li ikada oštetili vaša XBMC podešavanja i poželjeli ste ih obnoviti iz sigurnosne kopije? Sada to možete jednim klikom. Možete izvesti vašu bazu podataka, popis izvođenja, minijature, dodatke i ostale pojedinosti podešavanja na svaki izvor dostupan XBMC-u ili izravno na Dropbox oblak pohrane. Sigurnosno kopiranje se može pokrenuti na zahtjev ili u planiranom vremenu.</description>
<description lang="hu">Sikerült már összekutyulni az XBMC beállításait és jó lett volna egy biztonsági mentés? Most megteheti egy kattintással. Exportálhatja az adatbázisait, lejátszáslistáit, könyvjelzőit, kiegészítőit és egyéb beállításokat bármely, az XBMC által írható tárhelyre vagy közvetlenül a Dropbox felhő tárolóba. A mentések kézzel vagy időzítetten indíthatóak.</description>
<description lang="id">Pernah membuat berantakan konfigurasi XBMC Anda dan berharap Anda punya cadangannya? Sekarang Anda dapat melakukannya dengan klik mudah. Anda dapat mengekspor basis data, daftar putar, gambar kecil, addon dan rincian konfigurasi lainnya ke sumber mana saja yang dapat ditulis oleh XBMC atau langsung ke penyimpanan awan Dropbox. Pencadangan dapat dijalankan sesuai permintaan atau terjadwal.</description>
<description lang="it">Hai mai distrutto la tua configurazione di XBMC ma non ne avevi una copia di backup? Ora puoi farlo con un semplice click. Puoi esportare il tuo database, le playlist, le anteprime, gli add-on ed altre configurazioni su ogni percorso accessibile da XBMC o direttamente su Dropbox. I backup si possono fare a richiesta o possono essere pianificati.</description>
<description lang="ja">XBMCの設定が消えてしまい、バックアップをとっておけば... と思ったことはありますかこれからは1クリックで簡単にバックアップできます。データベース、プレイリスト、サムネール、アドオン、その他設定項目を、XBMC が書き込み可能なメディアに書き出せます。Dropbox クラウドストレージにも直接書き出せます。スケジューラによる自動バックアップと、オンデマンドでのバックアップの両方が使えます。</description>
<description lang="ko">XBMC 설정 백업본이 있었으면 하고 원했던 적이 있습니까? 이제 한 번의 클릭으로 가능합니다. 데이터베이스, 재생목록, 썸네일, 애드온과 기타 세부 설정을 어디에나 내보내거나 직접 Dropbox 에 저장할 수 있습니다. 백업은 수동 또는 예약으로 실행할 수 있습니다.</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="nl">Ooit je XBMC configuratie verknalt en gewenst dat je een backup had? Nu kan dat met een simpele klik. Je kunt je bibliotheek, afspeellijsten, miniaturen, addons en andere configuratie optes exporteren naar elke bron die door XBMC beschrijfbaar is of direct naar een Dropbox cloud opslag. Backups kunnen op verzoek of via een rooster gedraaid worden.</description>
<description lang="no">Har du noen gang ødelagt XBMC-installasjonen din og ønsket at du hadde en sikkerhetskopi? Det kan du nå med et enkelt trykk. Du kan eksportere din database, spillelister, miniatyrer, utvidelser og andre konfigurasjonsdetaljer til enhver kilde som er tilgjengelig for XBMC eller til Dropbox. Du kan lage sikkerhetskopier ved behov eller med en timeplan.</description>
<description lang="pl">Straciłeś kiedyś swoją konfigurację XBMC i marzyłeś o kopii zapasowej? Teraz już możesz i to w prosty sposób. Możesz eksportować swoją bazę, listy odtwarzania, miniatury, wtyczki oraz wiele więcej do dowolnego źródła bezpośrednio z XBMC. Kopia bezpieczeństwa może być uruchomiona na żądanie lub wg harmonogramu.</description>
<description lang="pt">Já arruinou a sua configuração do XBMC e desejou ter feito uma cópia de segurança? Agora pode, com apenas um clique. Exporte a base de dados, listas de reprodução, miniaturas, add-ons e outras configurações para qualquer fonte acedível pelo XBMC. As cópias de segurança podem ser executadas manualmente ou por temporizador.</description>
<description lang="pt_BR">Sempre se preocupou com sua configuração do XBMC e desejou ter um backup? Agora você pode com um simples clique. Você pode exportar seu banco de dados, listas de reprodução, miniaturas, addons e outros detalhes de configuração para qualquer fonte gravável pelo XBMC ou diretamente ao armazenamento na nuvem Dropbox. Os backups podem ser executados sob demanda ou por agendamento.</description>
<description lang="ru">Хотите получить резервную копию настроек XBMC? Теперь можете это сделать одним щелчком мыши. Вы можете выгрузить вашу базу данных, плейлисты, эскизы, дополнения и другую нужную Вам информацию и сохранить её с помощью XBMC или выгрузить в облачное хранилище Dropbox. Резервную копию можно сделать по требованию или запускать по расписанию.</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>
<description lang="zh">你是否经常折腾你的 XBMC因而希望能够有个备份你可以把资料库、播放列表、缩略图、插件和其他配置细节导出到 XBMC 可以写入的任意位置。备份可以按需运行或通过计划任务执行。</description>
<language></language>
<platform>all</platform>
<license>The MIT License</license>
<forum>http://forum.xbmc.org/showthread.php?tid=129499</forum>
<source>https://github.com/robweber/xbmcbackup</source>
</extension>
</addon>

View File

@@ -1,20 +1,198 @@
[b]Version 0.1.7[/b]
Version 0.6.0
fix for growing backups - thanks brokeh
Version 0.6.0
fixed typo in Dropbox rmfile command
Version 0.5.9
fixed dropbox unicode error
create restored version of guisettings for easy local restoration
Version 0.5.8.7
allow limited updating of guisettings file through json
Version 0.5.8.6
show notification if some files failed
check if destination is writeable - thanks war59312
Version 0.5.8.5
added custom library nodes to config backup options - thanks Ned Scott
Version 0.5.8.4
backup compression should use zip64 as sizes may be over 2GB
need to expand out path -bugfix
Version 0.5.8
fixes path substitution errors
Version 0.5.7
added option to compress backups, uses local source for staging the zip before sending to remote
Version 0.5.6
fix dropbox delete recursion error - thanks durd
updated language files
Version 0.5.5
fix for dropbox errors during repeated file upload attempts
Version 0.5.4
check xbmc version when doing a restore
Version 0.5.3
updated python version
Version 0.5.2
added additional script and window parameters, thanks Samu-rai
critical error in backup rotation
updated progress bar display
Version 0.5.1
updated for new Gotham xbmc python updates
Version 0.5.0
New Version for Gotham
Version 0.4.6
modified backup folder names to include time, also modified display listing
Version 0.4.5
added version info to logs
added try/catch for unicode errors
Version 0.4.4
modified the check for invalid file types
Version 0.4.3
added error message if remote directory is blank
added license tag
Version 0.4.2
Added support for userdata/profiles folder - thanks TUSSFC
Version 0.4.1
added encode() around notifications
Version 0.4.0
fixed settings display error - thanks zer04c
Version 0.3.9
added "just once" scheduler for one-off type backups
show notification on scheduler update
updated language files from Transifex
Version 0.3.8
added advancedsettings check on restore. prompts user to restore only this file and restart xbmc to continue. This fixes issues where path substitution was not working during restores - thanks ctrlbru
Version 0.3.7
added optional addon.xml tags
update language files from Transifex
Version 0.3.6
added up to 2 custom directories, can be toggled on/off
added a check for backup verification before rotation - no more deleting non backup related files
use monitor class for onSettingsChanged method
Version 0.3.5
test of custom directories - only 1 at the moment
Version 0.3.4
added ability to take parameters via RunScript() or JSONRPC.Addons.ExecuteAddon()
Version 0.3.3
updated xbmc python version (2.1.0)
Version 0.3.2
added settings for user provided Dropbox key and secret
Version 0.3.1
added try/except for multiple character encodings
remove token.txt file if Dropbox Authorization is revoked
can shutdown xbmc after scheduled backup
Version 0.3.0
major vfs rewrite
Added Dropbox as storage target
updated gui/removed settings - thanks SFX Group for idea!
Version 0.2.3
first official frodo build
Version 0.2.2
fix for backup rotation sort
Version 0.2.1
added ability to rotate backups, keeping a set number of days
Version 0.2.0
removed the vfs.py helper library
default.py file now uses xbmcvfs python library exclusively for listing directories and copy operations
Version 0.1.7
minor bug fixes and translations updates
[b]Version 0.1.6[/b]
Version 0.1.6
merged scheduler branch with master, can now schedule backups on an interval
[b]Version 0.1.5[/b]
Version 0.1.5
pulled xbmcbackup class into separate library
[b]Version 0.1.4[/b]
Version 0.1.4
added more verbose error message for incorrect paths
[b]Version 0.1.3[/b]
Version 0.1.3
backup folder format - thanks zeroram
@@ -26,59 +204,53 @@ 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]
Version 0.1.2
added French language translation - thanks mikebzh44
added some utf-8 encoding tags to filenames
[b]Version 0.1.1[/b]
Version 0.1.1
added check for key in vfs.py - Thanks Martijn!
[b]Version 0.1.0[/b]
Version 0.1.0
removed transparency from icon.png
[b]Version 0.0.9 [/b]
Version 0.0.9
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]
Version 0.0.8
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]
Version 0.0.7
removed "restore.txt" file and now write file listing to memory list instead
[b]Version 0.0.6[/b]
Version 0.0.6
Added the vfs module created by paddycarey
File Selection is now followed for both backup and restore options
[b]Version 0.0.5[/b]
Version 0.0.5
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]
Version 0.0.4
Finished code for restore mode.
[b]Version 0.0.3[/b]
Version 0.0.3
Added progress bar and "silent" option for running on startup or as a script
[b]Version 0.0.2[/b]
Version 0.0.2
First version, should backup directories as needed

View File

@@ -1,7 +1,73 @@
import urlparse
import xbmcgui
import resources.lib.utils as utils
from resources.lib.backup import XbmcBackup
#run the profile backup
backup = XbmcBackup()
def get_params():
param = {}
if(len(sys.argv) > 1):
for i in sys.argv:
args = i
if(args.startswith('?')):
args = args[1:]
param.update(dict(urlparse.parse_qsl(args)))
return param
if(backup.isReady()):
backup.run()
#the program mode
mode = -1
params = get_params()
if("mode" in params):
if(params['mode'] == 'backup'):
mode = 0
elif(params['mode'] == 'restore'):
mode = 1
#if mode wasn't passed in as arg, get from user
if(mode == -1):
#figure out if this is a backup or a restore from the user
mode = xbmcgui.Dialog().select(utils.getString(30010) + " - " + utils.getString(30023),[utils.getString(30016),utils.getString(30017)])
#check if program should be run
if(mode != -1):
#run the profile backup
backup = XbmcBackup()
if(backup.remoteConfigured()):
if(mode == backup.Restore):
#get list of valid restore points
restorePoints = backup.listBackups()
pointNames = []
folderNames = []
for aDir in restorePoints:
pointNames.append(aDir[1])
folderNames.append(aDir[0])
selectedRestore = -1
if("archive" in params):
#check that the user give archive exists
if(params['archive'] in folderNames):
#set the index
selectedRestore = folderNames.index(params['archive'])
utils.log(str(selectedRestore) + " : " + params['archive'])
else:
utils.showNotification(utils.getString(30045))
utils.log(params['archive'] + ' is not a valid restore point')
else:
#allow user to select the backup to restore from
selectedRestore = xbmcgui.Dialog().select(utils.getString(30010) + " - " + utils.getString(30021),pointNames)
if(selectedRestore != -1):
backup.selectRestore(restorePoints[selectedRestore][0])
backup.run(mode)
else:
#can't go any further
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30045))
utils.openSettings()

2
resources/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.pyo

View File

@@ -1,48 +1,39 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Afrikaans language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/af/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Rugsteun</string>
<string id="30011">Algemeen</string>
<string id="30012">Lêer Seleksie</string>
<string id="30013">Skedulering</string>
<string id="30016">Rugsteun</string>
<string id="30017">Herstel</string>
<string id="30023">Modus</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Sleutel</string>
<string id="30029">Dropbox Geheim</string>
<string id="30032">Databasis</string>
<string id="30033">Speellys</string>
<string id="30036">Verpersoonlikte Gids 1</string>
<string id="30037">Verpersoonlikte Gids 2</string>
<string id="30059">Besoek https://www.dropbox.com/developers</string>
<string id="30062">Uur van Dag</string>
<string id="30063">Dag van Week</string>
<string id="30064">Cron Skedule</string>
<string id="30065">Sondag</string>
<string id="30066">Maandag</string>
<string id="30067">Dinsdag</string>
<string id="30068">Woensdag</string>
<string id="30069">Donderdag</string>
<string id="30070">Vrydag</string>
<string id="30071">Saterdag</string>
<string id="30072">Elke Dag</string>
<string id="30073">Elke Week</string>
<string id="30074">Eerste Dag van Maand</string>
<string id="30075">Pasgemaakte Skedule</string>
<string id="30079">Net Vandag</string>
<string id="30080">Profiele</string>
<string id="30085">Weergawe Waarskuwing</string>
</strings>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Albanian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/sq/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">I përgjithsëm</string>
<string id="30023">Mënyra</string>
<string id="30032">Baza e të dhënave</string>
<string id="30033">Lista e Lojës</string>
<string id="30065">E Diel</string>
<string id="30066">E Hënë</string>
<string id="30067">E Martë</string>
<string id="30068">E Mërkurë</string>
<string id="30069">E Ejnte</string>
<string id="30070">E Premte</string>
<string id="30071">E Shtunë</string>
<string id="30080">Profile</string>
</strings>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Amharic language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/am/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">ባጠቃላይ</string>
<string id="30023">ዘዴ </string>
<string id="30032">ዳታቤዝ</string>
<string id="30033">የሚጫወተው ዝርዝር </string>
<string id="30062">ሰአት </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="30080">ገጽታዎች </string>
</strings>

View File

@@ -1,48 +1,47 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Arabic language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ar/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">نسخ إكس بى إم سى اﻹحتياطى</string>
<string id="30011">عام</string>
<string id="30012">تحديد الملف</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="30023">الوضع</string>
<string id="30024"> مسار نوع خارجي</string>
<string id="30025">نوع مسار خارجي</string>
<string id="30027">صندوق اﻹسقاط</string>
<string id="30030">ملحقات المُستخدم</string>
<string id="30032">قاعدة البيانات</string>
<string id="30033">قائمة التشغيل</string>
<string id="30040">إختر "نعم" ﻹسترجاع هذا الملف ثم إعاده تشغيل إكس بى إم سى</string>
<string id="30041">إختر "لا" للمتابعه</string>
<string id="30042">إستكمال اﻹسترجاع</string>
<string id="30043">نسخ إكس بى إم سى اﻹحتياطى إكتشف وجود حاله إسترجاع غير مُنتهيه</string>
<string id="30044">أترغب بالمتابعه ؟</string>
<string id="30051">يُنشِئ قائمه بالملفات</string>
<string id="30053">يبدأ النسخ اﻹحتياطى المجدول</string>
<string id="30054">يَحَذِف ملفات النسخ اﻹحتياطى</string>
<string id="30059">تفضل بزياره موقع https://www.dropbox.com/developers</string>
<string id="30060">تفعيل الجدوله</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="30076">أطفئ بعد النسخ اﻹحتياطى</string>
<string id="30077">أعد تشغيل إكس بى إم سى</string>
<string id="30078">يتوجب عليك إعاده تشغيل إكس بى إم سى للمتابعه</string>
<string id="30080">الملفات الشخصية</string>
</strings>

View File

@@ -1,48 +1,51 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Basque language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/eu/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Babes-kopia</string>
<string id="30011">Orokorra</string>
<string id="30012">Fitxategi hautapena</string>
<string id="30013">Plangintza</string>
<string id="30016">Babes-kopia</string>
<string id="30017">Berrezarri</string>
<string id="30018">Arakatu bidea</string>
<string id="30021">Babes-kopia karpeta izena</string>
<string id="30023">Modua</string>
<string id="30024">Idatzi Urruneko bidea</string>
<string id="30025">Urruneko bide mota</string>
<string id="30026">Mantentzeko babes-kopiak (0 denentzat)</string>
<string id="30030">Erabiltzaile gehigarriak</string>
<string id="30031">Gehigarri data</string>
<string id="30032">Datu basea</string>
<string id="30033">Zerrenda</string>
<string id="30035">Konfigurazio fitxategiak</string>
<string id="30045">Errorea: Urruneko bidea ez dago</string>
<string id="30046">Abiarazten</string>
<string id="30047">Karpeta lokala</string>
<string id="30048">Urruneko karpeta</string>
<string id="30049">Fitxategi zerrenda biltzen</string>
<string id="30050">Urruneko bidea badago - fitxategi zaharrak eduki ditzake!</string>
<string id="30051">Fitxategi zerrenda sortzen</string>
<string id="30052">Fitxategia idazten</string>
<string id="30053">Plangintzadun babes-kopia abiarazten</string>
<string id="30054">Babeskopia ezabatzen</string>
<string id="30060">Gaitu plangintza</string>
<string id="30061">Plangintza</string>
<string id="30062">Eguneko ordua</string>
<string id="30063">Asteko eguna</string>
<string id="30064">Cron plangintza</string>
<string id="30065">Igandea</string>
<string id="30066">Astelehena</string>
<string id="30067">Asteartea</string>
<string id="30068">Asteazkena</string>
<string id="30069">Osteguna</string>
<string id="30070">Ostirala</string>
<string id="30071">Larunbata</string>
<string id="30072">Egunero</string>
<string id="30073">Astero</string>
<string id="30074">Hilabeteko lehen egunean</string>
<string id="30075">Plangintza pertsonalizatua</string>
<string id="30080">Profilak</string>
</strings>

View File

@@ -1,48 +1,73 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Belarusian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/be/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<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="30023">Mode</string>
<string id="30024">Type Remote Path</string>
<string id="30025">Remote Path Type</string>
<string id="30026">Backups to keep (0 for all)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Key</string>
<string id="30029">Dropbox Secret</string>
<string id="30030">User Addons</string>
<string id="30031">Addon Data</string>
<string id="30032">Database</string>
<string id="30033">Сьпіс прайграваньня</string>
<string id="30034">Thumbnails/Fanart</string>
<string id="30035">Config Files</string>
<string id="30036">Custom Directory 1</string>
<string id="30037">Custom Directory 2</string>
<string id="30038">Advanced Settings Detected</string>
<string id="30039">The advancedsettings file should be restored first</string>
<string id="30040">Select Yes to restore this file and restart XBMC</string>
<string id="30041">Select No to continue</string>
<string id="30042">Resume Restore</string>
<string id="30043">XBMC Backup has detected an unfinished restore</string>
<string id="30044">Would you like to continue?</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="30054">Removing backup</string>
<string id="30056">Check log for Dropbox authorize URL</string>
<string id="30057">Click OK when authorized</string>
<string id="30058">Dropbox Developer Code Needed</string>
<string id="30059">Visit https://www.dropbox.com/developers</string>
<string id="30060">Enable Scheduler</string>
<string id="30061">Расклад</string>
<string id="30062">Hour of Day</string>
<string id="30063">Дзень тыдня</string>
<string id="30064">Cron Schedule</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">Custom Schedule</string>
<string id="30076">Shutdown After Backup</string>
<string id="30077">Restart XBMC</string>
<string id="30078">You should restart XBMC to continue</string>
<string id="30080">Профілі</string>
</strings>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Bosnian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/bs/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">Opšte</string>
<string id="30023">Režim</string>
<string id="30032">Baza podataka</string>
<string id="30033">Spisak za rep.</string>
<string id="30065">Nedjelja</string>
<string id="30066">Ponedjeljak</string>
<string id="30067">Utorak</string>
<string id="30068">Srijeda</string>
<string id="30069">Četvrtak</string>
<string id="30070">Petak</string>
<string id="30071">Subota</string>
<string id="30080">Profili</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Bulgarian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/bg/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backup</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="30026">Колко резервни копия да бъдат съхранявани (0 за всички)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox ключ</string>
<string id="30029">Dropbox секретен ключ</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="30036">Персонална директория 1</string>
<string id="30037">Персонална директория 1</string>
<string id="30038">Засечени са допълнителни настройки</string>
<string id="30039">Първо трябва да бъде възстановен файла "advancedsettings.xml"</string>
<string id="30040">Изберете "Да" за възстановяване от файла и рестартиране на XBMC</string>
<string id="30041">Изберете "Не" за да продължите</string>
<string id="30042">Възобнови</string>
<string id="30043">XBMC Backup засече незавършено възстановяване</string>
<string id="30044">Искате ли да продължите?</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="30054">Премахване на резервно копие</string>
<string id="30056">За оторизационния URL адрес за Dropbox проверете дневника</string>
<string id="30057">След оторизирането натиснете "Добре"</string>
<string id="30058">Необходим е код за разработчик за Dropbox</string>
<string id="30059">Посетете https://www.dropbox.com/developers</string>
<string id="30060">Активирай планировчика</string>
<string id="30061">Планиране</string>
<string id="30062">Час</string>
<string id="30063">Ден</string>
<string id="30064">Cron планиране</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>
<string id="30076">Изключвай XBMC след създаването на резервно копиране</string>
<string id="30077">Рестартиране на XBMC</string>
<string id="30078">Необходимо е да рестартирате XBMC за да продължите</string>
<string id="30079">Само днес</string>
<string id="30080">Профили</string>
<string id="30081">Планировчика ще стартира отново на</string>
<string id="30082">Лента за напредъка</string>
<string id="30083">Лента за напредъка на заден план</string>
<string id="30084">Без (тих режим)</string>
<string id="30085">Предупреждение за версията</string>
<string id="30086">Версията на XBMC, която ползвате е различна, от тази която се намира в архива</string>
</strings>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Burmese language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/my/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">ယေဘုယျ</string>
</strings>

View File

@@ -1,48 +1,78 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Catalan language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ca/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backup</string>
<string id="30011">General</string>
<string id="30012">Sel·lecció de fitxers</string>
<string id="30013">Planificació</string>
<string id="30016">Còpia de seguretat</string>
<string id="30017">Restauració</string>
<string id="30018">Navega per la ruta</string>
<string id="30019">Tipus de ruta</string>
<string id="30020">Navega per la ruta remota</string>
<string id="30021">Nom de la carpeta de la còpia de seguretat</string>
<string id="30023">Mode</string>
<string id="30024">Tipus de ruta remota</string>
<string id="30025">Tipus de ruta remota</string>
<string id="30026">Còpies de seguretat a mantenir (0 per totes)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Key</string>
<string id="30029">Dropbox Secret</string>
<string id="30030">Complements d'usuari</string>
<string id="30031">Dades del complement</string>
<string id="30032">Base de dades</string>
<string id="30033">Llista de reproducció</string>
<string id="30034">Miniatures/Fanart</string>
<string id="30035">Fitxers de configuració</string>
<string id="30036">Directori personalitzat 1</string>
<string id="30037">Directori personalitzat 2</string>
<string id="30038">S'ha detectat la configuració avançada</string>
<string id="30039">El fitxer de configuració avançada s'ha de restaurar primer</string>
<string id="30040">Seleccioneu «Sí» per restaurar aquest fitxer i reiniciar l'XBMC</string>
<string id="30041">Seleccioneu «No» per continuar</string>
<string id="30042">Repren la restauració</string>
<string id="30043">L'XBMC Backup ha detectat una restauració inacabada</string>
<string id="30044">Voleu continuar?</string>
<string id="30045">Error: La ruta remota no existeix</string>
<string id="30046">S'està iniciant</string>
<string id="30047">Directori local</string>
<string id="30048">Directori remot</string>
<string id="30049">S'està recopilant la llista de fitxers</string>
<string id="30050">La ruta remota existeix - hi pot haver fitxers antics!</string>
<string id="30051">S'està creant la llista de fitxers</string>
<string id="30052">S'està escrivint el fitxer</string>
<string id="30053">S'està iniciant la còpia de seguretat planificada</string>
<string id="30054">S'està eliminant la còpia de seguretat</string>
<string id="30056">Comproveu el registre per la URL d'autorització del Dropbox</string>
<string id="30057">Feu clic a «D'acord» quan hagi estat autoritzat</string>
<string id="30058">Es necessita el codi de desenvolupador del Dropbox</string>
<string id="30059">Visiteu https://www.dropbox.com/developers</string>
<string id="30060">Habilita el planificador</string>
<string id="30061">Planificació</string>
<string id="30062">Hora del dia</string>
<string id="30063">Dia de la setmana</string>
<string id="30064">Planificació Cron</string>
<string id="30065">Diumenge</string>
<string id="30066">Dilluns</string>
<string id="30067">Dimarts</string>
<string id="30068">Dimecres</string>
<string id="30069">Dijous</string>
<string id="30070">Divendres</string>
<string id="30071">Dissabte</string>
<string id="30072">Cada dia</string>
<string id="30073">Cada setmana</string>
<string id="30074">Primer dia del mes</string>
<string id="30075">Planificació personalitzada</string>
<string id="30076">Apaga després de la còpia de seguretat</string>
<string id="30077">Reinicieu l'XBMC</string>
<string id="30078">És recomanable que reinicieu l'XBMC per continuar</string>
<string id="30079">Només avui</string>
<string id="30080">Perfils</string>
<string id="30081">El planificador de tasques s'executarà de nou</string>
<string id="30082">Barra de progrés</string>
<string id="30084">Cap (Silenciós)</string>
<string id="30086">Aquesta versió d'XBMC és diferent que la utilitzada per crear el fitxer</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Chinese (Simple) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/zh/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC 备份</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="30026">保留备份数0为全部</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox 用户</string>
<string id="30029">Dropbox 密码</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="30036">自定义目录1</string>
<string id="30037">自定义目录2</string>
<string id="30038">检测到高级设置</string>
<string id="30039">将先恢复高级设置文件</string>
<string id="30040">选“是”恢复此文件并重启 XBMC</string>
<string id="30041">选“否”继续</string>
<string id="30042">继续恢复</string>
<string id="30043">XBMC 备份检测到未完成的恢复</string>
<string id="30044">要继续吗?</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="30054">删除备份</string>
<string id="30056">检查 Dropbox 授权 URL 日志</string>
<string id="30057">授权后点“确定”</string>
<string id="30058">需要 Dropbox 开发者 Code</string>
<string id="30059">访问 https://www.dropbox.com/developers</string>
<string id="30060">启用计划任务</string>
<string id="30061">时间安排</string>
<string id="30062">时刻</string>
<string id="30063">星期</string>
<string id="30064">Cron 计划任务</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>
<string id="30076">备份完成后关机</string>
<string id="30077">重启 XBMC</string>
<string id="30078">需要重启 XBMC 以继续</string>
<string id="30079">就在今天</string>
<string id="30080">用户配置</string>
<string id="30081">计划任务将再次执行于</string>
<string id="30082">进度条</string>
<string id="30083">后台进度条</string>
<string id="30084">无(静默)</string>
<string id="30085">版本警告</string>
<string id="30086">当前 XBMC 版本与创建备份时的版本不同</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Chinese (Traditional) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/zh_TW/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">一般設定</string>
<string id="30023">模式</string>
<string id="30032">資料庫</string>
<string id="30033">播放列表</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="30080">設定檔</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Croatian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/hr/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC sigurnosno kopiranje</string>
<string id="30011">Općenito</string>
<string id="30012">Odabir datoteke</string>
<string id="30013">Planirano vrijeme</string>
<string id="30016">Sigurnosno kopiranje</string>
<string id="30017">Obnovi</string>
<string id="30018">Putanja pregleda</string>
<string id="30019">Vrsta putanje</string>
<string id="30020">Pregledaj udaljenu putanju</string>
<string id="30021">Sigurnosno kopiraj naziv mape</string>
<string id="30022">Prikaz napretka</string>
<string id="30023">Način</string>
<string id="30024">Upišite udaljenu putanju</string>
<string id="30025">Vrsta udaljene putanje</string>
<string id="30026">Sigurnosna kopiranja za zadržavanje (0 za sve)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox ključ</string>
<string id="30029">Dropbox tajna</string>
<string id="30030">Dodaci korisnika</string>
<string id="30031">Podaci dodatka</string>
<string id="30032">Baza podataka</string>
<string id="30033">Popisu izvođenja</string>
<string id="30034">Minijature/Slike omota</string>
<string id="30035">Datoteke podešavanja</string>
<string id="30036">Prilagođeni direktorij 1</string>
<string id="30037">Prilagođeni direktorij 2</string>
<string id="30038">Otkrivene su napredne postavke</string>
<string id="30039">Datoteka napredne postavke prvo se treba obnoviti</string>
<string id="30040">Odaberite 'Da' za obnavljanje ove datoteke i ponovno pokretanje XBMC-a</string>
<string id="30041">Odaberite 'Ne' za nastavak</string>
<string id="30042">Nastavi obnovu</string>
<string id="30043">XBMC sigurnosno kopiranje je otkrilo nezavršenu obnovu</string>
<string id="30044">Želite li nastaviti?</string>
<string id="30045">Greška: udaljena putanja ne postoji</string>
<string id="30046">Pokretanje</string>
<string id="30047">Lokalni direktorij</string>
<string id="30048">Udaljeni direktorij</string>
<string id="30049">Sakupljanje popisa datoteka</string>
<string id="30050">Udaljena putanja postoji - možda sadrži zastarjele datoteke!</string>
<string id="30051">Stvaranje popisa datoteka</string>
<string id="30052">Zapisivanje datoteke</string>
<string id="30053">Pokretanje sigurnosnog kopiranja u planirano vrijeme</string>
<string id="30054">Uklanjanje sigurnosnog kopiranja</string>
<string id="30056">Provjera zapisa za URL autorizacije Dropboxa</string>
<string id="30057">Kliknite 'U redu' kada je autorizirano</string>
<string id="30058">Potreban je kôd Dropbox razvijatelja</string>
<string id="30059">Posjetite https://www.dropbox.com/developers</string>
<string id="30060">Omogući planirano vrijeme</string>
<string id="30061">Planirano vrijeme</string>
<string id="30062">Sata dnevno</string>
<string id="30063">Dan u tjednu</string>
<string id="30064">Cron planirano vrijeme</string>
<string id="30065">Nedjelja</string>
<string id="30066">Ponedjeljak</string>
<string id="30067">Utorak</string>
<string id="30068">Srijeda</string>
<string id="30069">Četvrtak</string>
<string id="30070">Petak</string>
<string id="30071">Subota</string>
<string id="30072">Svaki dan</string>
<string id="30073">Svaki tjedan</string>
<string id="30074">Prvi dan mjeseca</string>
<string id="30075">Prilagođeno vrijeme planiranja</string>
<string id="30076">Isključi nakon sigurnosnog kopiranja</string>
<string id="30077">Ponovno pokreni XBMC</string>
<string id="30078">Za nastavak je potrebno ponovno pokretanje XBMC-a</string>
<string id="30079">Samo danas</string>
<string id="30080">Profili</string>
<string id="30081">Planirano vrijeme će se ponovno pokrenuti</string>
<string id="30082">Traka napretka</string>
<string id="30083">Pozadina trake napretka</string>
<string id="30084">Nepoznato (Tiho)</string>
<string id="30085">Upozorenje inačice</string>
<string id="30086">Ova inačica XBMC-a je drugačija od one koja se koristila za stvaranje arhive</string>
</strings>

View File

@@ -1,48 +1,26 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Czech language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/cs/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">Záloha XBMC</string>
<string id="30011">Obecné</string>
<string id="30012">Výběr souboru</string>
<string id="30013">Plánování</string>
<string id="30016">Zálohovat</string>
<string id="30017">Obnovit</string>
<string id="30023">Režim</string>
<string id="30032">Databáze</string>
<string id="30033">Seznam stop</string>
<string id="30061">Rozvrh</string>
<string id="30065">Neděle</string>
<string id="30066">Pondělí</string>
<string id="30067">Úterý</string>
<string id="30068">Středa</string>
<string id="30069">Čtvrtek</string>
<string id="30070">Pátek</string>
<string id="30071">Sobota</string>
<string id="30077">Restartovat XBMC</string>
<string id="30080">Profily</string>
</strings>

View File

@@ -1,48 +1,74 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Danish language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/da/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Sikkerhedskopi</string>
<string id="30011">Generelt</string>
<string id="30012">Filvalg</string>
<string id="30013">Planlægning</string>
<string id="30016">Backup</string>
<string id="30017">Genopret</string>
<string id="30018">Gennemse mapper</string>
<string id="30019">Indtast Sti</string>
<string id="30020">Gennemse netværksmapper</string>
<string id="30021">Navngiv mappe til sikkerhedskopi</string>
<string id="30023">Tilstand</string>
<string id="30024">Indtast netværkssti</string>
<string id="30025">Type af netværkssti</string>
<string id="30026">Sikkerhedskopier der skal gemmes (0 for alle)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox kodeord</string>
<string id="30029">Dropbox hemmeligt</string>
<string id="30030">Bruger-Addons</string>
<string id="30031">Addon-data</string>
<string id="30032">Database</string>
<string id="30033">Afspilningsliste</string>
<string id="30034">Miniaturer/Fankunst</string>
<string id="30035">Konfigurationsfil</string>
<string id="30036">Brugerdefineret mappe 1</string>
<string id="30037">Brugerdefineret mappe 2</string>
<string id="30038">Udvidet indstilling opdaget</string>
<string id="30039">Udvidede indstillings-fil bør gendannes først</string>
<string id="30040">Vælg Ja for at gendanne denne fil og genstarte XBMC</string>
<string id="30041">Vælg Nej for at fortsætte</string>
<string id="30042">Genoptag gendannelse</string>
<string id="30043">XBMC Backup har fundet en ufærdiggjort gendannelse</string>
<string id="30044">Vil du fortsætte?</string>
<string id="30045">Fejl: Netværksstien findes ikke</string>
<string id="30046">Starter</string>
<string id="30047">Lokal mappe</string>
<string id="30048">Netværksmappe</string>
<string id="30049">Indsamler filliste</string>
<string id="30050">Netværksstien findes - indeholder muligvis ældre filer!</string>
<string id="30051">Opbygger filliste</string>
<string id="30052">Skriver fil</string>
<string id="30053">Starter planlagt sikkerhedskopi</string>
<string id="30054">Fjerner sikkerhedskopi</string>
<string id="30056">Tjek log for autoriserings-URL til Dropbox</string>
<string id="30057">Tryk OK efter autorisering</string>
<string id="30058">Dropbox udviklerkode krævet</string>
<string id="30059">Besøg https://www.dropbox.com/developers</string>
<string id="30060">Aktivér Tidsplan</string>
<string id="30061">Tidsplan</string>
<string id="30062">Tid på dagen</string>
<string id="30063">Ugedag</string>
<string id="30064">Cron tidsplan</string>
<string id="30065">Søndag</string>
<string id="30066">Mandag</string>
<string id="30067">Tirsdag</string>
<string id="30068">Onsdag</string>
<string id="30069">Torsdag</string>
<string id="30070">Fredag</string>
<string id="30071">Lørdag</string>
<string id="30072">Hver dag</string>
<string id="30073">Hver uge</string>
<string id="30074">Første dag i måneden</string>
<string id="30075">Brugerdefineret tidsplan</string>
<string id="30076">Luk ned efter Sikkerhedskopiering</string>
<string id="30077">Genstart XBMC</string>
<string id="30078">Du skal genstarte XBMC for at fortsætte</string>
<string id="30079">Kun Idag</string>
<string id="30080">Profiler</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Dutch language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/nl/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backup</string>
<string id="30011">Algemeen</string>
<string id="30012">Bestand Selectie</string>
<string id="30013">Inplannen</string>
<string id="30016">Backup</string>
<string id="30017">Terugzetten</string>
<string id="30018">Zoek pad</string>
<string id="30019">Type pad</string>
<string id="30020">Blader externe locatie</string>
<string id="30021">Backup Folder Naam</string>
<string id="30022">Voortgangsbeeldscherm</string>
<string id="30023">Modus</string>
<string id="30024">Enter Extern Pad</string>
<string id="30025">Extern Pad Type</string>
<string id="30026">Te bewaren backups (0 voor alle)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox sleutel</string>
<string id="30029">Dropbox Geheim</string>
<string id="30030">Gebruiker addons</string>
<string id="30031">Addon Data</string>
<string id="30032">Database</string>
<string id="30033">Afspeellijst</string>
<string id="30034">Miniaturen/Fanart</string>
<string id="30035">Configuratiebestanden</string>
<string id="30036">Aangepaste Map 1</string>
<string id="30037">Aangepaste Map 2</string>
<string id="30038">Geavanceerde instellingen gevonden</string>
<string id="30039">Het advancedsettingsbestand moet eerst teruggezet worden</string>
<string id="30040">Kies Ja om dit bestand terug te zetten en XBMC te herstarten</string>
<string id="30041">Selecteer nee of verder te gaan</string>
<string id="30042">Verder gaan met herstellen</string>
<string id="30043">XBMC Backup heeft een onafgemaakte herstelling gededecteerd</string>
<string id="30044">Will je verder gaan?</string>
<string id="30045">Fout: Externe locatie bestaat niet</string>
<string id="30046">Starten</string>
<string id="30047">Lokale map</string>
<string id="30048">Externe map</string>
<string id="30049">Ophalen van bestandslijst</string>
<string id="30050">Extern Pad bestaat - er kunnen oude bestanden in zitten!</string>
<string id="30051">Aanmaken bestandslijst </string>
<string id="30052">Bestand schrijven</string>
<string id="30053">Start geplande backup</string>
<string id="30054">Verwijder backup</string>
<string id="30056">Controleer het log voor de Dropbox autoriseer URL</string>
<string id="30057">Klik OK wanneer geauthoriseerd</string>
<string id="30058">Dropbox Developer Code Nodig</string>
<string id="30059">Bezoek https://www.dropbox.com/developers</string>
<string id="30060">Planner inschakelen</string>
<string id="30061">Planning</string>
<string id="30062">Uur van de dag</string>
<string id="30063">Dag van de week</string>
<string id="30064">Cron Rooster</string>
<string id="30065">Zondag</string>
<string id="30066">Maandag</string>
<string id="30067">Dinsdag</string>
<string id="30068">Woensdag</string>
<string id="30069">Donderdag</string>
<string id="30070">Vrijdag</string>
<string id="30071">Zaterdag</string>
<string id="30072">Elke dag</string>
<string id="30073">Elke week</string>
<string id="30074">Eerste dag van de maand</string>
<string id="30075">Aangepast Rooster</string>
<string id="30076">Afsluiten na voltooiing back-up</string>
<string id="30077">Herstarten XBMC</string>
<string id="30078">Herstart XBMC om verder te gaan</string>
<string id="30079">Alleen Vandaag</string>
<string id="30080">Profielen</string>
<string id="30081">Scheduler zal opnieuw worden uitgevoerd op</string>
<string id="30082">Voortgangsbalk</string>
<string id="30083">Achtergrond voortgangsbalk</string>
<string id="30084">Geen (Stil)</string>
<string id="30085">Versie waarschuwing</string>
<string id="30086">Deze versie van XBMC is anders dan de gene die gebruikt is voor het creëren van het archief</string>
</strings>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- English (Australia) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/en_AU/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">General</string>
<string id="30016">Backup</string>
<string id="30061">Schedule</string>
<string id="30077">Restart XBMC</string>
</strings>

View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- English (New Zealand) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/en_NZ/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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">Progress Display</string>
<string id="30023">Mode</string>
<string id="30024">Type Remote Path</string>
<string id="30025">Remote Path Type</string>
<string id="30026">Backups to keep (0 for all)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Key</string>
<string id="30029">Dropbox Secret</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="30036">Custom Directory 1</string>
<string id="30037">Custom Directory 2</string>
<string id="30038">Advanced Settings Detected</string>
<string id="30039">The advancedsettings file should be restored first</string>
<string id="30040">Select Yes to restore this file and restart XBMC</string>
<string id="30041">Select No to continue</string>
<string id="30042">Resume Restore</string>
<string id="30043">XBMC Backup has detected an unfinished restore</string>
<string id="30044">Would you like to continue?</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="30054">Removing backup</string>
<string id="30056">Check log for Dropbox authorise URL</string>
<string id="30057">Click OK when authorised</string>
<string id="30058">Dropbox Developer Code Needed</string>
<string id="30059">Visit https://www.dropbox.com/developers</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>
<string id="30076">Shutdown After Backup</string>
<string id="30077">Restart XBMC</string>
<string id="30078">You should restart XBMC to continue</string>
<string id="30079">Just Today</string>
<string id="30080">Profiles</string>
<string id="30081">Scheduler will run again on</string>
<string id="30082">Progress Bar</string>
<string id="30083">Background Progress Bar</string>
<string id="30084">None (Silent)</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- English (US) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/en_US/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<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">Progress Display</string>
<string id="30023">Mode</string>
<string id="30024">Type Remote Path</string>
<string id="30025">Remote Path Type</string>
<string id="30026">Backups to keep (0 for all)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Key</string>
<string id="30029">Dropbox Secret</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="30036">Custom Directory 1</string>
<string id="30037">Custom Directory 2</string>
<string id="30038">Advanced Settings Detected</string>
<string id="30039">The advancedsettings file should be restored first</string>
<string id="30040">Select Yes to restore this file and restart XBMC</string>
<string id="30041">Select No to continue</string>
<string id="30042">Resume Restore</string>
<string id="30043">XBMC Backup has detected an unfinished restore</string>
<string id="30044">Would you like to continue?</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="30054">Removing backup</string>
<string id="30056">Check log for Dropbox authorize URL</string>
<string id="30057">Click OK when authorized</string>
<string id="30058">Dropbox Developer Code Needed</string>
<string id="30059">Visit https://www.dropbox.com/developers</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>
<string id="30076">Shutdown After Backup</string>
<string id="30077">Restart XBMC</string>
<string id="30078">You should restart XBMC to continue</string>
<string id="30079">Just Today</string>
<string id="30080">Profiles</string>
<string id="30081">Scheduler will run again on</string>
<string id="30082">Progress Bar</string>
<string id="30083">Background Progress Bar</string>
<string id="30084">None (Silent)</string>
<string id="30085">Version Warning</string>
<string id="30086">This version of XBMC is different than the one used to create the archive</string>
</strings>

View File

@@ -1,52 +1,87 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- English language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/en/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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="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">Progress Display</string>
<string id="30023">Mode</string>
<string id="30024">Type Remote Path</string>
<string id="30025">Remote Path Type</string>
<string id="30026">Backups to keep (0 for all)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Key</string>
<string id="30029">Dropbox Secret</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="30036">Custom Directory 1</string>
<string id="30037">Custom Directory 2</string>
<string id="30038">Advanced Settings Detected</string>
<string id="30039">The advancedsettings file should be restored first</string>
<string id="30040">Select Yes to restore this file and restart XBMC</string>
<string id="30041">Select No to continue</string>
<string id="30042">Resume Restore</string>
<string id="30043">XBMC Backup has detected an unfinished restore</string>
<string id="30044">Would you like to continue?</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="30054">Removing backup</string>
<string id="30056">Check log for Dropbox authorize URL</string>
<string id="30057">Click OK when authorized</string>
<string id="30058">Dropbox Developer Code Needed</string>
<string id="30059">Visit https://www.dropbox.com/developers</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>
<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>
<string id="30076">Shutdown After Backup</string>
<string id="30077">Restart XBMC</string>
<string id="30078">You should restart XBMC to continue</string>
<string id="30079">Just Today</string>
<string id="30080">Profiles</string>
<string id="30081">Scheduler will run again on</string>
<string id="30082">Progress Bar</string>
<string id="30083">Background Progress Bar</string>
<string id="30084">None (Silent)</string>
<string id="30085">Version Warning</string>
<string id="30086">This version of XBMC is different than the one used to create the archive</string>
<string id="30087">Compress Archives</string>
<string id="30088">Copying Zip Archive</string>
<string id="30089">Write Error Detected</string>
<string id="30090">The destination may not be writeable</string>
<string id="30091">Zip archive could not be copied</string>
<string id="30092">Not all files were copied</string>
</strings>

View File

@@ -1,48 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Esperanto language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/eo/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Generalo</string>
<string id="30023">Mode</string>
<string id="30032">Datinbanko</string>
<string id="30065">Dimanĉo</string>
<string id="30066">Lundo</string>
<string id="30067">Mardo</string>
<string id="30068">Merkredo</string>
<string id="30069">Ĵaŭdo</string>
<string id="30070">Vendredo</string>
<string id="30071">Sabato</string>
<string id="30080">Provicos</string>
</strings>

View File

@@ -1,48 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Estonian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/et/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Üldine</string>
<string id="30023">Režiim</string>
<string id="30032">Andmebaas</string>
<string id="30033">Mängukava</string>
<string id="30061">Ajakava</string>
<string id="30065">pühapäev</string>
<string id="30066">esmaspäev</string>
<string id="30067">teisipäev</string>
<string id="30068">kolmapäev</string>
<string id="30069">neljapäev</string>
<string id="30070">reede</string>
<string id="30071">laupäev</string>
<string id="30077">Taaskäivita XBMC</string>
<string id="30080">Profiilid</string>
</strings>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Faroese language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/fo/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">Vanligt</string>
</strings>

View File

@@ -1,48 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Finnish language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/fi/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Yleiset</string>
<string id="30016">Varmuuskopio</string>
<string id="30023">Tila</string>
<string id="30032">Tietokanta</string>
<string id="30033">Toistolista</string>
<string id="30061">Ajastus</string>
<string id="30065">sunnuntai</string>
<string id="30066">maanantai</string>
<string id="30067">tiistai</string>
<string id="30068">keskiviikko</string>
<string id="30069">torstai</string>
<string id="30070">perjantai</string>
<string id="30071">lauantai</string>
<string id="30077">Käynnistä XBMC uudelleen</string>
<string id="30080">Käyttäjäprofiilit</string>
</strings>

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- French (Canada) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/fr_CA/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30010">Sauvegarde XBMC</string>
<string id="30011">Général</string>
<string id="30012">Choix des fichiers</string>
<string id="30013">Planification</string>
<string id="30016">Sauvegarder</string>
<string id="30017">Restaurer</string>
<string id="30018">Parcourir le chemin</string>
<string id="30019">Saisir le chemin</string>
<string id="30020">Parcourir le chemin distant</string>
<string id="30021">Nom du dossier de sauvegarde</string>
<string id="30022">Affichage de la progression</string>
<string id="30023">Mode</string>
<string id="30024">Saisir le chemin distant</string>
<string id="30025">Type de chemin distant</string>
<string id="30026">Sauvegardes à garder (0 pour toutes)</string>
<string id="30027">Dropbox</string>
<string id="30028">Clef Dropbox</string>
<string id="30029">Secret Dropbox</string>
<string id="30030">Addiciels de l'utilisateur</string>
<string id="30031">Données de l'addiciel</string>
<string id="30032">Base de données</string>
<string id="30033">Liste de lecture</string>
<string id="30034">Imagettes/Fanart</string>
<string id="30035">Fichiers de configuration</string>
<string id="30036">Répertoire personnalisé 1</string>
<string id="30037">Répertoire personnalisé 2</string>
<string id="30038">Paramètres avancés détectés</string>
<string id="30039">Le fichier advancedsettings devrait d'abord être restauré</string>
<string id="30040">Choisir Oui pour restaurer ce fichier et redémarrer XBMC</string>
<string id="30041">Choisir Non pour continuer</string>
<string id="30042">Reprendre la restauration</string>
<string id="30043">La sauvegarde de XBMC a détecté une restauration incomplète</string>
<string id="30044">Voulez-vous continuer?</string>
<string id="30045">Erreur : le chemin distant n'existe pas</string>
<string id="30046">Démarrage</string>
<string id="30047">Répertoire local</string>
<string id="30048">Répertoire distant</string>
<string id="30049">Recueil de la liste des fichiers</string>
<string id="30050">Le chemin distant existe - il peut contenir des anciens fichiers!</string>
<string id="30051">Création de la liste des fichiers</string>
<string id="30052">Écriture du fichier</string>
<string id="30053">Lancement de la sauvegarde planifiée</string>
<string id="30054">Suppression de la sauvegarde</string>
<string id="30056">Vérifier le journal pour l'URL d'autorisation de Dropbox</string>
<string id="30057">Cliquer sur OK après autorisation</string>
<string id="30058">Code du développeur Dropbox requis</string>
<string id="30059">Visiter https://www.dropbox.com/developers</string>
<string id="30060">Activer l'ordonnanceur</string>
<string id="30061">Planification</string>
<string id="30062">Heure de la journée</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">Tous les jours</string>
<string id="30073">Toutes les semaines</string>
<string id="30074">Premier de chaque mois</string>
<string id="30075">Planification personnalisée</string>
<string id="30076">Extinction après la sauvegarde</string>
<string id="30077">Redémarrer XBMC</string>
<string id="30078">Vous devriez redémarrer XBMC pour continuer</string>
<string id="30079">Seulement aujourd'hui</string>
<string id="30080">Profils</string>
<string id="30081">L'ordonnanceur s'exécutera à nouveau</string>
<string id="30082">Barre de progression</string>
<string id="30083">Barre de progression d'arrière-plan</string>
<string id="30084">Aucun (silencieux)</string>
<string id="30085">Avertissement de version</string>
<string id="30086">Cette version de XBMC est différente de celle utilisée pour créer l'archive</string>
</strings>

View File

@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- French language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/fr/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30010">Sauvegarde XBMC</string>
<string id="30011">Général</string>
@@ -14,12 +18,25 @@
<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="30026">Sauvegardes à conserver (0 pour tous)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Clé</string>
<string id="30029">Dropbox Secret</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="30036">Répertoire personnalisé 1</string>
<string id="30037">Répertoire personnalisé 2</string>
<string id="30038">Paramètres avancés détectés</string>
<string id="30039">Le fichier advancedsettings doit être restauré d'abord</string>
<string id="30040">Sélectionner Oui pour restaurer ce fichier et redémarrer XBMC</string>
<string id="30041">Sélectionner Non pour continuer</string>
<string id="30042">Reprendre la restauration</string>
<string id="30043">XBMC Backup a détecté une restauration inachevée</string>
<string id="30044">Voulez-vous continuer ?</string>
<string id="30045">Erreur : chemin distant n'existe pas</string>
<string id="30046">Démarrage</string>
<string id="30047">Dossier Local</string>
@@ -29,6 +46,11 @@
<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="30054">Suppression de la sauvegarde</string>
<string id="30056">Vérifiez le journal pour vérifier l'URL de Dropbox</string>
<string id="30057">Cliquez sur OK s'il y est autorisé</string>
<string id="30058">Code développeur Dropbox nécessaire</string>
<string id="30059">Visit https://www.dropbox.com/developers</string>
<string id="30060">Activer le planificateur</string>
<string id="30061">Planifier</string>
<string id="30062">Heure</string>
@@ -45,4 +67,10 @@
<string id="30073">Chaque semaine</string>
<string id="30074">Premier jour du mois</string>
<string id="30075">Planification personnalisée</string>
<string id="30076">Arrêter après la sauvegarde</string>
<string id="30077">Redémarrer XBMC</string>
<string id="30078">Vous devez redémarrer XBMC pour continuer</string>
<string id="30079">Seulement aujourd'hui</string>
<string id="30080">Profils</string>
<string id="30081">Le planificateur sera exécuté le</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Galician language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/gl/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">Copia de seguranza de XBMC</string>
<string id="30011">Xeral</string>
<string id="30012">Selección de ficheiro</string>
<string id="30013">Programación</string>
<string id="30016">Copia de seguranza</string>
<string id="30017">Restaurar</string>
<string id="30018">Buscar Camiño</string>
<string id="30019">Escribir Camiño</string>
<string id="30020">Buscar Camiño Remoto</string>
<string id="30021">Nome do cartafol de copias de seguranza</string>
<string id="30022">Amosar Progreso</string>
<string id="30023">Modo</string>
<string id="30024">Escribir Camiño Remoto</string>
<string id="30025">Tipo de Camiño Remoto</string>
<string id="30026">Copias de seguranza (0 para todas)</string>
<string id="30027">Dropbox</string>
<string id="30028">Clave de Dropbox</string>
<string id="30029">Secreto de Dropbox</string>
<string id="30030">Complementos de usuario</string>
<string id="30031">Datos dos complementos</string>
<string id="30032">Base de datos</string>
<string id="30033">Lista de reprodución</string>
<string id="30034">Miniaturas/Cartel</string>
<string id="30035">Ficheiros de configuración</string>
<string id="30036">Cartafol Personalizado 1</string>
<string id="30037">Cartafol Personalizado 2</string>
<string id="30038">Detectada a Configuración Avanzada</string>
<string id="30039">Deberíase restaurar primeiro o ficheiro da configuración avanzada</string>
<string id="30040">Seleccione Si para restaurar este ficheiro e reiniciar o XBMC</string>
<string id="30041">Seleccione Non para continuar</string>
<string id="30042">Continuar a Restauración</string>
<string id="30043">O Sistema de Copias do XBMC detectou unha restauración se rematar</string>
<string id="30044">Quere continuar?</string>
<string id="30045">Erro: O camiño remoto non existe</string>
<string id="30046">Iniciando</string>
<string id="30047">Cart Local</string>
<string id="30048">Cart Remoto</string>
<string id="30049">Recollendo listaxe de ficheiros</string>
<string id="30050">O Camiño Remoto xa existe e pode conter ficheiros antigos!</string>
<string id="30051">Creando listaxe de ficheiros</string>
<string id="30052">A escribir o ficheiro</string>
<string id="30053">Iniciando copia de seguridade programada</string>
<string id="30054">Eliminando copia de seguranza</string>
<string id="30056">Verificar o rexistro para o URL de autorización de Dropbox</string>
<string id="30057">Prema Aceptar cando teña autorización</string>
<string id="30058">É necesario o códido de desenvolvedor de Dropbox</string>
<string id="30059">Visite https://www.dropbox.com/developers</string>
<string id="30060">Activar Programador</string>
<string id="30061">Programación</string>
<string id="30062">Hora do día</string>
<string id="30063">Día da semana</string>
<string id="30064">Programación Cron</string>
<string id="30065">Domingo</string>
<string id="30066">Luns</string>
<string id="30067">Martes</string>
<string id="30068">Mércores</string>
<string id="30069">Xoves</string>
<string id="30070">Venres</string>
<string id="30071">Sábado</string>
<string id="30072">Cada día</string>
<string id="30073">Cada semana</string>
<string id="30074">Primeiro día do mes</string>
<string id="30075">Programación Personalizada</string>
<string id="30076">Apagar despois de realizar a copia de seguranza</string>
<string id="30077">Reiniciar XBMC</string>
<string id="30078">Ten de restaurar o XBMC para continuar</string>
<string id="30079">Só Hoxe</string>
<string id="30080">Perfís</string>
<string id="30081">O Programador executarase de novo o</string>
<string id="30082">Barra de Progreso</string>
<string id="30083">Barra de Progreso no Fondo</string>
<string id="30084">Ningún (Silencioso)</string>
<string id="30085">Advertencia de Versión</string>
<string id="30086">Esta versión do XBMC é diferente da utilizada para xerar o ficheiro</string>
</strings>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Georgian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ka/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">მთავარი</string>
</strings>

View File

@@ -1,4 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- German language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/de/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30010">XBMC Backup</string>
<string id="30011">Allgemein</string>
@@ -14,12 +18,25 @@
<string id="30023">Modus</string>
<string id="30024">Entferntes Verzeichnis</string>
<string id="30025">Typ Entferntes Verzeichnis</string>
<string id="30026">Zu behaltende Sicherheitskopien (0 für alle)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Schlüssel</string>
<string id="30029">Dropbox Secret</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="30036">Benutzerdefiniertes Verzeichnis 1</string>
<string id="30037">Benutzerdefiniertes Verzeichnis 2</string>
<string id="30038">Erweiterte Einstellungen entdeckt</string>
<string id="30039">Die Erweiterte Einstellungsdatei sollte zuerst wiederhergestellt werden</string>
<string id="30040">Wähle ja um diese Datei wiederherzustellen und XBMC neuzustarten</string>
<string id="30041">Wähle Nein um fortzufahren</string>
<string id="30042">Wiederherstellung fortsetzen</string>
<string id="30043">XBMC Backup hat eine nicht komplette Wiederherstellung entdeckt</string>
<string id="30044">Möchtest du fortfahren?</string>
<string id="30045">Fehler: Entferntes Verzeichnis nicht konfiguriert</string>
<string id="30046">Starte</string>
<string id="30047">Lokales Verzeichnis</string>
@@ -29,6 +46,11 @@
<string id="30051">Dateiliste wird erzeugt</string>
<string id="30052">Schreibe Datei</string>
<string id="30053">Starte geplantes backup</string>
<string id="30054">Sicherheitskopie entfernen</string>
<string id="30056">Überprüfe den Log für die Dropbox-Autorisierungs URL.</string>
<string id="30057">Klicke OK, sobald du autorisiert bist.</string>
<string id="30058">Dropbox Developer Code benötigt</string>
<string id="30059">Besuche https://www.dropbox.com/developers</string>
<string id="30060">Zeitplaner einschalten</string>
<string id="30061">Zeitplan</string>
<string id="30062">Stunde</string>
@@ -45,4 +67,14 @@
<string id="30073">Jede Woche</string>
<string id="30074">Erster Tag eines Monats</string>
<string id="30075">Benutzerdefiniert</string>
<string id="30076">Herunterfahren nach Backup</string>
<string id="30077">XBMC neu starten</string>
<string id="30078">Du solltest XBMC neu starten, um fortzufahren</string>
<string id="30079">Nur heute</string>
<string id="30080">Profile</string>
<string id="30081">Arbeitsplaner wird nochmal ausgeführt am:</string>
<string id="30082">Fortschrittsbalken</string>
<string id="30083">Hintergrund Fortsschrittsbalken</string>
<string id="30084">Keine (Still)</string>
<string id="30085">Versionswarnung</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Greek language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/el/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">Αντίγραφο Ασφαλείας XBMC</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="30026">Πόσα αντίγραφα να διατηρηθούν (0 για όλα)</string>
<string id="30027">Dropbox</string>
<string id="30028">Κλειδί Dropbox</string>
<string id="30029">Μυστικό Dropbox</string>
<string id="30030">Πρόσθετα Χρήστη</string>
<string id="30031">Δεδομένα Πρόσθετου</string>
<string id="30032">Βάση δεδομένων</string>
<string id="30033">Λίστα Αναπαραγωγής</string>
<string id="30034">Μικρογραφίες/Fanart</string>
<string id="30035">Αρχεία Ρυθμίσεων</string>
<string id="30036">Προσαρμοσμένος Φάκελος 1</string>
<string id="30037">Προσαρμοσμένος Φάκελος 2</string>
<string id="30038">Εντοπίστηκαν Προηγμένες Ρυθμίσεις (Advanced Settings)</string>
<string id="30039">Το αρχείο advancedsettings πρέπει να επαναφερθεί πρώτο</string>
<string id="30040">Select Yes to restore this file and restart XBMC</string>
<string id="30041">Επιλέξτε Όχι για να συνεχίσετε</string>
<string id="30042">Συνέχιση Επαναφοράς</string>
<string id="30043">Το XBMC Backup εντόπισε μια μη ολοκληρωμένη επαναφορά</string>
<string id="30044">Επιθυμείτε να συνεχίσετε;</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="30054">Αφαίρεση αντιγράφου</string>
<string id="30056">Ελέγξτε το αρχείο καταγραφής για τη διεύθυνση URL έγκρισης του Dropbox</string>
<string id="30057">Πιέστε 'Επιλογή' κατά την έγκριση</string>
<string id="30058">Απαιτείται Κωδικός Προγραμματιστή Dropbox</string>
<string id="30059">Επισκεφθείτε το https://www.dropbox.com/developers</string>
<string id="30060">Ενεργοποίηση Προγραμματισμού</string>
<string id="30061">Προγραμματισμός</string>
<string id="30062">Ώρα της Μέρας</string>
<string id="30063">Μέρα της Εβδομάδας</string>
<string id="30064">Προγραμματισμός Cron</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>
<string id="30076">Τερματισμός μετά τη δημιουργία Αντιγράφου</string>
<string id="30077">Επανεκκίνηση XBMC</string>
<string id="30078">Πρέπει να επανεκκινήσετε το XBMC για να συνεχίσετε</string>
<string id="30079">Μόνο Σήμερα</string>
<string id="30080">Προφίλ</string>
<string id="30081">Ο προγραμματισμός θα γίνει ξανά στις</string>
<string id="30082">Μπάρα Εξέλιξης</string>
<string id="30083">Μπάρα Εξέλιξης Υποβάθρου</string>
<string id="30084">Κανένα (Αθόρυβο)</string>
<string id="30085">Προειδοποίηση Έκδοσης</string>
<string id="30086">Η έκδοση του XBMC δεν είναι αυτή που χρησιμοποιήθηκε για τη δημιουργία του αρχείου</string>
</strings>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Haitian (Haitian Creole) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ht/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30065">dimanch</string>
<string id="30066">Lindi</string>
<string id="30067">Madi</string>
<string id="30068">Merkredi</string>
<string id="30069">Jedi</string>
<string id="30070">Vandredi</string>
<string id="30071">Samdi</string>
</strings>

View File

@@ -1,48 +1,75 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Hebrew language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/he/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">גיבוי XBMC</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="30023">מצב</string>
<string id="30024">הזן נתיב מרוחק</string>
<string id="30025">סוג נתיב מרוחק</string>
<string id="30026">מספר גיבוים לשמירה (0 להכול)</string>
<string id="30027">דרופבוקס</string>
<string id="30028">Dropbox Key</string>
<string id="30029">Dropbox Secret</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="30036">תיקיה מותאמת 1</string>
<string id="30037">תיקיה מותאמת 2</string>
<string id="30038">זוהה Advanced Settings</string>
<string id="30039">יש לשחזר תחילה את הקובץ advancedsettings</string>
<string id="30040">בחר "כן" לשחזור קובץ זה ולהפעלת XBMC מחדש</string>
<string id="30041">בחר "לא" להמשך</string>
<string id="30042">המשך שחזור</string>
<string id="30043">גיבוי XBMC זיהה שחזור שלא הסתיים</string>
<string id="30044">האם ברצונך להמשיך?</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="30054">מסיר גיבוי</string>
<string id="30056">בדוק יומן רישום לכתובת דרופבוקס מאושרת</string>
<string id="30057">לחץ אישור כשמאושר</string>
<string id="30058">נדרש קוד מפתח של דרופבוקס</string>
<string id="30059">בקר בכתובת https://www.dropbox.com/developers</string>
<string id="30060">הפעל מתזמן</string>
<string id="30061">תזמון</string>
<string id="30062">שעה ביום</string>
<string id="30063">יום בשבוע</string>
<string id="30064">תזמון Cron</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>
<string id="30076">כיבוי בתום הגיבוי</string>
<string id="30077">הפעל את XBMC מחדש</string>
<string id="30078">להמשך הינך צריך להפעיל את XBMC מחדש</string>
<string id="30079">היום בלבד</string>
<string id="30080">פרופילים</string>
<string id="30081">המתזמן יופעל שוב ב-</string>
</strings>

View File

@@ -1,48 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Hindi (Devanagiri) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/hi/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">सामान्य</string>
<string id="30023">विधि</string>
<string id="30033">प्लेलिस्ट</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>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Hungarian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/hu/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC biztonsági mentés</string>
<string id="30011">Általános</string>
<string id="30012">Fájlok kiválasztás</string>
<string id="30013">Időzítés</string>
<string id="30016">Biztonsági mentés</string>
<string id="30017">Visszaállítás</string>
<string id="30018">Útvonal tallózása</string>
<string id="30019">Adja meg az útvonalat</string>
<string id="30020">Távoli útvonal tallózása</string>
<string id="30021">Biztonsási mentés mappa neve</string>
<string id="30022">Folyamatkijelzés</string>
<string id="30023">Mód</string>
<string id="30024">Adja meg a távoli útvonalat</string>
<string id="30025">Távoli útvonal típusa</string>
<string id="30026">Megtartandó mentések száma (0, ha mindet)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox key</string>
<string id="30029">Dropbox secret</string>
<string id="30030">Felhasználói kiegészítők</string>
<string id="30031">Kiegészítő adatok</string>
<string id="30032">Adatbázis</string>
<string id="30033">Lejátszási lista</string>
<string id="30034">Bélyegképek / Rajongói képek</string>
<string id="30035">Konfigurációs fájlok</string>
<string id="30036">Saját könyvtár 1</string>
<string id="30037">Saját könyvtár 2</string>
<string id="30038">Haladó Beállítások Megtalálva</string>
<string id="30039">Az advancedsettings fájl visszaállítása szükséges előbb</string>
<string id="30040">Válassza az Igen opciót a fájl visszaállításához és az XBMC újraindításához</string>
<string id="30041">Válassza a Nem opciót a folytatáshoz</string>
<string id="30042">Visszaállítás folyatatása</string>
<string id="30043">Az XBMC Backup befejezetlen visszaállítást érzékelt</string>
<string id="30044">Folytassuk?</string>
<string id="30045">Hiba: A távoli útvonal nem létezik</string>
<string id="30046">Kezdődik</string>
<string id="30047">Helyi könyvtár</string>
<string id="30048">Távoli könyvtár</string>
<string id="30049">Fájl lista összegyüjtése</string>
<string id="30050">A távoli útvonal létezik - régi fájlok lehetnek benne!</string>
<string id="30051">Fájl lista létrehozása</string>
<string id="30052">Fájl írása</string>
<string id="30053">Időzített mentés kezdete</string>
<string id="30054">Mentés törlése</string>
<string id="30056">Ellenőrizze a naplófájlt a Dropbox bejelentkezési URL-hez</string>
<string id="30057">Nyomja meg az OK-t ha bejelentkezett</string>
<string id="30058">Dropbox fejlesztői kód szükséges</string>
<string id="30059">További információ: https://www.dropbox.com/developers</string>
<string id="30060">Időzítő engedélyezése</string>
<string id="30061">Időzítés</string>
<string id="30062">A nap órája</string>
<string id="30063">A hét napja</string>
<string id="30064">Cron időzítő</string>
<string id="30065">Vasárnap</string>
<string id="30066">Hétfő</string>
<string id="30067">Kedd</string>
<string id="30068">Szerda</string>
<string id="30069">Csütörtök</string>
<string id="30070">Péntek</string>
<string id="30071">Szombat</string>
<string id="30072">Minden nap</string>
<string id="30073">Minden Héten</string>
<string id="30074">A hónap első napján</string>
<string id="30075">Egyéni időzítő</string>
<string id="30076">Leállítás a biztonsági mentés után</string>
<string id="30077">XBMC újraindítása</string>
<string id="30078">Az XBMC újraindítása szükséges a folytatáshoz</string>
<string id="30079">Csak Ma</string>
<string id="30080">Profilok</string>
<string id="30081">Az ütemező következő futása:</string>
<string id="30082">Folyamatkijelző</string>
<string id="30083">Háttér Folyamatjelző</string>
<string id="30084">Nincs (Néma)</string>
<string id="30085">Verzió Figyelmeztetés</string>
<string id="30086">Az XBMC verziója különbözik attól mint amelyik létrehozta az archívumot</string>
</strings>

View File

@@ -1,48 +1,22 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Icelandic language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/is/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Almennt</string>
<string id="30023">Hamur</string>
<string id="30032">Gagnagrunnur</string>
<string id="30033">Lagalista</string>
<string id="30046">Ræsi</string>
<string id="30061">Dagskrá</string>
<string id="30065">Sunnudagur</string>
<string id="30066">Mánudagur</string>
<string id="30067">Þriðjudagur</string>
<string id="30068">Miðvikudagur</string>
<string id="30069">Fimmtudagur</string>
<string id="30070">Föstudagur</string>
<string id="30071">Laugardagur</string>
<string id="30077">Endurræsa XBMC</string>
<string id="30080">Notendur</string>
</strings>

View File

@@ -1,48 +1,74 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Indonesian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/id/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">Pencadangan XBMC</string>
<string id="30011">Umum</string>
<string id="30012">Pilih Berkas</string>
<string id="30013">Penjadwalan</string>
<string id="30016">Cadangan</string>
<string id="30017">Pengembalian</string>
<string id="30018">Ramban Lokasi</string>
<string id="30019">Lokasi Tipe</string>
<string id="30020">Ramban Lokasi Jarak Jauh</string>
<string id="30021">Nama Folder Cadangan</string>
<string id="30023">Mode</string>
<string id="30024">Lokasi Tipe Jarak Jauh</string>
<string id="30025">Tipe Lokasi Jarak Jauh</string>
<string id="30026">Cadangan untuk disimpan (0 untuk seluruhnya)</string>
<string id="30027">Dropbox</string>
<string id="30028">Kunci Dropbox</string>
<string id="30029">Rahasia Dropbox</string>
<string id="30030">Addon Pengguna</string>
<string id="30031">Data Addon</string>
<string id="30032">Basis Data</string>
<string id="30033">Daftar Main</string>
<string id="30034">Gambar Kecil/Fanart</string>
<string id="30035">Berkas Konfigurasi</string>
<string id="30036">Direktori Lain 1</string>
<string id="30037">Direktori Lain 2</string>
<string id="30038">Terdeteksi Pengaturan Lanjutan</string>
<string id="30039">Berkas pengaturan lanjutan perlu dikembalikan terlebih dulu</string>
<string id="30040">Pilih Ya untuk mengembalikan berkas ini dan menjalankan ulang XBMC</string>
<string id="30041">Pilih Tidak untuk melanjutkan</string>
<string id="30042">Lanjutkan pengembalian</string>
<string id="30043">Pencadangan XBMC mendeteksi ada pengembalian yang belum selesai</string>
<string id="30044">Apakah Anda ingin melanjutkan?</string>
<string id="30045">Kesalahan: Lokasi jarak jauh tidak ada</string>
<string id="30046">Memulai</string>
<string id="30047">Direktori Lokal</string>
<string id="30048">Direktori Jarak Jauh</string>
<string id="30049">Mengumpulkan daftar berkas</string>
<string id="30050">Lokasi jarak jauh ada - mungkin berisi berkas lama di dalamnya!</string>
<string id="30051">Membuat Daftar Berkas</string>
<string id="30052">Menulis berkas</string>
<string id="30053">Memulai pencadangan terjadwal</string>
<string id="30054">Menghapus cadangan</string>
<string id="30056">Periksa log untuk URL otorisasi Dropbox</string>
<string id="30057">Klik OK ketika sudah terotorisasi</string>
<string id="30058">Kode Pengembang Dropbox Diperlukan</string>
<string id="30059">Kunjungi https://www.dropbox.com/developers</string>
<string id="30060">Mengaktifkan Penjadwalan</string>
<string id="30061">Jadwal</string>
<string id="30062">Jam</string>
<string id="30063">Hari</string>
<string id="30064">Jadwal Cron</string>
<string id="30065">Minggu</string>
<string id="30066">Senin</string>
<string id="30067">Selasa</string>
<string id="30068">Rabu</string>
<string id="30069">Kamis</string>
<string id="30070">Jumat</string>
<string id="30071">Sabtu</string>
<string id="30072">Setiap Hari</string>
<string id="30073">Setiap Minggu</string>
<string id="30074">Hari Pertama Setiap Bulan</string>
<string id="30075">Jadwal Lain</string>
<string id="30076">Matikan Setelah Pencadangan</string>
<string id="30077">Jalankan Ulang XBMC</string>
<string id="30078">Anda perlu menjalankan ulang XBMC untuk melanjutkan</string>
<string id="30079">Hanya Hari Ini</string>
<string id="30080">Profil</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Italian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/it/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">Backup XBMC</string>
<string id="30011">Generale</string>
<string id="30012">Selezione File</string>
<string id="30013">Pianificazione</string>
<string id="30016">Backup</string>
<string id="30017">Ripristina</string>
<string id="30018">Seleziona percorso</string>
<string id="30019">Scrivi percorso</string>
<string id="30020">Seleziona percorso remoto</string>
<string id="30021">Nome cartella backup</string>
<string id="30022">Visualizzazione avanzamento</string>
<string id="30023">Modalità</string>
<string id="30024">Scrivi percorso remoto</string>
<string id="30025">Tipo percorso remoto</string>
<string id="30026">Backup da mantenere (0 per conservarli tutti)</string>
<string id="30027">Dropbox</string>
<string id="30028">Chiave Dropbox</string>
<string id="30029">Segreto Dropbox</string>
<string id="30030">Add-on dell'utente</string>
<string id="30031">Dati add-on</string>
<string id="30032">Banca dati</string>
<string id="30033">Lista di riproduzione</string>
<string id="30034">Anteprime/Fanart</string>
<string id="30035">File di Configurazione</string>
<string id="30036">Directory Personalizzata 1</string>
<string id="30037">Directory Personalizzata 2</string>
<string id="30038">Rilevate Impostazioni Avanzate</string>
<string id="30039">Il file advancedsettings dovrebbe essere ripristinato prima</string>
<string id="30040">Seleziona Si per rirpistinare questo file e riavvia XBMC</string>
<string id="30041">Selezione No per contunuare</string>
<string id="30042">Riprendi Rirpistino</string>
<string id="30043">XBMC Backup ha rilevato un errore</string>
<string id="30044">Vuoi continuare?</string>
<string id="30045">Error: Percorso remoto inesistente</string>
<string id="30046">Avvio in corso</string>
<string id="30047">Cartella Locale</string>
<string id="30048">Cartella Remota</string>
<string id="30049">Ottenimento lista file</string>
<string id="30050">Il percorso remoto è già esistente - dei file vecchi potrebbero già essere presenti!</string>
<string id="30051">Creazione lista file</string>
<string id="30052">Scrittura file</string>
<string id="30053">Inizio backup pianificato</string>
<string id="30054">Rimozione backup in corso</string>
<string id="30056">Controlla log per URL autorizzazione di Dropbox</string>
<string id="30057">Premi OK dopo l'autorizzazione</string>
<string id="30058">Codice Sviluppatore Dropbox Necessario</string>
<string id="30059">Visita https://www.dropbox.com/developers</string>
<string id="30060">Abilita pianificazione</string>
<string id="30061">Palinsesto</string>
<string id="30062">Ora del Giorno</string>
<string id="30063">Giorno della Settimana</string>
<string id="30064">Pianificazione Cron</string>
<string id="30065">Domenica</string>
<string id="30066">Lunedì</string>
<string id="30067">Martedì</string>
<string id="30068">Mercoledì</string>
<string id="30069">Giovedì</string>
<string id="30070">Venerdì</string>
<string id="30071">Sabato</string>
<string id="30072">Ogni Giorno</string>
<string id="30073">Ogni Settimana</string>
<string id="30074">Primo Giorno del Mese</string>
<string id="30075">Pianificazione personalizzata</string>
<string id="30076">Spegni dopo avere effettuato il backup</string>
<string id="30077">Riavvia XBMC</string>
<string id="30078">Dovresti riavviare XBMC per continuare</string>
<string id="30079">Oggi</string>
<string id="30080">Profili</string>
<string id="30081">Gli eventi pianificati verrà rieseguita il</string>
<string id="30082">Barra di avanzamento</string>
<string id="30083">Barra di avanzamento sullo sfondo</string>
<string id="30084">Nessuno (silenzioso)</string>
<string id="30085">Allerta Versione</string>
<string id="30086">Questa versione di XBMC è diversa da quella che è stata usata per creare l'archivio</string>
</strings>

View File

@@ -1,48 +1,74 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Japanese language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ja/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC バックアップ</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="30023">モード</string>
<string id="30024">リモートパスを入力</string>
<string id="30025">リモートパスのタイプ</string>
<string id="30026">保持するバックアップ (0 = 全部)</string>
<string id="30027">Dropbox</string>
<string id="30028">ドロップボックスのキー</string>
<string id="30029">Dropboxシークレット</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="30036">カスタムディレクトリ1</string>
<string id="30037">カスタムディレクトリ2</string>
<string id="30038">詳細設定が検出されました</string>
<string id="30039">Advanced設定ファイルは先に復元したほうが良い</string>
<string id="30040">このファイル復元とXBMCの再起動する場合は「はい」を選択してください</string>
<string id="30041">続けるにはいいえを選択してください</string>
<string id="30042">復元を再開する</string>
<string id="30043">XBMCバックアップが未完成の復元を検出しました</string>
<string id="30044">続行しますか</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="30054">バックアップを削除中</string>
<string id="30056">Dropbox の認証URL はログを確認してください</string>
<string id="30057">認証が済んだらOKをクリックしてください</string>
<string id="30058">Dropbox開発用コードが必要</string>
<string id="30059">https://www.dropbox.com/developersをご覧ください</string>
<string id="30060">スケジューラを有効にする</string>
<string id="30061">スケジュール</string>
<string id="30062">時刻</string>
<string id="30063">曜日</string>
<string id="30064">Cron スケジュール</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">毎月1日</string>
<string id="30075">カスタムスケジュール</string>
<string id="30076">バックアップ後にシャットダウン</string>
<string id="30077">XBMCを再起動</string>
<string id="30078">続けるため、XBMCを再起動したほうがいい</string>
<string id="30079">ちょうど今日</string>
<string id="30080">プロファイル</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Korean language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ko/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC 백업</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="30026">유지할 백업 (0은 모두 유지)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox 아이디</string>
<string id="30029">Dropbox 비밀번호</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="30036">사용자 디렉터리 1</string>
<string id="30037">사용자 디렉터리 2</string>
<string id="30038">Advanced Settings 감지 됨</string>
<string id="30039">advancedsettings 파일을 먼저 복원하여야 합니다</string>
<string id="30040">이 파일을 복원하고 XBMC를 다시 시작하려면 Yes 를 선택하세요</string>
<string id="30041">계속하려면 No 를 선택하세요</string>
<string id="30042">복원 재개</string>
<string id="30043">XBMC Backup이 완료되지 않은 복원을 감지하였습니다</string>
<string id="30044">계속 하겠습니까?</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="30054">백업 삭제</string>
<string id="30056">로그에서 Dropbox 인증 URL을 확인하세요</string>
<string id="30057">인증이 완료되면 확인을 누르세요</string>
<string id="30058">Dropbox 개발자 코드가 필요합니다</string>
<string id="30059">https://www.dropbox.com/developers 을 방문하세요</string>
<string id="30060">예약 사용</string>
<string id="30061">예약</string>
<string id="30062">시간</string>
<string id="30063">요일</string>
<string id="30064">Cron 예약</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>
<string id="30076">백업후 시스템 종료</string>
<string id="30077">XBMC 재시작</string>
<string id="30078">계속하려면 XBMC를 다시 시작하여야 합니다</string>
<string id="30079">오늘만</string>
<string id="30080">프로파일</string>
<string id="30081">다음 예약 실행: </string>
<string id="30082">진행 막대</string>
<string id="30083">백드라운드 진행 막대</string>
<string id="30084">없음 (표시 안 함)</string>
<string id="30085">버전 경고</string>
<string id="30086">이 XBMC 버전은 보관되어 있는 XBMC와 다른 버전입니다.</string>
</strings>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Latvian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/lv/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">Vispārīgi</string>
<string id="30036">Pielāgota direktorija 1</string>
<string id="30037">Pielāgota direktorija 2</string>
<string id="30065">Svētdiena</string>
<string id="30066">Pirmdiena</string>
<string id="30067">Otrdiena</string>
<string id="30068">Trešdiena</string>
<string id="30069">Ceturtdiena</string>
<string id="30070">Piektdiena</string>
<string id="30071">Sestdiena</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Lithuanian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/lt/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC atsarginė kopija</string>
<string id="30011">Pagrindinis</string>
<string id="30012">Failo parinkimas</string>
<string id="30013">Planavimas</string>
<string id="30016">Atsarginė kopija</string>
<string id="30017">Atkurti</string>
<string id="30018">Naršymo kelias</string>
<string id="30019">Tipo/rūšies kelias</string>
<string id="30020">Nuotolinio kelio peržiūra</string>
<string id="30021">Atsarginių kopijų aplanko pavadinimas</string>
<string id="30022">Progreso atvaizdavimas</string>
<string id="30023">Režimas</string>
<string id="30024">Įveskite nuotolinį vadymo kelią</string>
<string id="30025">Nuotolinį vadymo kelio tipas</string>
<string id="30026">Atsarginių kopijų saugojimas (0 visiems)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox raktas</string>
<string id="30029">Dropbox paslaptis</string>
<string id="30030">Vartotojo komplektacija</string>
<string id="30031">Priedo duomenys</string>
<string id="30032">Duomenų bazė</string>
<string id="30033">Grojaraštis</string>
<string id="30034">Miniatiūros/FanArt</string>
<string id="30035">Konfigūracijos failai</string>
<string id="30036">Pasirinktinis katalogas 1</string>
<string id="30037">Pasirinktinis katalogas 2</string>
<string id="30038">Papildomi nustatymai aptikti</string>
<string id="30039">Nustatymai 'Išplėstinė byla turėtų būti atkurta'</string>
<string id="30040">Pasirinkite Taip, jei norite atkurti šį failą ir perkraukite XBMC</string>
<string id="30041">Pasirinkite Ne, jei norite tęsti</string>
<string id="30042">Atnaujinti Atkurti</string>
<string id="30043">XBMC aptiko nebaigtą atkurti atsarginę kopiją</string>
<string id="30044">Ar norite tęsti?</string>
<string id="30045">Klaida: Nuotolinis kelias neegzistuoja</string>
<string id="30046">Paleidimas</string>
<string id="30047">Vietos kryptis</string>
<string id="30048">Nuotolinio valdymo kryptis</string>
<string id="30049">Gauti failų sąrašą</string>
<string id="30050">Nuotolinio valdymo Kelias egzistuoja - jame gali būti senų failų!</string>
<string id="30051">Sukurti failų sąrašą</string>
<string id="30052">Kūrti/rašyti failą</string>
<string id="30053">Paleiti suplanuotą atsarginę kopiją</string>
<string id="30054">Pa6alinti atsarginę kopiją</string>
<string id="30056">Patikrinti URL prisijungimą prie Dropbox</string>
<string id="30057">Spauskite OK, kai leidžiama</string>
<string id="30058">Dropbox programuotojo kodas</string>
<string id="30059">Apsilankykite https://www.dropbox.com/developers</string>
<string id="30060">Įjungti planavimą</string>
<string id="30061">Planuoti</string>
<string id="30062">Diena ir valanda</string>
<string id="30063">Savaitės diena</string>
<string id="30064">Planuoti 'Cron'</string>
<string id="30065">Sekmadienis</string>
<string id="30066">Pirmadienis</string>
<string id="30067">Antradienis</string>
<string id="30068">Trečiadienis</string>
<string id="30069">Ketvirtadienis</string>
<string id="30070">Penktadienis</string>
<string id="30071">Šeštadienis</string>
<string id="30072">Kasdien</string>
<string id="30073">Kiekvieną savaitę</string>
<string id="30074">Pirmą mėnesio dieną</string>
<string id="30075">Individualus tvarkaraštis</string>
<string id="30076">Išjungti kompiuterį baigus atsarginę kopiją</string>
<string id="30077">Perkrauti XBMC</string>
<string id="30078">Jūs turite iš naujo paleisti XBMC</string>
<string id="30079">Tiesiog šiandien</string>
<string id="30080">Profiliai</string>
<string id="30081">Tvarkaraštis bus paleisti dar kartą</string>
<string id="30082">Progreso juosta</string>
<string id="30083">Foninė progreso juosta</string>
<string id="30084">Joks (Tylus)</string>
<string id="30085">Versijos įspėjimas</string>
<string id="30086">Ši XBMC versija skiriasi nuot tos, kuri naudota kuriant archyvą</string>
</strings>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Macedonian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/mk/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">Општо</string>
<string id="30023">Режим</string>
<string id="30032">База на податоци</string>
<string id="30033">Список за реп.</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="30080">Профили</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Malay language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ms/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Am</string>
<string id="30033">Senarai Main</string>
<string id="30061">Jadual</string>
<string id="30065">Ahad</string>
<string id="30066">Isnin</string>
<string id="30067">Selasa</string>
<string id="30068">Rabu</string>
<string id="30069">Khamis</string>
<string id="30070">Jumaat</string>
<string id="30071">Sabtu</string>
<string id="30077">Mula Semula XBMC</string>
<string id="30080">Profil</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Malayalam language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ml/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">പോതുവായത്</string>
<string id="30062">ദിവസത്തില്‍ ഒരു മണിക്കൂര്‍</string>
<string id="30063">ആഴ്ചയില്‍ ഒരു ദിവസം</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>
</strings>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Maltese language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/mt/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">Ġenerali</string>
<string id="30023">Mode:</string>
<string id="30032">Database</string>
<string id="30033">Playlist</string>
<string id="30065">Il-Ħadd</string>
<string id="30066">It-Tnejn</string>
<string id="30067">It-Tlieta</string>
<string id="30068">L-Erbgħa</string>
<string id="30069">Il-Ħamis</string>
<string id="30070">Il-Ġimgħa</string>
<string id="30071">Is-Sibt</string>
<string id="30080">Profil</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Norwegian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/no/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backup</string>
<string id="30011">Generelt</string>
<string id="30012">Filvalg</string>
<string id="30013">Timeplan</string>
<string id="30016">Sikkerhetskopiering</string>
<string id="30017">Gjenopprett</string>
<string id="30018">Bla etter sti</string>
<string id="30019">Skriv inn sti</string>
<string id="30020">Bla etter ekstern sti</string>
<string id="30021">Mappenavn</string>
<string id="30022">Fremdriftsvisning</string>
<string id="30023">Modus</string>
<string id="30024">Skriv inn ekstern sti</string>
<string id="30025">Ekstern stitype</string>
<string id="30026">Antall sikkerhetskopier som beholdes (0 for alle)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox-nøkkel</string>
<string id="30029">Dropbox-secret</string>
<string id="30030">Utvidelser</string>
<string id="30031">Utvidelsesdata</string>
<string id="30032">Database</string>
<string id="30033">Spilleliste</string>
<string id="30034">Miniatyrer/Fanart</string>
<string id="30035">Konfigurasjonsfiler</string>
<string id="30036">Egendefinert mappe 1</string>
<string id="30037">Egendefinert mappe 2</string>
<string id="30038">Avanserte innstillinger oppdaget</string>
<string id="30039">advancedsettings-filen bør gjenopprettes først</string>
<string id="30040">Velg «Ja» for å gjenopprette denne filen og starte XBMC på ny</string>
<string id="30041">Velg «Nei» for å fortsette</string>
<string id="30042">Gjenoppta gjenoppretting</string>
<string id="30043">XBMC Backup har oppdaget en uferdig gjenoppretting</string>
<string id="30044">Ønsker du å fortsette?</string>
<string id="30045">Feil: Ekstern sti finnes ikke</string>
<string id="30046">Starter</string>
<string id="30047">Lokal mappe</string>
<string id="30048">Ekstern mappe</string>
<string id="30049">Samler filliste</string>
<string id="30050">Ekstern sti finnes - kan inneholde gamle filer!</string>
<string id="30051">Danner filliste</string>
<string id="30052">Skriver fil</string>
<string id="30053">Starter planlagt sikkerhetskopi</string>
<string id="30054">Fjerner sikkerhetskopi</string>
<string id="30056">Se loggen for Dropbox sin autorisasjons-URL</string>
<string id="30057">Trykk «OK» når autorisert</string>
<string id="30058">Dropbox-utviklerkode behøves</string>
<string id="30059">Besøk «https://www.dropbox.com/developers»</string>
<string id="30060">Aktiver planlegger</string>
<string id="30061">Planlegg</string>
<string id="30062">Time</string>
<string id="30063">Dag</string>
<string id="30064">Cron-planlegger</string>
<string id="30065">Søndag</string>
<string id="30066">Mandag</string>
<string id="30067">Tirsdag</string>
<string id="30068">Onsdag</string>
<string id="30069">Torsdag</string>
<string id="30070">Fredag</string>
<string id="30071">Lørdag</string>
<string id="30072">Hver dag</string>
<string id="30073">Hver uke</string>
<string id="30074">Første dag i måneden</string>
<string id="30075">Egendefinert</string>
<string id="30076">Skru av etter sikkerhetskopiering</string>
<string id="30077">Start XBMC på nytt</string>
<string id="30078">Du bør starte XBMC på nytt for å fortsette</string>
<string id="30079">Bare i dag</string>
<string id="30080">Profiler</string>
<string id="30081">Planleggeren vil kjøre igjen på</string>
<string id="30082">Fremdriftslinje</string>
<string id="30083">Bakgrunnsfremdriftslinge</string>
<string id="30084">Ingen (Stum)</string>
<string id="30085">Versjonsadvarsel</string>
<string id="30086">Denne versjonen av XBMC er forskjellig fra den som ble benyttet til å lage sikkerhetskopien</string>
</strings>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Persian (Iran) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/fa_IR/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">عمومی</string>
<string id="30032">پایگاه داده</string>
<string id="30033">لیست پخش</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="30080">پروفایل ها</string>
</strings>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Persian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/fa/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">عمومی</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="30080">پروفایل</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Polish language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/pl/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">Kopia bezpieczeństwa XBMC</string>
<string id="30011">Ogólne</string>
<string id="30012">Wybór pliku</string>
<string id="30013">Harmonogram</string>
<string id="30016">Kopia bezpieczeństwa</string>
<string id="30017">Przywracanie</string>
<string id="30018">Przeglądaj ścieżkę</string>
<string id="30019">Wpisz ścieżkę</string>
<string id="30020">Przeglądaj zdalną ścieżkę</string>
<string id="30021">Nazwa folderu Kopii Bezpieczeństwa</string>
<string id="30022">Wyświetlaj postęp </string>
<string id="30023">Tryb</string>
<string id="30024">Wpisz ścieżkę zdalną</string>
<string id="30025">Typ zdalnej ścieżki</string>
<string id="30026">Kopie bezpieczeństwa do przechowywania (0 dla wszystkich)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Key</string>
<string id="30029">Dropbox Secret</string>
<string id="30030">Dodatki użytkownika</string>
<string id="30031">Dane dodatków</string>
<string id="30032">Baza danych</string>
<string id="30033">Playlista</string>
<string id="30034">Miniatury/Tapety</string>
<string id="30035">Pliki koniguracyjne</string>
<string id="30036">Własny katalog 1</string>
<string id="30037">Własny katalog 2</string>
<string id="30038">Wykryto Ustawienia Zaawansowane</string>
<string id="30039">Plik advancedsettings powinien być najpierw zrestartowany</string>
<string id="30040">Zaznacz Tak by odtworzyć ten plik i zrestartować XBMC</string>
<string id="30041">Wybierz Nie by kontykuować</string>
<string id="30042">Wznów Przywracanie</string>
<string id="30043">XBMC Backup wykrył niedokończone przyrwacanie</string>
<string id="30044">Czy chciałbyś kontynuować?</string>
<string id="30045">Błąd: Zdalna ścieżka nie istnieje</string>
<string id="30046">Uruchamiam</string>
<string id="30047">Lokalny katalog</string>
<string id="30048">Zdalny katalog</string>
<string id="30049">Zbieram liste plików</string>
<string id="30050">Zdalna ścieżka istnieje - może zawierać stare dane!</string>
<string id="30051">Tworzę liste plików</string>
<string id="30052">Zapisuję plik</string>
<string id="30053">Uruchamiam zaplanowaną kopię bezpieczeństwa</string>
<string id="30054">Usuwanie kopii bezpieczeństwa</string>
<string id="30056">Sprawdź logi aby zobaczyć adres autoryzacji Dropbox </string>
<string id="30057">Po zautoryzowaniu naciśnij OK</string>
<string id="30058">Potrzebny Dropbox Developer Code</string>
<string id="30059">Odwiedź https://www.dropbox.com/developers</string>
<string id="30060">Uruchom planowanie</string>
<string id="30061">Plan</string>
<string id="30062">Godzina dnia</string>
<string id="30063">Dzień tygodnia</string>
<string id="30064">Plan chronologiczny</string>
<string id="30065">Niedziela</string>
<string id="30066">Poniedziałek</string>
<string id="30067">Wtorek</string>
<string id="30068">Środa</string>
<string id="30069">Czwartek</string>
<string id="30070">Piątek</string>
<string id="30071">Sobota</string>
<string id="30072">Każdy dzień</string>
<string id="30073">Każdy tydzień</string>
<string id="30074">Pierwszy dzień miesiąca</string>
<string id="30075">Własny plan</string>
<string id="30076">Wyłącz system po zrobieniu kopii zapasowej</string>
<string id="30077">Restartuj XBMC</string>
<string id="30078">Powinieneś zrestartować XBMC by kontynuować</string>
<string id="30079">Tylko Dzisiaj </string>
<string id="30080">Profile</string>
<string id="30081">Harmonogram zostanie uruchomiony ponownie </string>
<string id="30082">Pasek postępu</string>
<string id="30083">Pasek postępu w tle</string>
<string id="30084">Brak (w tle)</string>
<string id="30085"> Ostrzeżenie o wersji</string>
<string id="30086">Ta wersja XBMC jest inna niż użyta do utworzenia archiwum</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Portuguese (Brazil) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/pt_BR/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backup</string>
<string id="30011">Geral</string>
<string id="30012">Seleção de arquivo</string>
<string id="30013">Agendando</string>
<string id="30016">Backup</string>
<string id="30017">Restauração</string>
<string id="30018">Procurar caminho</string>
<string id="30019">Digite o caminho</string>
<string id="30020">Procurar caminho remoto</string>
<string id="30021">Nome da pasta de backup</string>
<string id="30022">Mostrar Progresso</string>
<string id="30023">Modo</string>
<string id="30024">Digite o caminho remoto</string>
<string id="30025">Tipo de caminho remoto</string>
<string id="30026">Backups para manter (0 para todos)</string>
<string id="30027">Dropbox</string>
<string id="30028">Chave Dropbox</string>
<string id="30029">Segredo Dropbox</string>
<string id="30030">Addons do usuário</string>
<string id="30031">Dados do addon</string>
<string id="30032">Banco de dados</string>
<string id="30033">Lista de reprodução</string>
<string id="30034">Miniaturas/Fanart</string>
<string id="30035">Arquivos de configuração</string>
<string id="30036">Diretório personalizado 1</string>
<string id="30037">Diretório personalizado 2</string>
<string id="30038">Configurações avançadas detectadas</string>
<string id="30039">O arquivo advancedsettings deve ser restaurado antes</string>
<string id="30040">Selecione Sim para restaurar este arquivo e reiniciar o XBMC</string>
<string id="30041">Selecione Não para continuar</string>
<string id="30042">Retomar Restauração</string>
<string id="30043">O XBMC Backup detectou uma restauração não finalizada</string>
<string id="30044">Gostaria de continuar?</string>
<string id="30045">Erro: Caminho remoto inexistente</string>
<string id="30046">Iniciando</string>
<string id="30047">Diretório local</string>
<string id="30048">Diretório remoto</string>
<string id="30049">Reunindo lista de arquivos</string>
<string id="30050">Caminho remoto existente - pode conter arquivos antigos nele!</string>
<string id="30051">Criando lista de arquivos</string>
<string id="30052">Escrevendo arquivo</string>
<string id="30053">Iniciando backup agendado</string>
<string id="30054">Removendo backup</string>
<string id="30056">Verifique o log da URL de autorização do Dropbox</string>
<string id="30057">Clique OK quando autorizado</string>
<string id="30058">Necessário código de desenvolvedor Dropbox</string>
<string id="30059">Visite https://www.dropbox.com/developers</string>
<string id="30060">Habilitar agendamento</string>
<string id="30061">Agenda</string>
<string id="30062">Hora do Dia</string>
<string id="30063">Dia da Semana</string>
<string id="30064">Agenda Cron</string>
<string id="30065">Domingo</string>
<string id="30066">Segunda</string>
<string id="30067">Terça</string>
<string id="30068">Quarta</string>
<string id="30069">Quinta</string>
<string id="30070">Sexta</string>
<string id="30071">Sábado</string>
<string id="30072">Todo dia</string>
<string id="30073">Toda semana</string>
<string id="30074">Primeiro dia do mês</string>
<string id="30075">Agenda customizada</string>
<string id="30076">Desligar após backup</string>
<string id="30077">Reiniciar XBMC</string>
<string id="30078">Você deve reiniciar o XBMC para continuar</string>
<string id="30079">Somente Hoje</string>
<string id="30080">Perfis</string>
<string id="30081">Agendado para rodar novamente em</string>
<string id="30082">Barra de Progresso</string>
<string id="30083">Barra de Progresso ao Fundo</string>
<string id="30084">Nenhum (Silencioso)</string>
<string id="30085">Alertas da Versão</string>
<string id="30086">Esta versão do XBMC é diferente da que foi usada para criar o arquivo</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Portuguese language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/pt/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backup</string>
<string id="30011">Geral</string>
<string id="30012">Seleccionar ficheiros</string>
<string id="30013">Agendamento</string>
<string id="30016">Cópia Segurança</string>
<string id="30017">Restaurar</string>
<string id="30018">Procurar Localização</string>
<string id="30019">Introduzir Localização</string>
<string id="30020">Procurar Localização Remota</string>
<string id="30021">Nome da pasta de cópia</string>
<string id="30022">Indicador de Progresso</string>
<string id="30023">Modo</string>
<string id="30024">Introduza a localização remota</string>
<string id="30025">Tipo de localização remota</string>
<string id="30026">Número de cópias a manter (0 para manter todas)</string>
<string id="30027">Dropbox</string>
<string id="30028">Chave Dropbox</string>
<string id="30029">Segredo Dropbox</string>
<string id="30030">Add-ons do utilizador</string>
<string id="30031">Dados dos add-ons</string>
<string id="30032">Base de Dados</string>
<string id="30033">Listas de reprodução</string>
<string id="30034">Miniaturas/Fanart</string>
<string id="30035">Ficheiros de configuração</string>
<string id="30036">Pasta Personalizada 1</string>
<string id="30037">Pasta Personalizada 2</string>
<string id="30038">Definições Avançadas Detectadas</string>
<string id="30039">O ficheiro advancedsettings deve ser restaurado em primeiro lugar</string>
<string id="30040">Seleccione Sim para restaurar este ficheiro e reiniciar o XBMC</string>
<string id="30041">Seleccione Não para continuar</string>
<string id="30042">Retomar a Restauração</string>
<string id="30043">O XBMC Backup detectou uma restauração incompleta</string>
<string id="30044">Quer continuá-la?</string>
<string id="30045">Erro: a localização remota não existe</string>
<string id="30046">Iniciando</string>
<string id="30047">Pasta local</string>
<string id="30048">Pasta remota</string>
<string id="30049">Reunindo lista de ficheiros</string>
<string id="30050">Localização remota já existe - pode contar ficheiros antigos!</string>
<string id="30051">Criando lista de ficheiros</string>
<string id="30052">Gravando ficheiro</string>
<string id="30053">Iniciando cópia agendada</string>
<string id="30054">Removendo a cópia de segurança</string>
<string id="30056">Verifique o log para o URL de autorização Dropbox</string>
<string id="30057">Clique OK quando estiver autorizado</string>
<string id="30058">É necessário o código de programador do dropbox</string>
<string id="30059">Visite https://www.dropbox.com/developers</string>
<string id="30060">Activar Agendamento</string>
<string id="30061">Agendamento</string>
<string id="30062">Hora do Dia</string>
<string id="30063">Dia da Semana</string>
<string id="30064">Agendamento Cron</string>
<string id="30065">Domingo</string>
<string id="30066">Segunda</string>
<string id="30067">Terça</string>
<string id="30068">Quarta</string>
<string id="30069">Quinta</string>
<string id="30070">Sexta</string>
<string id="30071">Sábado</string>
<string id="30072">Diariamente</string>
<string id="30073">Semanalmente</string>
<string id="30074">Primeiro Dia do Mês</string>
<string id="30075">Agendamento Personalizado</string>
<string id="30076">Desligar após cópia de segurança</string>
<string id="30077">Reiniciar XBMC</string>
<string id="30078">Tem de reiniciar o XBMC para continuar</string>
<string id="30079">Apenas Hoje</string>
<string id="30080">Perfis</string>
<string id="30081">O agendamento será reiniciado a</string>
<string id="30082">Barra de Progresso</string>
<string id="30083">Barra de Progresso em Fundo</string>
<string id="30084">Nenhum (silenciosamente)</string>
<string id="30085">Aviso de Versão</string>
<string id="30086">Esta versão do XBMC é diferente da que foi usada para criar o arquivo</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Romanian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ro/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">General</string>
<string id="30023">Mod</string>
<string id="30032">Bază de date</string>
<string id="30033">Listă de redare</string>
<string id="30065">Duminică</string>
<string id="30066">Luni</string>
<string id="30067">Marți</string>
<string id="30068">Miercuri</string>
<string id="30069">Joi</string>
<string id="30070">Vineri</string>
<string id="30071">Sâmbătă</string>
<string id="30080">Profile</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Russian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ru/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">Резервная копия XBMC</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="30026">Кол-во резервных копий (0 - все)</string>
<string id="30027">Dropbox</string>
<string id="30028">Ключ Dropbox</string>
<string id="30029">Секретный ключ Dropbox</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="30036">Пользовательский каталог 1</string>
<string id="30037">Пользовательский каталог 2</string>
<string id="30038">Обнаружены дополнительные настройки</string>
<string id="30039">Файл с дополнительными настройками должен быть восстановлен первым</string>
<string id="30040">Нажмите Да, чтоб восстановить этот файл и перезапустить XBMC</string>
<string id="30041">Нажмите Нет для продолжения</string>
<string id="30042">Возобновить восстановление</string>
<string id="30043">XBMC Backup обнаружил неоконченное восстановление из копии</string>
<string id="30044">Продолжить?</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="30054">Удаление резервной копии</string>
<string id="30056">Проверьте журнал Dropbox для URL авторизации</string>
<string id="30057">Нажмите OK, когда авторизируйтесь</string>
<string id="30058">Нужен код разработчика Dropbox</string>
<string id="30059">Посетите https://www.dropbox.com/developers</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>
<string id="30076">Завершить работу после резервного копирования</string>
<string id="30077">Перезапустить XBMC</string>
<string id="30078">Необходимо перезапустить XBMC для продолжения</string>
<string id="30079">Только сегодня</string>
<string id="30080">Профили</string>
<string id="30081">Планировщик будет запущен снова в</string>
<string id="30082">Полоса с ходом выполнения</string>
<string id="30083">Ход выполнения в фоне</string>
<string id="30084">Не выводить (Тихо)</string>
<string id="30085">Предупреждение</string>
<string id="30086">Используемая версия XBMC отличается от версии, используемой при создании архива</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Serbian (Cyrillic) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/sr_RS/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Опште</string>
<string id="30023">Режим</string>
<string id="30032">База података</string>
<string id="30033">Списак за реп.</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="30080">Профили</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Serbian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/sr/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Opšte</string>
<string id="30023">Režim</string>
<string id="30032">Baza podataka</string>
<string id="30033">Spisak za rep.</string>
<string id="30065">Nedelja</string>
<string id="30066">Ponedeljak</string>
<string id="30067">Utorak</string>
<string id="30068">Sreda</string>
<string id="30069">Četvrtak</string>
<string id="30070">Petak</string>
<string id="30071">Subota</string>
<string id="30080">Profili</string>
</strings>

View File

@@ -1,48 +1,63 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Slovak language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/sk/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backup</string>
<string id="30011">Všeobecné</string>
<string id="30012">Voľba súboru</string>
<string id="30013">Plánovač</string>
<string id="30016">Záloha</string>
<string id="30017">Obnova</string>
<string id="30018">Prehliadať cestu</string>
<string id="30019">Zadať cestu</string>
<string id="30020">Prehliadať vzdialenú cestu</string>
<string id="30021">Meno priečinku zálohy</string>
<string id="30023">Režim</string>
<string id="30024">Zadať vzdialenú cestu</string>
<string id="30025">Druh vzdialenej cesty</string>
<string id="30026">Koľko záloh zachovať (0 pre všetky)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox kľúč</string>
<string id="30029">Dropbox Secret</string>
<string id="30030">Užívateľské doplnky</string>
<string id="30031">Dáta Doplnkov</string>
<string id="30032">Databáza</string>
<string id="30033">Playlist</string>
<string id="30034">Náhlady/Fanarty</string>
<string id="30035">Konfiguračné súbory</string>
<string id="30045">Chyba: Vzdialená cesta neexistuje</string>
<string id="30046">Začiatok</string>
<string id="30047">Miestny priečinok</string>
<string id="30048">Vzdialený priečinok</string>
<string id="30049">Zbieram zoznam súborov</string>
<string id="30050">Vzdialená cesta existuje - môže obsahovať staré súbory!</string>
<string id="30051">Vytvára sa zoznam súborov</string>
<string id="30052">Zapisuje sa súbor</string>
<string id="30053">Začiatok plánovanej zálohy</string>
<string id="30054">Odstránenie zálohy</string>
<string id="30056">Skontrolujte log pre Dropbox autorizačné URL</string>
<string id="30057">Kliknite OK po získaní oprávnenia</string>
<string id="30058">Potrebný Dropbox vývojársky kód</string>
<string id="30059">Navštívte https://www.dropbox.com/developers</string>
<string id="30060">Povoliť plánovač</string>
<string id="30061">Plán</string>
<string id="30062">Hodina v dni</string>
<string id="30063">Deň v týždni</string>
<string id="30064">'Cron' plán</string>
<string id="30065">Nedeľa</string>
<string id="30066">Pondelok</string>
<string id="30067">Utorok</string>
<string id="30068">Streda</string>
<string id="30069">Štvrtok</string>
<string id="30070">Piatok</string>
<string id="30071">Sobota</string>
<string id="30072">Každý den</string>
<string id="30073">Každý týždeň</string>
<string id="30074">Prvý deň mesiaca</string>
<string id="30075">Vlastný plán</string>
<string id="30076">Vypnúť po skončení zálohy</string>
<string id="30077">Reštartovať XBMC</string>
<string id="30080">Profily</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Slovenian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/sl/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Splošno</string>
<string id="30023">Način</string>
<string id="30032">Podatkovna baza</string>
<string id="30033">Seznam predvajanja</string>
<string id="30065">Nedelja</string>
<string id="30066">Ponedeljek</string>
<string id="30067">Torek</string>
<string id="30068">Sreda</string>
<string id="30069">Četrtek</string>
<string id="30070">Petek</string>
<string id="30071">Sobota</string>
<string id="30080">Profili</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Spanish (Argentina) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/es_AR/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">General</string>
<string id="30023">Modo</string>
<string id="30032">Base de Datos</string>
<string id="30033">Lista de reproducción</string>
<string id="30065">Domingo</string>
<string id="30066">Lunes</string>
<string id="30067">Martes</string>
<string id="30068">Miércoles</string>
<string id="30069">Jueves</string>
<string id="30070">Viernes</string>
<string id="30071">Sábado</string>
<string id="30080">Perfiles</string>
</strings>

View File

@@ -1,48 +1,59 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Spanish (Mexico) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/es_MX/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">Respaldo de XBMC</string>
<string id="30011">General</string>
<string id="30012">Selección de Archivo</string>
<string id="30013">Programación</string>
<string id="30016">Respaldo</string>
<string id="30017">Restaurar</string>
<string id="30018">Explorar Ruta</string>
<string id="30019">Ingresar Ruta</string>
<string id="30020">Explorar Ruta Remota</string>
<string id="30021">Nombre de Carpeta de Respaldo</string>
<string id="30023">Modo</string>
<string id="30024">Ingresar Ruta Remota</string>
<string id="30025">Tipo de Ruta Remota</string>
<string id="30026">Respaldos a mantener (0 para todos)</string>
<string id="30027">Dropbox</string>
<string id="30030">Addons de Usuario</string>
<string id="30031">Datos de Addons</string>
<string id="30032">Base de datos</string>
<string id="30033">Lista de reproducción</string>
<string id="30034">Miniaturas/Fanart</string>
<string id="30035">Archivos de Configuración</string>
<string id="30045">Error: Ruta remota no existe</string>
<string id="30046">Comenzando</string>
<string id="30047">Directorio Local</string>
<string id="30048">Directorio Remoto</string>
<string id="30049">Obteniendo lista de archivos</string>
<string id="30050">Ruta Remota existe - ¡Puede tener archivos antiguos!</string>
<string id="30051">Creando Lista de Archivos</string>
<string id="30052">Escribiendo archivo</string>
<string id="30053">Empezando respaldo programado</string>
<string id="30054">Eliminando respaldo</string>
<string id="30056">Revisar el log para la URL de autorización de Dropbox</string>
<string id="30057">Hacer click en OK cuando esté autorizado</string>
<string id="30060">Habilitar Programación</string>
<string id="30061">Programación</string>
<string id="30062">Hora del Día</string>
<string id="30063">Día de la Semana</string>
<string id="30064">Programación Cron</string>
<string id="30065">Domingo</string>
<string id="30066">Lunes</string>
<string id="30067">Martes</string>
<string id="30068">Miércoles</string>
<string id="30069">Jueves</string>
<string id="30070">Viernes</string>
<string id="30071">Sábado</string>
<string id="30072">Todos los Días</string>
<string id="30073">Todas las Semanas</string>
<string id="30074">Primer Día del Mes</string>
<string id="30075">Programación Perzonalizada</string>
<string id="30076">Apagar luego de respaldar</string>
<string id="30077">Reiniciar XBMC</string>
<string id="30080">Perfiles</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Spanish language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/es/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backup</string>
<string id="30011">General</string>
<string id="30012">Selección de archivo</string>
<string id="30013">Planificando</string>
<string id="30016">Backup</string>
<string id="30017">Restaurar</string>
<string id="30018">Examinar ruta</string>
<string id="30019">Escribir ruta</string>
<string id="30020">Examinar ruta remota</string>
<string id="30021">Nombre de directorio de respaldo</string>
<string id="30022">Pantalla de progreso</string>
<string id="30023">Modo</string>
<string id="30024">Escribir directorio remoto</string>
<string id="30025">Tipo de Ruta Remota</string>
<string id="30026">Copias de seguridad a mantener (0 para todas)</string>
<string id="30027">Dropbox</string>
<string id="30028">Clave de Dropbox</string>
<string id="30029">Secreto de Dropbox</string>
<string id="30030">Addons del usuario</string>
<string id="30031">Addon Data</string>
<string id="30032">Base de Datos</string>
<string id="30033">Lista de reproducción</string>
<string id="30034">Thumbnails/Fanart</string>
<string id="30035">Ficheros de configuración</string>
<string id="30036">Directorio Personalizado 1</string>
<string id="30037">Directorio Personalizado 2</string>
<string id="30038">Opciones avanzadas detectadas</string>
<string id="30039">Primero debería ser restaurado el archivo advancedsettings</string>
<string id="30040">Selecciona SI para restaurar este archivo y reiniciar XBMC</string>
<string id="30041">Selecciona NO para continuar</string>
<string id="30042">Reanudar restauración</string>
<string id="30043">XBMC Backup ha detectado una restauración sin terminar</string>
<string id="30044">¿Desea continuar?</string>
<string id="30045">Error: La ruta Remota no existe</string>
<string id="30046">Empezando</string>
<string id="30047">Directorio Local</string>
<string id="30048">Directorio Remoto</string>
<string id="30049">Obteniendo lista de fichero</string>
<string id="30050">¡Ruta Remota ya existe - puede haber ficheros antiguos en ella!</string>
<string id="30051">Creando lista de ficheros</string>
<string id="30052">Escribiendo fichero</string>
<string id="30053">Empezando copia de seguridad planificada</string>
<string id="30054">Eliminar copia de seguridad</string>
<string id="30056">Autoriza la URL en Dropbox</string>
<string id="30057">Presiona OK cuando se haya autorizado</string>
<string id="30058">Código de Desarrollador Dropbox necesario</string>
<string id="30059">Visita https://www.dropbox.com/developers</string>
<string id="30060">Habilitar Planificador</string>
<string id="30061">Planificador</string>
<string id="30062">Hora del Día</string>
<string id="30063">Día de la Semana</string>
<string id="30064">Cron Schedule</string>
<string id="30065">Domingo</string>
<string id="30066">Lunes</string>
<string id="30067">Martes</string>
<string id="30068">Miércoles</string>
<string id="30069">Jueves</string>
<string id="30070">Viernes</string>
<string id="30071">Sábado</string>
<string id="30072">Todos los días</string>
<string id="30073">Todas las semanas</string>
<string id="30074">Primer día de la semana</string>
<string id="30075">Planificador Custom</string>
<string id="30076">Apagar tras realizar la copia de seguridad</string>
<string id="30077">Reiniciar XBMC</string>
<string id="30078">Debería reiniciar XBMC para continuar</string>
<string id="30079">Hoy mismo</string>
<string id="30080">Perfiles</string>
<string id="30081">Planificador se ejecutará de nuevo en</string>
<string id="30082">Barra de progreso</string>
<string id="30083">Fondo de la barra de progreso</string>
<string id="30084">Ninguno (Silencio)</string>
<string id="30085">Advertencia de versión </string>
<string id="30086">Esta versión de XBMC es diferente a la que se utilizó para crear el archivo</string>
</strings>

View File

@@ -1,48 +1,81 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Swedish language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/sv/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30010">XBMC Backupp</string>
<string id="30011">Allmänt</string>
<string id="30012">Filval</string>
<string id="30013">Schemaläggning</string>
<string id="30016">Backupp</string>
<string id="30017">Återställ</string>
<string id="30018">Bläddra efter sökväg</string>
<string id="30019">Skriv sökväg</string>
<string id="30020">Bläddra efter fjärrsökväg</string>
<string id="30021">Backuppmappsnamn</string>
<string id="30022">Förlopp</string>
<string id="30023">Läge</string>
<string id="30024">Skriv fjärrsökväg</string>
<string id="30025">Fjärrsökvägstyp</string>
<string id="30026">Backupper att behålla (0 för alla)</string>
<string id="30027">Dropbox</string>
<string id="30028">Dropbox Nyckel</string>
<string id="30029">Dropbox Hemlighet</string>
<string id="30030">Användartillägg</string>
<string id="30031">Tilläggsdata</string>
<string id="30032">Databas</string>
<string id="30033">Spellista</string>
<string id="30034">Miniatyrer/fanart</string>
<string id="30035">Konfigurationsfiler</string>
<string id="30036">Egen mapp 1</string>
<string id="30037">Egen mapp 2</string>
<string id="30038">Avancerade inställningar upptäcktes</string>
<string id="30039">Filen för avancerade inställningar bör återställas först</string>
<string id="30040">Välj Ja för att återställa denna fil och starta om XBMC</string>
<string id="30041">Välj Nej för att fortsätta</string>
<string id="30042">Återuppta återställning</string>
<string id="30043">XBMC Backup har upptäckt en ofärdig återställning</string>
<string id="30044">Vill du fortsätta?</string>
<string id="30045">Fel: Fjärrsökväg existerar inte</string>
<string id="30046">Startar</string>
<string id="30047">Lokalmapp</string>
<string id="30048">Fjärrmapp</string>
<string id="30049">Samlar fillista</string>
<string id="30050">Fjärrsökväg existerar - kan innehålla gamla filer!</string>
<string id="30051">Skapar fillista</string>
<string id="30052">Skriver fil</string>
<string id="30053">Startar schemalagd backupp</string>
<string id="30054">Tar bort backupper</string>
<string id="30056">Kontrollera loggen efter adress för Dropbox-inloggning</string>
<string id="30057">Klicka OK när du är inloggad</string>
<string id="30058">Dropbox utvecklarkod krävs</string>
<string id="30059">Besök https://www.dropbox.com/developers</string>
<string id="30060">Aktivera schemaläggare</string>
<string id="30061">Schemalägg</string>
<string id="30062">Timme av dagen</string>
<string id="30063">Dag av veckan</string>
<string id="30064">Cronschema</string>
<string id="30065">Söndag</string>
<string id="30066">Måndag</string>
<string id="30067">Tisdag</string>
<string id="30068">Onsdag</string>
<string id="30069">Torsdag</string>
<string id="30070">Fredag</string>
<string id="30071">Lördag</string>
<string id="30072">Varje dag</string>
<string id="30073">Varje vecka</string>
<string id="30074">Första dagen i månaden</string>
<string id="30075">Eget schema</string>
<string id="30076">Stäng av efter Backup</string>
<string id="30077">Starta om XBMC</string>
<string id="30078">Du borde starta om XBMC för att fortsätta</string>
<string id="30079">Bara idag</string>
<string id="30080">Profiles</string>
<string id="30081">Schemaläggaren kommer köras igen</string>
<string id="30082">Förloppsindikator</string>
<string id="30083">Bakgroundsförloppsindikator</string>
<string id="30084">Ingen (tyst)</string>
<string id="30085">Version varning</string>
<string id="30086">Den här versionen av XBMC är annorlunda än den som användes vid skapandet av arkivet</string>
</strings>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Tamil (India) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/ta_IN/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30010">XBMC மறுபிரதி</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="30023">முறை</string>
<string id="30024">தொலை பாதை உள்ளிடு</string>
<string id="30025">தொலை பாதை உள்ளிடு</string>
<string id="30026">வைக்கவேண்டிய மறுபிரதிகள் (0 - அனைத்திற்கும்)</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="30054">மறுபிரதியை நீக்கு</string>
<string id="30060">திட்டமிடுநர் செயல்படுத்து</string>
<string id="30061">திட்டமிடு</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>
<string id="30080">சுயவிவரங்கள்</string>
</strings>

View File

@@ -1,48 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Thai language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/th/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">ทั่วไป</string>
<string id="30023">โหมด</string>
<string id="30032">ฐานข้อมูล</string>
<string id="30033">รายการเพลง</string>
<string id="30061">ตารางงาน</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="30077">เริ่ม XBMC ใหม่</string>
<string id="30080">ข้อมูลส่วนตัว</string>
</strings>

View File

@@ -1,48 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Turkish language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/tr/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Genel</string>
<string id="30016">Yedekle</string>
<string id="30023">Mod</string>
<string id="30032">Veritabanı</string>
<string id="30033">Çalma listesi</string>
<string id="30065">Pazar</string>
<string id="30066">Pazartesi</string>
<string id="30067">Salı</string>
<string id="30068">Çarşamba</string>
<string id="30069">Perşembe</string>
<string id="30070">Cuma</string>
<string id="30071">Cumartesi</string>
<string id="30080">Profiller</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Ukrainian language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/uk/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Загальні</string>
<string id="30023">Режим</string>
<string id="30032">База даних</string>
<string id="30033">Список відтворювання</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="30080">Профілі</string>
</strings>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Uzbek language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/uz/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">Umumiy</string>
<string id="30032">Ma'lumot bazasi</string>
<string id="30033">Ijro ro'yxati</string>
</strings>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Vietnamese (Viet Nam) language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/vi_VN/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">Chung</string>
</strings>

View File

@@ -1,48 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Vietnamese language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/vi/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<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>
<string id="30011">Tổng Quan</string>
<string id="30023">Chế độ</string>
<string id="30032">Cơ sở dữ liệu</string>
<string id="30033">Playlist</string>
<string id="30065">Chủ Nhật</string>
<string id="30066">Thứ Hai</string>
<string id="30067">Thứ Ba</string>
<string id="30068">Thứ Tư</string>
<string id="30069">Thứ Năm</string>
<string id="30070">Thứ Sáu</string>
<string id="30071">Thứ Bảy</string>
<string id="30080">Tài khoản</string>
</strings>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Translated using Transifex web application. For support, or if you would like to to help out, please visit your language team! -->
<!-- Welsh language-Team URL: http://www.transifex.com/projects/p/xbmc-addons/language/cy/ -->
<!-- Report language file syntax bugs at: alanwww1@xbmc.org -->
<strings>
<string id="30011">Cyffredinol</string>
</strings>

2
resources/lib/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.pyo

View File

@@ -1,85 +1,33 @@
import xbmc
import xbmcgui
import vfs as vfs
import xbmcvfs
import utils as utils
import os
import time
import json
from vfs import XBMCFileSystem,DropboxFileSystem,ZipFileSystem
from resources.lib.guisettings import GuiSettingsManager
class FileManager:
walk_path = ''
fileArray = None
verbose_log = False
def folderSort(aKey):
result = aKey[0]
def __init__(self,path):
self.walk_path = path
if(len(result) < 8):
result = result + "0000"
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
return result
class XbmcBackup:
#constants for initiating a back or restore
Backup = 0
Restore = 1
#file systems
xbmc_vfs = None
remote_vfs = None
saved_remote_vfs = None
local_path = ''
remote_path = ''
restoreFile = None
remote_base_path = None
#for the progress bar
progressBar = None
@@ -87,124 +35,620 @@ class XbmcBackup:
filesTotal = 1
fileManager = None
restore_point = None
skip_advanced = False #if we should check for the existance of advancedsettings in the restore
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")
self.xbmc_vfs = XBMCFileSystem(xbmc.translatePath('special://home'))
#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 + "/"
self.configureRemote()
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) + "......")
def configureRemote(self):
if(utils.getSetting('remote_selection') == '1'):
self.remote_base_path = utils.getSetting('remote_path_2');
self.remote_vfs = XBMCFileSystem(utils.getSetting('remote_path_2'))
utils.setSetting("remote_path","")
elif(utils.getSetting('remote_selection') == '0'):
self.remote_base_path = utils.getSetting('remote_path');
self.remote_vfs = XBMCFileSystem(utils.getSetting("remote_path"))
elif(utils.getSetting('remote_selection') == '2'):
self.remote_base_path = "/"
self.remote_vfs = DropboxFileSystem("/")
#determine backup mode
if(mode == -1):
mode = int(utils.getSetting('addon_mode'))
def remoteConfigured(self):
result = True
if(self.remote_base_path == ""):
result = False
return result
def listBackups(self):
result = []
#get all the folders in the current root path
dirs,files = self.remote_vfs.listdir(self.remote_base_path)
for aDir in dirs:
if(self.remote_vfs.exists(self.remote_base_path + aDir + "/xbmcbackup.val")):
#folder may or may not contain time, older versions didn't include this
folderName = ''
if(len(aDir) > 8):
folderName = aDir[6:8] + '-' + aDir[4:6] + '-' + aDir[0:4] + " " + aDir[8:10] + ":" + aDir[10:12]
else:
folderName = aDir[6:8] + '-' + aDir[4:6] + '-' + aDir[0:4]
result.append((aDir,folderName))
for aFile in files:
file_ext = aFile.split('.')[-1]
folderName = utils.encode(aFile.split('.')[0])
if(file_ext == 'zip' and (len(folderName) == 12 or len(folderName) == 8) and str.isdigit(folderName)):
#folder may or may not contain time, older versions didn't include this
if(len(aFile ) > 8):
folderName = aFile [6:8] + '-' + aFile [4:6] + '-' + aFile [0:4] + " " + aFile [8:10] + ":" + aFile [10:12]
else:
folderName = aFile [6:8] + '-' + aFile [4:6] + '-' + aFile [0:4]
result.append((aFile ,folderName))
result.sort(key=folderSort)
return result
def selectRestore(self,restore_point):
self.restore_point = restore_point
def skipAdvanced(self):
self.skip_advanced = True
def run(self,mode=-1,progressOverride=False):
#set windows setting to true
window = xbmcgui.Window(10000)
window.setProperty(utils.__addon_id__ + ".running","true")
#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 = ""
progressBarTitle = utils.getString(30010) + " - "
if(mode == self.Backup and self.remote_vfs.root_path != ''):
if(utils.getSetting("compress_backups") == 'true'):
#delete old temp file
if(self.xbmc_vfs.exists(xbmc.translatePath('special://temp/xbmc_backup_temp.zip'))):
self.xbmc_vfs.rmfile(xbmc.translatePath('special://temp/xbmc_backup_temp.zip'))
#save the remote file system and use the zip vfs
self.saved_remote_vfs = self.remote_vfs
self.remote_vfs = ZipFileSystem(xbmc.translatePath("special://temp/xbmc_backup_temp.zip"),"w")
self.remote_vfs.set_root(self.remote_vfs.root_path + time.strftime("%Y%m%d%H%M") + "/")
progressBarTitle = progressBarTitle + utils.getString(30016)
elif(mode == self.Restore and self.restore_point != None and self.remote_vfs.root_path != ''):
if(self.restore_point.split('.')[-1] != 'zip'):
self.remote_vfs.set_root(self.remote_vfs.root_path + self.restore_point + "/")
progressBarTitle = progressBarTitle + utils.getString(30017)
else:
#kill the program here
self.remote_vfs = None
return
utils.log(utils.getString(30047) + ": " + self.local_path)
utils.log(utils.getString(30048) + ": " + self.remote_path)
utils.log(utils.getString(30047) + ": " + self.xbmc_vfs.root_path)
utils.log(utils.getString(30048) + ": " + self.remote_vfs.root_path)
#setup the progress bar
self.progressBar = BackupProgressBar(progressOverride)
self.progressBar.create(progressBarTitle,utils.getString(30049) + "......")
#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
#check if remote path exists
if(self.remote_vfs.exists(self.remote_vfs.root_path)):
#may be data in here already
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)
#make the remote directory
self.remote_vfs.mkdir(self.remote_vfs.root_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)
#create a validation file for backup rotation
writeCheck = self._createValidationFile()
if(not writeCheck):
#we may not be able to write to this destination for some reason
shouldContinue = xbmcgui.Dialog().yesno(utils.getString(30089),utils.getString(30090), utils.getString(30044),autoclose=25000)
if(not shouldContinue):
return
utils.log(utils.getString(30051))
allFiles = []
fileManager = FileManager(self.xbmc_vfs)
#go through each of the user selected items and write them to the backup store
if(utils.getSetting('backup_addons') == 'true'):
fileManager.addFile("-" + xbmc.translatePath('special://home/addons'))
fileManager.walkTree(xbmc.translatePath('special://home/addons'))
fileManager.addFile("-" + xbmc.translatePath('special://home/userdata'))
if(utils.getSetting('backup_addon_data') == 'true'):
fileManager.addFile("-" + xbmc.translatePath('special://home/userdata/addon_data'))
fileManager.walkTree(xbmc.translatePath('special://home/userdata/addon_data'))
if(utils.getSetting('backup_database') == 'true'):
fileManager.addFile("-" + xbmc.translatePath('special://home/userdata/Database'))
fileManager.walkTree(xbmc.translatePath('special://home/userdata/Database'))
if(utils.getSetting("backup_playlists") == 'true'):
fileManager.addFile("-" + xbmc.translatePath('special://home/userdata/playlists'))
fileManager.walkTree(xbmc.translatePath('special://home/userdata/playlists'))
if(utils.getSetting('backup_profiles') == 'true'):
fileManager.addFile("-" + xbmc.translatePath('special://home/userdata/profiles'))
fileManager.walkTree(xbmc.translatePath('special://home/userdata/profiles'))
if(utils.getSetting("backup_thumbnails") == "true"):
fileManager.addFile("-" + xbmc.translatePath('special://home/userdata/Thumbnails'))
fileManager.walkTree(xbmc.translatePath('special://home/userdata/Thumbnails'))
if(utils.getSetting("backup_config") == "true"):
fileManager.addFile("-" + xbmc.translatePath('special://home/userdata/keymaps'))
fileManager.walkTree(xbmc.translatePath('special://home/userdata/keymaps'))
fileManager.addFile("-" + xbmc.translatePath('special://home/userdata/peripheral_data'))
fileManager.walkTree(xbmc.translatePath('special://home/userdata/peripheral_data'))
fileManager.addFile('-' + xbmc.translatePath('special://home/userdata/library'))
fileManager.walkTree(xbmc.translatePath('special://home/userdata/library'))
#this part is an oddity
dirs,configFiles = self.xbmc_vfs.listdir(xbmc.translatePath('special://home/userdata/'))
for aFile in configFiles:
if(aFile.endswith(".xml")):
fileManager.addFile(xbmc.translatePath('special://home/userdata/') + aFile)
#add to array
self.filesTotal = fileManager.size()
allFiles.append({"source":self.xbmc_vfs.root_path,"dest":self.remote_vfs.root_path,"files":fileManager.getFiles()})
orig_base_path = self.remote_vfs.root_path
#check if there are custom directories
if(utils.getSetting('custom_dir_1_enable') == 'true' and utils.getSetting('backup_custom_dir_1') != ''):
#create a special remote path with hash
self.xbmc_vfs.set_root(utils.getSetting('backup_custom_dir_1'))
fileManager.addFile("-custom_" + self._createCRC(self.xbmc_vfs.root_path))
#walk the directory
fileManager.walkTree(self.xbmc_vfs.root_path)
self.filesTotal = self.filesTotal + fileManager.size()
allFiles.append({"source":self.xbmc_vfs.root_path,"dest":self.remote_vfs.root_path + "custom_" + self._createCRC(self.xbmc_vfs.root_path),"files":fileManager.getFiles()})
if(utils.getSetting('custom_dir_2_enable') == 'true' and utils.getSetting('backup_custom_dir_2') != ''):
#create a special remote path with hash
self.xbmc_vfs.set_root(utils.getSetting('backup_custom_dir_2'))
fileManager.addFile("-custom_" + self._createCRC(self.xbmc_vfs.root_path))
#walk the directory
fileManager.walkTree(self.xbmc_vfs.root_path)
self.filesTotal = self.filesTotal + fileManager.size()
allFiles.append({"source":self.xbmc_vfs.root_path,"dest":self.remote_vfs.root_path + "custom_" + self._createCRC(self.xbmc_vfs.root_path),"files":fileManager.getFiles()})
#backup all the files
self.filesLeft = self.filesTotal
for fileGroup in allFiles:
self.xbmc_vfs.set_root(fileGroup['source'])
self.remote_vfs.set_root(fileGroup['dest'])
filesCopied = self.backupFiles(fileGroup['files'],self.xbmc_vfs,self.remote_vfs)
if(not filesCopied):
utils.showNotification(utils.getString(30092))
utils.log(utils.getString(30092))
#reset remote and xbmc vfs
self.xbmc_vfs.set_root("special://home/")
self.remote_vfs.set_root(orig_base_path)
if(utils.getSetting("compress_backups") == 'true'):
#send the zip file to the real remote vfs
zip_name = self.remote_vfs.root_path[:-1] + ".zip"
self.remote_vfs.cleanup()
self.xbmc_vfs.rename(xbmc.translatePath("special://temp/xbmc_backup_temp.zip"), xbmc.translatePath("special://temp/" + zip_name))
fileManager.addFile(xbmc.translatePath("special://temp/" + zip_name))
#set root to data dir home
self.xbmc_vfs.set_root(xbmc.translatePath("special://temp/"))
self.remote_vfs = self.saved_remote_vfs
self.progressBar.updateProgress(98, utils.getString(30088))
fileCopied = self.backupFiles(fileManager.getFiles(),self.xbmc_vfs, self.remote_vfs)
if(not fileCopied):
#zip archive copy filed, inform the user
shouldContinue = xbmcgui.Dialog().ok(utils.getString(30089),utils.getString(30090), utils.getString(30091))
#delete the temp zip file
self.xbmc_vfs.rmfile(xbmc.translatePath("special://temp/" + zip_name))
#remove old backups
self._rotateBackups()
elif (mode == self.Restore):
utils.log(utils.getString(30023) + " - " + utils.getString(30017))
#catch for if the restore point is actually a zip file
if(self.restore_point.split('.')[-1] == 'zip'):
self.progressBar.updateProgress(2, utils.getString(30088))
utils.log("copying zip file: " + self.restore_point)
#set root to data dir home
self.xbmc_vfs.set_root(xbmc.translatePath("special://temp/"))
if(not self.xbmc_vfs.exists(xbmc.translatePath("special://temp/" + self.restore_point))):
#copy just this file from the remote vfs
zipFile = []
zipFile.append(self.remote_base_path + self.restore_point)
self.backupFiles(zipFile,self.remote_vfs, self.xbmc_vfs)
else:
utils.log("zip file exists already")
#extract the zip file
zip_vfs = ZipFileSystem(xbmc.translatePath("special://temp/"+ self.restore_point),'r')
zip_vfs.extract(xbmc.translatePath("special://temp/"))
zip_vfs.cleanup()
#set the new remote vfs and fix xbmc path
self.remote_vfs = XBMCFileSystem(xbmc.translatePath("special://temp/" + self.restore_point.split(".")[0] + "/"))
self.xbmc_vfs.set_root(xbmc.translatePath("special://home/"))
#for restores remote path must exist
if(not self.remote_vfs.exists(self.remote_vfs.root_path)):
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30045),self.remote_vfs.root_path)
return
if(not self._checkValidationFile(self.remote_vfs.root_path)):
#don't continue
return
utils.log(utils.getString(30051))
allFiles = []
fileManager = FileManager(self.remote_vfs)
#go through each of the user selected items and write them to the backup store
if(utils.getSetting("backup_config") == "true"):
#check for the existance of an advancedsettings file
if(self.remote_vfs.exists(self.remote_vfs.root_path + "userdata/advancedsettings.xml") and not self.skip_advanced):
#let the user know there is an advanced settings file present
restartXbmc = xbmcgui.Dialog().yesno(utils.getString(30038),utils.getString(30039),utils.getString(30040), utils.getString(30041))
if(restartXbmc):
#add only this file to the file list
fileManager.addFile(self.remote_vfs.root_path + "userdata/advancedsettings.xml")
self.backupFiles(fileManager.getFiles(),self.remote_vfs,self.xbmc_vfs)
#let the service know to resume this backup on startup
self._createResumeBackupFile()
#do not continue running
xbmcgui.Dialog().ok(utils.getString(30077),utils.getString(30078))
return
fileManager.addFile('-' + self.remote_vfs.root_path + 'userdata/keymaps')
fileManager.walkTree(self.remote_vfs.root_path + "userdata/keymaps")
fileManager.addFile('-' + self.remote_vfs.root_path + "userdata/peripheral_data")
fileManager.walkTree(self.remote_vfs.root_path + "userdata/peripheral_data")
fileManager.addFile('-' + self.remote_vfs.root_path + "userdata/library")
fileManager.walkTree(self.remote_vfs.root_path + "userdata/library")
#this part is an oddity
dirs,configFiles = self.remote_vfs.listdir(self.remote_vfs.root_path + "userdata/")
for aFile in configFiles:
if(aFile.endswith(".xml")):
fileManager.addFile(self.remote_vfs.root_path + "userdata/" + aFile)
if(utils.getSetting('backup_addons') == 'true'):
fileManager.addFile('-' + self.remote_vfs.root_path + "addons")
fileManager.walkTree(self.remote_vfs.root_path + "addons")
self.xbmc_vfs.mkdir(xbmc.translatePath('special://home/userdata'))
if(utils.getSetting('backup_addon_data') == 'true'):
fileManager.addFile('-' + self.remote_vfs.root_path + "userdata/addon_data")
fileManager.walkTree(self.remote_vfs.root_path + "userdata/addon_data")
if(utils.getSetting('backup_database') == 'true'):
fileManager.addFile('-' + self.remote_vfs.root_path + "userdata/Database")
fileManager.walkTree(self.remote_vfs.root_path + "userdata/Database")
if(utils.getSetting("backup_playlists") == 'true'):
fileManager.addFile('-' + self.remote_vfs.root_path + "userdata/playlists")
fileManager.walkTree(self.remote_vfs.root_path + "userdata/playlists")
if(utils.getSetting('backup_profiles') == 'true'):
fileManager.addFile('-' + self.remote_vfs.root_path + "userdata/profiles")
fileManager.walkTree(self.remote_vfs.root_path + "userdata/profiles")
if(utils.getSetting("backup_thumbnails") == "true"):
fileManager.addFile('-' + self.remote_vfs.root_path + "userdata/Thumbnails")
fileManager.walkTree(self.remote_vfs.root_path + "userdata/Thumbnails")
#add to array
self.filesTotal = fileManager.size()
allFiles.append({"source":self.remote_vfs.root_path,"dest":self.xbmc_vfs.root_path,"files":fileManager.getFiles()})
#check if there are custom directories
if(utils.getSetting('custom_dir_1_enable') == 'true' and utils.getSetting('backup_custom_dir_1') != ''):
self.xbmc_vfs.set_root(utils.getSetting('backup_custom_dir_1'))
if(self.remote_vfs.exists(self.remote_vfs.root_path + "custom_" + self._createCRC(self.xbmc_vfs.root_path))):
#index files to restore
fileManager.walkTree(self.remote_vfs.root_path + "custom_" + self._createCRC(self.xbmc_vfs.root_path))
self.filesTotal = self.filesTotal + fileManager.size()
allFiles.append({"source":self.remote_vfs.root_path + "custom_" + self._createCRC(self.xbmc_vfs.root_path),"dest":self.xbmc_vfs.root_path,"files":fileManager.getFiles()})
else:
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30045),self.remote_vfs.root_path + "custom_" + self._createCRC(utils.getSetting('backup_custom_dir_1')))
if(utils.getSetting('custom_dir_2_enable') == 'true' and utils.getSetting('backup_custom_dir_2') != ''):
self.xbmc_vfs.set_root(utils.getSetting('backup_custom_dir_2'))
if(self.remote_vfs.exists(self.remote_vfs.root_path + "custom_" + self._createCRC(self.xbmc_vfs.root_path))):
#index files to restore
fileManager.walkTree(self.remote_vfs.root_path + "custom_" + self._createCRC(self.xbmc_vfs.root_path))
self.filesTotal = self.filesTotal + fileManager.size()
allFiles.append({"source":self.remote_vfs.root_path + "custom_" + self._createCRC(self.xbmc_vfs.root_path),"dest":self.xbmc_vfs.root_path,"files":fileManager.getFiles()})
else:
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30045),self.remote_vfs.root_path + "custom_" + self._createCRC(utils.getSetting('backup_custom_dir_2')))
#restore all the files
self.filesLeft = self.filesTotal
for fileGroup in allFiles:
self.remote_vfs.set_root(fileGroup['source'])
self.xbmc_vfs.set_root(fileGroup['dest'])
self.backupFiles(fileGroup['files'],self.remote_vfs,self.xbmc_vfs)
if(self.restore_point.split('.')[-1] == 'zip'):
#delete the zip file and the extracted directory
self.xbmc_vfs.rmfile(xbmc.translatePath("special://temp/" + self.restore_point))
self.xbmc_vfs.rmdir(self.remote_vfs.root_path)
if(utils.getSetting("backup_config") == "true"):
#update the guisettings information (or what we can from it)
gui_settings = GuiSettingsManager('special://home/userdata/guisettings.xml')
gui_settings.run()
#call update addons to refresh everything
xbmc.executebuiltin('UpdateLocalAddons')
self.xbmc_vfs.cleanup()
self.remote_vfs.cleanup()
self.progressBar.close()
#reset the window setting
window.setProperty(utils.__addon_id__ + ".running","")
def backupFiles(self,fileList,source,dest):
result = True
utils.log("Writing files to: " + dest.root_path)
utils.log("Source: " + source.root_path)
for aFile in fileList:
if(not self.progressBar.checkCancel()):
utils.log('Writing file: ' + aFile,xbmc.LOGDEBUG)
if(aFile.startswith("-")):
self._updateProgress(aFile[len(source.root_path) + 1:])
dest.mkdir(dest.root_path + aFile[len(source.root_path) + 1:])
else:
self._updateProgress()
wroteFile = True
if(isinstance(source,DropboxFileSystem)):
#if copying from dropbox we need the file handle, use get_file
wroteFile = source.get_file(aFile,dest.root_path + aFile[len(source.root_path):])
else:
#copy using normal method
wroteFile = dest.put(aFile,dest.root_path + aFile[len(source.root_path):])
#if result is still true but this file failed
if(not wroteFile and result):
result = False
return result
def _createCRC(self,string):
#create hash from string
string = string.lower()
bytes = bytearray(string.encode())
crc = 0xffffffff;
for b in bytes:
crc = crc ^ (b << 24)
for i in range(8):
if (crc & 0x80000000 ):
crc = (crc << 1) ^ 0x04C11DB7
else:
crc = crc << 1;
crc = crc & 0xFFFFFFFF
return '%08x' % crc
def _updateProgress(self,message=None):
self.filesLeft = self.filesLeft - 1
self.progressBar.updateProgress(int((float(self.filesTotal - self.filesLeft)/float(self.filesTotal)) * 100),message)
def _rotateBackups(self):
total_backups = int(utils.getSetting('backup_rotation'))
if(total_backups > 0):
#get a list of valid backup folders
dirs = self.listBackups()
if(len(dirs) > total_backups):
#remove backups to equal total wanted
remove_num = 0
self.filesTotal = self.filesTotal + remove_num + 1
#update the progress bar if it is available
while(remove_num < (len(dirs) - total_backups) and not self.progressBar.checkCancel()):
self._updateProgress(utils.getString(30054) + " " + dirs[remove_num][1])
utils.log("Removing backup " + dirs[remove_num][0])
if(dirs[remove_num][0].split('.')[-1] == 'zip'):
#this is a file, remove it that way
self.remote_vfs.rmfile(self.remote_base_path + dirs[remove_num][0])
else:
self.remote_vfs.rmdir(self.remote_base_path + dirs[remove_num][0] + "/")
remove_num = remove_num + 1
def _createValidationFile(self):
vFile = xbmcvfs.File(xbmc.translatePath(utils.data_dir() + "xbmcbackup.val"),'w')
vFile.write(json.dumps({"name":"XBMC Backup Validation File","xbmc_version":xbmc.getInfoLabel('System.BuildVersion')}))
vFile.write("")
vFile.close()
success = self.remote_vfs.put(xbmc.translatePath(utils.data_dir() + "xbmcbackup.val"),self.remote_vfs.root_path + "xbmcbackup.val")
return success
def _checkValidationFile(self,path):
result = False
#copy the file and open it
self.xbmc_vfs.put(path + "xbmcbackup.val",xbmc.translatePath(utils.data_dir() + "xbmcbackup.val"))
vFile = xbmcvfs.File(xbmc.translatePath(utils.data_dir() + "xbmcbackup.val"),'r')
jsonString = vFile.read()
vFile.close()
try:
json_dict = json.loads(jsonString)
if(xbmc.getInfoLabel('System.BuildVersion') == json_dict['xbmc_version']):
result = True
else:
result = xbmcgui.Dialog().yesno(utils.getString(30085),utils.getString(30086),utils.getString(30044))
except ValueError:
#may fail on older archives
result = True
return result
def _createResumeBackupFile(self):
rFile = xbmcvfs.File(xbmc.translatePath(utils.data_dir() + "resume.txt"),'w')
rFile.write(self.restore_point)
rFile.close()
class FileManager:
not_dir = ['.zip','.xsp','.rar']
def __init__(self,vfs):
self.vfs = vfs
self.fileArray = []
def walkTree(self,directory):
if(self.vfs.exists(directory)):
dirs,files = self.vfs.listdir(directory)
#create all the subdirs first
for aDir in dirs:
dirPath = xbmc.translatePath(directory + "/" + aDir)
file_ext = aDir.split('.')[-1]
self.addFile("-" + dirPath)
#catch for "non directory" type files
shouldWalk = True
for s in file_ext:
if(s in self.not_dir):
shouldWalk = False
if(shouldWalk):
self.walkTree(dirPath)
#copy all the files
for aFile in files:
filePath = xbmc.translatePath(directory + "/" + aFile)
self.addFile(filePath)
def addFile(self,filename):
try:
filename = filename.decode('UTF-8')
except UnicodeDecodeError:
filename = filename.decode('ISO-8859-2')
#write the full remote path name of this file
utils.log("Add File: " + filename,xbmc.LOGDEBUG)
self.fileArray.append(filename)
def getFiles(self):
result = self.fileArray
self.fileArray = []
return result
def size(self):
return len(self.fileArray)
class BackupProgressBar:
NONE = 2
DIALOG = 0
BACKGROUND = 1
mode = 2
progressBar = None
override = False
def __init__(self,progressOverride):
self.override = progressOverride
#check if we should use the progress bar
if(int(utils.getSetting('progress_mode')) != 2):
#check if background or normal
if(int(utils.getSetting('progress_mode')) == 0 and not self.override):
self.mode = self.DIALOG
self.progressBar = xbmcgui.DialogProgress()
else:
self.mode = self.BACKGROUND
self.progressBar = xbmcgui.DialogProgressBG()
def create(self,heading,message):
if(self.mode != self.NONE):
self.progressBar.create(heading,message)
def updateProgress(self,percent,message=None):
#update the progress bar
if(self.mode != self.NONE):
if(message != None):
#need different calls for dialog and background bars
if(self.mode == self.DIALOG):
self.progressBar.update(percent,message)
else:
self.progressBar.update(percent,message=message)
else:
self.progressBar.update(percent)
def checkCancel(self):
result = False
if(self.progressBar != None):
if(self.mode == self.DIALOG):
result = self.progressBar.iscanceled()
return result
def isReady(self):
return True if self.remote_path != '' else False
def close(self):
if(self.mode != self.NONE):
self.progressBar.close()

2
resources/lib/dropbox/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
*.pyc

View File

@@ -0,0 +1,3 @@
from __future__ import absolute_import
from . import client, rest, session

View File

@@ -0,0 +1,965 @@
"""
The main client API you'll be working with most often. You'll need to
configure a dropbox.session.DropboxSession for this to work, but otherwise
it's fairly self-explanatory.
Before you can begin making requests to the dropbox API, you have to
authenticate your application with Dropbox and get the user to
authorize your application to use dropbox on his behalf. A typical
progam, from the initial imports to making a simple request (``account_info``),
looks like this:
.. code-block:: python
# Include the Dropbox SDK libraries
from dropbox import client, rest, session
# Get your app key and secret from the Dropbox developer website
APP_KEY = 'INSERT_APP_KEY_HERE'
APP_SECRET = 'INSERT_SECRET_HERE'
# ACCESS_TYPE should be 'dropbox' or 'app_folder' as configured for your app
ACCESS_TYPE = 'INSERT_ACCESS_TYPE_HERE'
sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE)
request_token = sess.obtain_request_token()
url = sess.build_authorize_url(request_token)
# Make the user sign in and authorize this token
print "url:", url
print "Please visit this website and press the 'Allow' button, then hit 'Enter' here."
raw_input()
# This will fail if the user didn't visit the above URL and hit 'Allow'
access_token = sess.obtain_access_token(request_token)
client = client.DropboxClient(sess)
print "linked account:", client.account_info()
"""
from __future__ import absolute_import
import re
import os
from StringIO import StringIO
try:
import json
except ImportError:
import simplejson as json
from .rest import ErrorResponse, RESTClient
def format_path(path):
"""Normalize path for use with the Dropbox API.
This function turns multiple adjacent slashes into single
slashes, then ensures that there's a leading slash but
not a trailing slash.
"""
if not path:
return path
path = re.sub(r'/+', '/', path)
if path == '/':
return (u"" if isinstance(path, unicode) else "")
else:
return '/' + path.strip('/')
class DropboxClient(object):
"""
The main access point of doing REST calls on Dropbox. You should
first create and configure a dropbox.session.DropboxSession object,
and then pass it into DropboxClient's constructor. DropboxClient
then does all the work of properly calling each API method
with the correct OAuth authentication.
You should be aware that any of these methods can raise a
rest.ErrorResponse exception if the server returns a non-200
or invalid HTTP response. Note that a 401 return status at any
point indicates that the user needs to be reauthenticated.
"""
def __init__(self, session, rest_client=RESTClient):
"""Initialize the DropboxClient object.
Args:
``session``: A dropbox.session.DropboxSession object to use for making requests.
``rest_client``: A dropbox.rest.RESTClient-like object to use for making requests. [optional]
"""
self.session = session
self.rest_client = rest_client
def request(self, target, params=None, method='POST', content_server=False):
"""Make an HTTP request to a target API method.
This is an internal method used to properly craft the url, headers, and
params for a Dropbox API request. It is exposed for you in case you
need craft other API calls not in this library or if you want to debug it.
Args:
- ``target``: The target URL with leading slash (e.g. '/files')
- ``params``: A dictionary of parameters to add to the request
- ``method``: An HTTP method (e.g. 'GET' or 'POST')
- ``content_server``: A boolean indicating whether the request is to the
API content server, for example to fetch the contents of a file
rather than its metadata.
Returns:
- A tuple of (url, params, headers) that should be used to make the request.
OAuth authentication information will be added as needed within these fields.
"""
assert method in ['GET','POST', 'PUT'], "Only 'GET', 'POST', and 'PUT' are allowed."
if params is None:
params = {}
host = self.session.API_CONTENT_HOST if content_server else self.session.API_HOST
base = self.session.build_url(host, target)
headers, params = self.session.build_access_headers(method, base, params)
if method in ('GET', 'PUT'):
url = self.session.build_url(host, target, params)
else:
url = self.session.build_url(host, target)
return url, params, headers
def account_info(self):
"""Retrieve information about the user's account.
Returns:
- A dictionary containing account information.
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#account-info
"""
url, params, headers = self.request("/account/info", method='GET')
return self.rest_client.GET(url, headers)
def get_chunked_uploader(self, file_obj, length):
"""Creates a ChunkedUploader to upload the given file-like object.
Args:
- ``file_obj``: The file-like object which is the source of the data
being uploaded.
- ``length``: The number of bytes to upload.
The expected use of this function is as follows:
.. code-block:: python
bigFile = open("data.txt", 'rb')
uploader = myclient.get_chunked_uploader(bigFile, size)
print "uploading: ", size
while uploader.offset < size:
try:
upload = uploader.upload_chunked()
except rest.ErrorResponse, e:
# perform error handling and retry logic
The SDK leaves the error handling and retry logic to the developer
to implement, as the exact requirements will depend on the application
involved.
"""
return DropboxClient.ChunkedUploader(self, file_obj, length)
class ChunkedUploader(object):
"""Contains the logic around a chunked upload, which uploads a
large file to Dropbox via the /chunked_upload endpoint
"""
def __init__(self, client, file_obj, length):
self.client = client
self.offset = 0
self.upload_id = None
self.last_block = None
self.file_obj = file_obj
self.target_length = length
def upload_chunked(self, chunk_size = 4 * 1024 * 1024):
"""Uploads data from this ChunkedUploader's file_obj in chunks, until
an error occurs. Throws an exception when an error occurs, and can
be called again to resume the upload.
Args:
- ``chunk_size``: The number of bytes to put in each chunk. [default 4 MB]
"""
while self.offset < self.target_length:
next_chunk_size = min(chunk_size, self.target_length - self.offset)
if self.last_block == None:
self.last_block = self.file_obj.read(next_chunk_size)
try:
(self.offset, self.upload_id) = self.client.upload_chunk(StringIO(self.last_block), next_chunk_size, self.offset, self.upload_id)
self.last_block = None
except ErrorResponse, e:
reply = e.body
if "offset" in reply and reply['offset'] != 0:
if reply['offset'] > self.offset:
self.last_block = None
self.offset = reply['offset']
def finish(self, path, overwrite=False, parent_rev=None):
"""Commits the bytes uploaded by this ChunkedUploader to a file
in the users dropbox.
Args:
- ``path``: The full path of the file in the Dropbox.
- ``overwrite``: Whether to overwrite an existing file at the given path. [default False]
If overwrite is False and a file already exists there, Dropbox
will rename the upload to make sure it doesn't overwrite anything.
You need to check the metadata returned for the new name.
This field should only be True if your intent is to potentially
clobber changes to a file that you don't know about.
- ``parent_rev``: The rev field from the 'parent' of this upload. [optional]
If your intent is to update the file at the given path, you should
pass the parent_rev parameter set to the rev value from the most recent
metadata you have of the existing file at that path. If the server
has a more recent version of the file at the specified path, it will
automatically rename your uploaded file, spinning off a conflict.
Using this parameter effectively causes the overwrite parameter to be ignored.
The file will always be overwritten if you send the most-recent parent_rev,
and it will never be overwritten if you send a less-recent one.
"""
path = "/commit_chunked_upload/%s%s" % (self.client.session.root, format_path(path))
params = dict(
overwrite = bool(overwrite),
upload_id = self.upload_id
)
if parent_rev is not None:
params['parent_rev'] = parent_rev
url, params, headers = self.client.request(path, params, content_server=True)
return self.client.rest_client.POST(url, params, headers)
def upload_chunk(self, file_obj, length, offset=0, upload_id=None):
"""Uploads a single chunk of data from the given file like object. The majority of users
should use the ChunkedUploader object, which provides a simpler interface to the
chunked_upload API endpoint.
Args:
- ``file_obj``: The source of the data to upload
- ``length``: The number of bytes to upload in one chunk.
Returns:
- The reply from the server, as a dictionary
"""
params = dict()
if upload_id:
params['upload_id'] = upload_id
params['offset'] = offset
url, ignored_params, headers = self.request("/chunked_upload", params, method='PUT', content_server=True)
try:
reply = self.rest_client.PUT(url, file_obj, headers)
return reply['offset'], reply['upload_id']
except ErrorResponse, e:
raise e
def put_file(self, full_path, file_obj, overwrite=False, parent_rev=None):
"""Upload a file.
A typical use case would be as follows:
.. code-block:: python
f = open('working-draft.txt')
response = client.put_file('/magnum-opus.txt', f)
print "uploaded:", response
which would return the metadata of the uploaded file, similar to:
.. code-block:: python
{
'bytes': 77,
'icon': 'page_white_text',
'is_dir': False,
'mime_type': 'text/plain',
'modified': 'Wed, 20 Jul 2011 22:04:50 +0000',
'path': '/magnum-opus.txt',
'rev': '362e2029684fe',
'revision': 221922,
'root': 'dropbox',
'size': '77 bytes',
'thumb_exists': False
}
Args:
- ``full_path``: The full path to upload the file to, *including the file name*.
If the destination directory does not yet exist, it will be created.
- ``file_obj``: A file-like object to upload. If you would like, you can pass a string as file_obj.
- ``overwrite``: Whether to overwrite an existing file at the given path. [default False]
If overwrite is False and a file already exists there, Dropbox
will rename the upload to make sure it doesn't overwrite anything.
You need to check the metadata returned for the new name.
This field should only be True if your intent is to potentially
clobber changes to a file that you don't know about.
- ``parent_rev``: The rev field from the 'parent' of this upload. [optional]
If your intent is to update the file at the given path, you should
pass the parent_rev parameter set to the rev value from the most recent
metadata you have of the existing file at that path. If the server
has a more recent version of the file at the specified path, it will
automatically rename your uploaded file, spinning off a conflict.
Using this parameter effectively causes the overwrite parameter to be ignored.
The file will always be overwritten if you send the most-recent parent_rev,
and it will never be overwritten if you send a less-recent one.
Returns:
- A dictionary containing the metadata of the newly uploaded file.
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#files-put
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 503: User over quota
Note: In Python versions below version 2.6, httplib doesn't handle file-like objects.
In that case, this code will read the entire file into memory (!).
"""
path = "/files_put/%s%s" % (self.session.root, format_path(full_path))
params = {
'overwrite': bool(overwrite),
}
if parent_rev is not None:
params['parent_rev'] = parent_rev
url, params, headers = self.request(path, params, method='PUT', content_server=True)
return self.rest_client.PUT(url, file_obj, headers)
def get_file(self, from_path, rev=None):
"""Download a file.
Unlike most other calls, get_file returns a raw HTTPResponse with the connection open.
You should call .read() and perform any processing you need, then close the HTTPResponse.
A typical usage looks like this:
.. code-block:: python
out = open('magnum-opus.txt', 'w')
f, metadata = client.get_file_and_metadata('/magnum-opus.txt').read()
out.write(f)
which would download the file ``magnum-opus.txt`` and write the contents into
the file ``magnum-opus.txt`` on the local filesystem.
Args:
- ``from_path``: The path to the file to be downloaded.
- ``rev``: A previous rev value of the file to be downloaded. [optional]
Returns:
- An httplib.HTTPResponse that is the result of the request.
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No file was found at the given path, or the file that was there was deleted.
- 200: Request was okay but response was malformed in some way.
"""
path = "/files/%s%s" % (self.session.root, format_path(from_path))
params = {}
if rev is not None:
params['rev'] = rev
url, params, headers = self.request(path, params, method='GET', content_server=True)
return self.rest_client.request("GET", url, headers=headers, raw_response=True)
def get_file_and_metadata(self, from_path, rev=None):
"""Download a file alongwith its metadata.
Acts as a thin wrapper around get_file() (see get_file() comments for
more details)
Args:
- ``from_path``: The path to the file to be downloaded.
- ``rev``: A previous rev value of the file to be downloaded. [optional]
Returns:
- An httplib.HTTPResponse that is the result of the request.
- A dictionary containing the metadata of the file (see
https://www.dropbox.com/developers/reference/api#metadata for details).
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No file was found at the given path, or the file that was there was deleted.
- 200: Request was okay but response was malformed in some way.
"""
file_res = self.get_file(from_path, rev)
metadata = DropboxClient.__parse_metadata_as_dict(file_res)
return file_res, metadata
@staticmethod
def __parse_metadata_as_dict(dropbox_raw_response):
"""Parses file metadata from a raw dropbox HTTP response, raising a
dropbox.rest.ErrorResponse if parsing fails.
"""
metadata = None
for header, header_val in dropbox_raw_response.getheaders():
if header.lower() == 'x-dropbox-metadata':
try:
metadata = json.loads(header_val)
except ValueError:
raise ErrorResponse(dropbox_raw_response)
if not metadata: raise ErrorResponse(dropbox_raw_response)
return metadata
def delta(self, cursor=None):
"""A way of letting you keep up with changes to files and folders in a
user's Dropbox. You can periodically call delta() to get a list of "delta
entries", which are instructions on how to update your local state to
match the server's state.
Arguments:
- ``cursor``: On the first call, omit this argument (or pass in ``None``). On
subsequent calls, pass in the ``cursor`` string returned by the previous
call.
Returns: A dict with three fields.
- ``entries``: A list of "delta entries" (described below)
- ``reset``: If ``True``, you should your local state to be an empty folder
before processing the list of delta entries. This is only ``True`` only
in rare situations.
- ``cursor``: A string that is used to keep track of your current state.
On the next call to delta(), pass in this value to return entries
that were recorded since the cursor was returned.
- ``has_more``: If ``True``, then there are more entries available; you can
call delta() again immediately to retrieve those entries. If ``False``,
then wait at least 5 minutes (preferably longer) before checking again.
Delta Entries: Each entry is a 2-item list of one of following forms:
- [*path*, *metadata*]: Indicates that there is a file/folder at the given
path. You should add the entry to your local path. (The *metadata*
value is the same as what would be returned by the ``metadata()`` call.)
- If the new entry includes parent folders that don't yet exist in your
local state, create those parent folders in your local state. You
will eventually get entries for those parent folders.
- If the new entry is a file, replace whatever your local state has at
*path* with the new entry.
- If the new entry is a folder, check what your local state has at
*path*. If it's a file, replace it with the new entry. If it's a
folder, apply the new *metadata* to the folder, but do not modify
the folder's children.
- [*path*, ``nil``]: Indicates that there is no file/folder at the *path* on
Dropbox. To update your local state to match, delete whatever is at *path*,
including any children (you will sometimes also get "delete" delta entries
for the children, but this is not guaranteed). If your local state doesn't
have anything at *path*, ignore this entry.
Remember: Dropbox treats file names in a case-insensitive but case-preserving
way. To facilitate this, the *path* strings above are lower-cased versions of
the actual path. The *metadata* dicts have the original, case-preserved path.
"""
path = "/delta"
params = {}
if cursor is not None:
params['cursor'] = cursor
url, params, headers = self.request(path, params)
return self.rest_client.POST(url, params, headers)
def create_copy_ref(self, from_path):
"""Creates and returns a copy ref for a specific file. The copy ref can be
used to instantly copy that file to the Dropbox of another account.
Args:
- ``path``: The path to the file for a copy ref to be created on.
Returns:
- A dictionary that looks like the following example:
``{"expires":"Fri, 31 Jan 2042 21:01:05 +0000", "copy_ref":"z1X6ATl6aWtzOGq0c3g5Ng"}``
"""
path = "/copy_ref/%s%s" % (self.session.root, format_path(from_path))
url, params, headers = self.request(path, {}, method='GET')
return self.rest_client.GET(url, headers)
def add_copy_ref(self, copy_ref, to_path):
"""Adds the file referenced by the copy ref to the specified path
Args:
- ``copy_ref``: A copy ref string that was returned from a create_copy_ref call.
The copy_ref can be created from any other Dropbox account, or from the same account.
- ``path``: The path to where the file will be created.
Returns:
- A dictionary containing the metadata of the new copy of the file.
"""
path = "/fileops/copy"
params = {'from_copy_ref': copy_ref,
'to_path': format_path(to_path),
'root': self.session.root}
url, params, headers = self.request(path, params)
return self.rest_client.POST(url, params, headers)
def file_copy(self, from_path, to_path):
"""Copy a file or folder to a new location.
Args:
- ``from_path``: The path to the file or folder to be copied.
- ``to_path``: The destination path of the file or folder to be copied.
This parameter should include the destination filename (e.g.
from_path: '/test.txt', to_path: '/dir/test.txt'). If there's
already a file at the to_path, this copy will be renamed to
be unique.
Returns:
- A dictionary containing the metadata of the new copy of the file or folder.
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#fileops-copy
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of:
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No file was found at given from_path.
- 503: User over storage quota.
"""
params = {'root': self.session.root,
'from_path': format_path(from_path),
'to_path': format_path(to_path),
}
url, params, headers = self.request("/fileops/copy", params)
return self.rest_client.POST(url, params, headers)
def file_create_folder(self, path):
"""Create a folder.
Args:
- ``path``: The path of the new folder.
Returns:
- A dictionary containing the metadata of the newly created folder.
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#fileops-create-folder
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 403: A folder at that path already exists.
"""
params = {'root': self.session.root, 'path': format_path(path)}
url, params, headers = self.request("/fileops/create_folder", params)
return self.rest_client.POST(url, params, headers)
def file_delete(self, path):
"""Delete a file or folder.
Args:
- ``path``: The path of the file or folder.
Returns:
- A dictionary containing the metadata of the just deleted file.
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#fileops-delete
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No file was found at the given path.
"""
params = {'root': self.session.root, 'path': format_path(path)}
url, params, headers = self.request("/fileops/delete", params)
return self.rest_client.POST(url, params, headers)
def file_move(self, from_path, to_path):
"""Move a file or folder to a new location.
Args:
- ``from_path``: The path to the file or folder to be moved.
- ``to_path``: The destination path of the file or folder to be moved.
This parameter should include the destination filename (e.g.
- ``from_path``: '/test.txt', to_path: '/dir/test.txt'). If there's
already a file at the to_path, this file or folder will be renamed to
be unique.
Returns:
- A dictionary containing the metadata of the new copy of the file or folder.
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#fileops-move
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No file was found at given from_path.
- 503: User over storage quota.
"""
params = {'root': self.session.root, 'from_path': format_path(from_path), 'to_path': format_path(to_path)}
url, params, headers = self.request("/fileops/move", params)
return self.rest_client.POST(url, params, headers)
def metadata(self, path, list=True, file_limit=25000, hash=None, rev=None, include_deleted=False):
"""Retrieve metadata for a file or folder.
A typical use would be:
.. code-block:: python
folder_metadata = client.metadata('/')
print "metadata:", folder_metadata
which would return the metadata of the root directory. This
will look something like:
.. code-block:: python
{
'bytes': 0,
'contents': [
{
'bytes': 0,
'icon': 'folder',
'is_dir': True,
'modified': 'Thu, 25 Aug 2011 00:03:15 +0000',
'path': '/Sample Folder',
'rev': '803beb471',
'revision': 8,
'root': 'dropbox',
'size': '0 bytes',
'thumb_exists': False
},
{
'bytes': 77,
'icon': 'page_white_text',
'is_dir': False,
'mime_type': 'text/plain',
'modified': 'Wed, 20 Jul 2011 22:04:50 +0000',
'path': '/magnum-opus.txt',
'rev': '362e2029684fe',
'revision': 221922,
'root': 'dropbox',
'size': '77 bytes',
'thumb_exists': False
}
],
'hash': 'efdac89c4da886a9cece1927e6c22977',
'icon': 'folder',
'is_dir': True,
'path': '/',
'root': 'app_folder',
'size': '0 bytes',
'thumb_exists': False
}
In this example, the root directory contains two things: ``Sample Folder``,
which is a folder, and ``/magnum-opus.txt``, which is a text file 77 bytes long
Args:
- ``path``: The path to the file or folder.
- ``list``: Whether to list all contained files (only applies when
path refers to a folder).
- ``file_limit``: The maximum number of file entries to return within
a folder. If the number of files in the directory exceeds this
limit, an exception is raised. The server will return at max
25,000 files within a folder.
- ``hash``: Every directory listing has a hash parameter attached that
can then be passed back into this function later to save on\
bandwidth. Rather than returning an unchanged folder's contents,\
the server will instead return a 304.\
- ``rev``: The revision of the file to retrieve the metadata for. [optional]
This parameter only applies for files. If omitted, you'll receive
the most recent revision metadata.
Returns:
- A dictionary containing the metadata of the file or folder
(and contained files if appropriate).
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#metadata
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 304: Current directory hash matches hash parameters, so contents are unchanged.
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No file was found at given path.
- 406: Too many file entries to return.
"""
path = "/metadata/%s%s" % (self.session.root, format_path(path))
params = {'file_limit': file_limit,
'list': 'true',
'include_deleted': include_deleted,
}
if not list:
params['list'] = 'false'
if hash is not None:
params['hash'] = hash
if rev:
params['rev'] = rev
url, params, headers = self.request(path, params, method='GET')
return self.rest_client.GET(url, headers)
def thumbnail(self, from_path, size='large', format='JPEG'):
"""Download a thumbnail for an image.
Unlike most other calls, thumbnail returns a raw HTTPResponse with the connection open.
You should call .read() and perform any processing you need, then close the HTTPResponse.
Args:
- ``from_path``: The path to the file to be thumbnailed.
- ``size``: A string describing the desired thumbnail size.
At this time, 'small', 'medium', and 'large' are
officially supported sizes (32x32, 64x64, and 128x128
respectively), though others may be available. Check
https://www.dropbox.com/developers/reference/api#thumbnails for
more details.
Returns:
- An httplib.HTTPResponse that is the result of the request.
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No file was found at the given from_path, or files of that type cannot be thumbnailed.
- 415: Image is invalid and cannot be thumbnailed.
"""
assert format in ['JPEG', 'PNG'], "expected a thumbnail format of 'JPEG' or 'PNG', got %s" % format
path = "/thumbnails/%s%s" % (self.session.root, format_path(from_path))
url, params, headers = self.request(path, {'size': size, 'format': format}, method='GET', content_server=True)
return self.rest_client.request("GET", url, headers=headers, raw_response=True)
def thumbnail_and_metadata(self, from_path, size='large', format='JPEG'):
"""Download a thumbnail for an image alongwith its metadata.
Acts as a thin wrapper around thumbnail() (see thumbnail() comments for
more details)
Args:
- ``from_path``: The path to the file to be thumbnailed.
- ``size``: A string describing the desired thumbnail size. See thumbnail()
for details.
Returns:
- An httplib.HTTPResponse that is the result of the request.
- A dictionary containing the metadata of the file whose thumbnail
was downloaded (see https://www.dropbox.com/developers/reference/api#metadata
for details).
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No file was found at the given from_path, or files of that type cannot be thumbnailed.
- 415: Image is invalid and cannot be thumbnailed.
- 200: Request was okay but response was malformed in some way.
"""
thumbnail_res = self.thumbnail(from_path, size, format)
metadata = DropboxClient.__parse_metadata_as_dict(thumbnail_res)
return thumbnail_res, metadata
def search(self, path, query, file_limit=1000, include_deleted=False):
"""Search directory for filenames matching query.
Args:
- ``path``: The directory to search within.
- ``query``: The query to search on (minimum 3 characters).
- ``file_limit``: The maximum number of file entries to return within a folder.
The server will return at max 1,000 files.
- ``include_deleted``: Whether to include deleted files in search results.
Returns:
- A list of the metadata of all matching files (up to
file_limit entries). For a detailed description of what
this call returns, visit:
https://www.dropbox.com/developers/reference/api#search
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
"""
path = "/search/%s%s" % (self.session.root, format_path(path))
params = {
'query': query,
'file_limit': file_limit,
'include_deleted': include_deleted,
}
url, params, headers = self.request(path, params)
return self.rest_client.POST(url, params, headers)
def revisions(self, path, rev_limit=1000):
"""Retrieve revisions of a file.
Args:
- ``path``: The file to fetch revisions for. Note that revisions
are not available for folders.
- ``rev_limit``: The maximum number of file entries to return within
a folder. The server will return at max 1,000 revisions.
Returns:
- A list of the metadata of all matching files (up to rev_limit entries).
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#revisions
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: No revisions were found at the given path.
"""
path = "/revisions/%s%s" % (self.session.root, format_path(path))
params = {
'rev_limit': rev_limit,
}
url, params, headers = self.request(path, params, method='GET')
return self.rest_client.GET(url, headers)
def restore(self, path, rev):
"""Restore a file to a previous revision.
Args:
- ``path``: The file to restore. Note that folders can't be restored.
- ``rev``: A previous rev value of the file to be restored to.
Returns:
- A dictionary containing the metadata of the newly restored file.
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#restore
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: Unable to find the file at the given revision.
"""
path = "/restore/%s%s" % (self.session.root, format_path(path))
params = {
'rev': rev,
}
url, params, headers = self.request(path, params)
return self.rest_client.POST(url, params, headers)
def media(self, path):
"""Get a temporary unauthenticated URL for a media file.
All of Dropbox's API methods require OAuth, which may cause problems in
situations where an application expects to be able to hit a URL multiple times
(for example, a media player seeking around a video file). This method
creates a time-limited URL that can be accessed without any authentication,
and returns that to you, along with an expiration time.
Args:
- ``path``: The file to return a URL for. Folders are not supported.
Returns:
- A dictionary that looks like the following example:
``{'url': 'https://dl.dropbox.com/0/view/wvxv1fw6on24qw7/file.mov', 'expires': 'Thu, 16 Sep 2011 01:01:25 +0000'}``
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#media
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: Unable to find the file at the given path.
"""
path = "/media/%s%s" % (self.session.root, format_path(path))
url, params, headers = self.request(path, method='GET')
return self.rest_client.GET(url, headers)
def share(self, path):
"""Create a shareable link to a file or folder.
Shareable links created on Dropbox are time-limited, but don't require any
authentication, so they can be given out freely. The time limit should allow
at least a day of shareability, though users have the ability to disable
a link from their account if they like.
Args:
- ``path``: The file or folder to share.
Returns:
- A dictionary that looks like the following example:
``{'url': 'http://www.dropbox.com/s/m/a2mbDa2', 'expires': 'Thu, 16 Sep 2011 01:01:25 +0000'}``
For a detailed description of what this call returns, visit:
https://www.dropbox.com/developers/reference/api#shares
Raises:
- A dropbox.rest.ErrorResponse with an HTTP status of
- 400: Bad request (may be due to many things; check e.error for details)
- 404: Unable to find the file at the given path.
"""
path = "/shares/%s%s" % (self.session.root, format_path(path))
url, params, headers = self.request(path, method='GET')
return self.rest_client.GET(url, headers)

View File

@@ -0,0 +1,4 @@
import resources.lib.utils as utils
def resource_filename(*args):
return utils.addon_dir() + "/resources/lib/dropbox/trusted-certs.crt"

View File

@@ -0,0 +1,317 @@
"""
A simple JSON REST request abstraction layer that is used by the
dropbox.client and dropbox.session modules. You shouldn't need to use this.
"""
import httplib
import os
import pkg_resources
import re
import socket
import ssl
import sys
import urllib
import urlparse
from . import util
try:
import json
except ImportError:
import simplejson as json
SDK_VERSION = "1.5.1"
TRUSTED_CERT_FILE = pkg_resources.resource_filename(__name__, 'trusted-certs.crt')
class ProperHTTPSConnection(httplib.HTTPConnection):
"""
httplib.HTTPSConnection is broken because it doesn't do server certificate
validation. This class does certificate validation by ensuring:
1. The certificate sent down by the server has a signature chain to one of
the certs in our 'trusted-certs.crt' (this is mostly handled by the 'ssl'
module).
2. The hostname in the certificate matches the hostname we're connecting to.
"""
def __init__(self, host, port, trusted_cert_file=TRUSTED_CERT_FILE):
httplib.HTTPConnection.__init__(self, host, port)
self.ca_certs = trusted_cert_file
self.cert_reqs = ssl.CERT_REQUIRED
def connect(self):
sock = create_connection((self.host, self.port))
self.sock = ssl.wrap_socket(sock, cert_reqs=self.cert_reqs, ca_certs=self.ca_certs)
cert = self.sock.getpeercert()
hostname = self.host.split(':', 0)[0]
match_hostname(cert, hostname)
class CertificateError(ValueError):
pass
def _dnsname_to_pat(dn):
pats = []
for frag in dn.split(r'.'):
if frag == '*':
# When '*' is a fragment by itself, it matches a non-empty dotless
# fragment.
pats.append('[^.]+')
else:
# Otherwise, '*' matches any dotless fragment.
frag = re.escape(frag)
pats.append(frag.replace(r'\*', '[^.]*'))
return re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE)
# This was ripped from Python 3.2 so it's not tested
def match_hostname(cert, hostname):
"""Verify that *cert* (in decoded format as returned by
SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 rules
are mostly followed, but IP addresses are not accepted for *hostname*.
CertificateError is raised on failure. On success, the function
returns nothing.
"""
if not cert:
raise ValueError("empty or no certificate")
dnsnames = []
san = cert.get('subjectAltName', ())
for key, value in san:
if key == 'DNS':
if _dnsname_to_pat(value).match(hostname):
return
dnsnames.append(value)
if not san:
# The subject is only checked when subjectAltName is empty
for sub in cert.get('subject', ()):
for key, value in sub:
# XXX according to RFC 2818, the most specific Common Name
# must be used.
if key == 'commonName':
if _dnsname_to_pat(value).match(hostname):
return
dnsnames.append(value)
if len(dnsnames) > 1:
raise CertificateError("hostname %r doesn't match either of %s" % (hostname, ', '.join(map(repr, dnsnames))))
elif len(dnsnames) == 1:
raise CertificateError("hostname %r doesn't match %r" % (hostname, dnsnames[0]))
else:
raise CertificateError("no appropriate commonName or subjectAltName fields were found")
def create_connection(address):
host, port = address
err = None
for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
sock = None
try:
sock = socket.socket(af, socktype, proto)
sock.connect(sa)
return sock
except socket.error, _:
err = _
if sock is not None:
sock.close()
if err is not None:
raise err
else:
raise socket.error("getaddrinfo returns an empty list")
def json_loadb(data):
if sys.version_info >= (3,):
data = data.decode('utf8')
return json.loads(data)
class RESTClientObject(object):
def __init__(self, http_connect=None):
self.http_connect = http_connect
def request(self, method, url, post_params=None, body=None, headers=None, raw_response=False):
post_params = post_params or {}
headers = headers or {}
headers['User-Agent'] = 'OfficialDropboxPythonSDK/' + SDK_VERSION
if post_params:
if body:
raise ValueError("body parameter cannot be used with post_params parameter")
body = urllib.urlencode(post_params)
headers["Content-type"] = "application/x-www-form-urlencoded"
# maintain dynamic lookup of ProperHTTPConnection
http_connect = self.http_connect
if http_connect is None:
http_connect = ProperHTTPSConnection
host = urlparse.urlparse(url).hostname
conn = http_connect(host, 443)
try:
# This code is here because httplib in pre-2.6 Pythons
# doesn't handle file-like objects as HTTP bodies and
# thus requires manual buffering
if not hasattr(body, 'read'):
conn.request(method, url, body, headers)
else:
# Content-Length should be set to prevent upload truncation errors.
clen, raw_data = util.analyze_file_obj(body)
headers["Content-Length"] = str(clen)
conn.request(method, url, "", headers)
if raw_data is not None:
conn.send(raw_data)
else:
BLOCKSIZE = 4 * 1024 * 1024 # 4MB buffering just because
bytes_read = 0
while True:
data = body.read(BLOCKSIZE)
if not data:
break
# Catch Content-Length overflow before the HTTP server does
bytes_read += len(data)
if bytes_read > clen:
raise util.AnalyzeFileObjBug(clen, bytes_read)
conn.send(data)
if bytes_read != clen:
raise util.AnalyzeFileObjBug(clen, bytes_read)
except socket.error, e:
raise RESTSocketError(host, e)
except CertificateError, e:
raise RESTSocketError(host, "SSL certificate error: " + e)
r = conn.getresponse()
if r.status != 200:
raise ErrorResponse(r)
if raw_response:
return r
else:
try:
resp = json_loadb(r.read())
except ValueError:
raise ErrorResponse(r)
finally:
conn.close()
return resp
def GET(self, url, headers=None, raw_response=False):
assert type(raw_response) == bool
return self.request("GET", url, headers=headers, raw_response=raw_response)
def POST(self, url, params=None, headers=None, raw_response=False):
assert type(raw_response) == bool
if params is None:
params = {}
return self.request("POST", url,
post_params=params, headers=headers, raw_response=raw_response)
def PUT(self, url, body, headers=None, raw_response=False):
assert type(raw_response) == bool
return self.request("PUT", url, body=body, headers=headers, raw_response=raw_response)
class RESTClient(object):
IMPL = RESTClientObject()
"""
An class with all static methods to perform JSON REST requests that is used internally
by the Dropbox Client API. It provides just enough gear to make requests
and get responses as JSON data (when applicable). All requests happen over SSL.
"""
@classmethod
def request(cls, *n, **kw):
"""Perform a REST request and parse the response.
Args:
- ``method``: An HTTP method (e.g. 'GET' or 'POST').
- ``url``: The URL to make a request to.
- ``post_params``: A dictionary of parameters to put in the body of the request.
This option may not be used if the body parameter is given.
- ``body``: The body of the request. Typically, this value will be a string.
It may also be a file-like object in Python 2.6 and above. The body
parameter may not be used with the post_params parameter.
- ``headers``: A dictionary of headers to send with the request.
- ``raw_response``: Whether to return the raw httplib.HTTPReponse object. [default False]
It's best enabled for requests that return large amounts of data that you
would want to .read() incrementally rather than loading into memory. Also
use this for calls where you need to read metadata like status or headers,
or if the body is not JSON.
Returns:
- The JSON-decoded data from the server, unless raw_response is
specified, in which case an httplib.HTTPReponse object is returned instead.
Raises:
- dropbox.rest.ErrorResponse: The returned HTTP status is not 200, or the body was
not parsed from JSON successfully.
- dropbox.rest.RESTSocketError: A socket.error was raised while contacting Dropbox.
"""
return cls.IMPL.request(*n, **kw)
@classmethod
def GET(cls, *n, **kw):
"""Perform a GET request using RESTClient.request"""
return cls.IMPL.GET(*n, **kw)
@classmethod
def POST(cls, *n, **kw):
"""Perform a POST request using RESTClient.request"""
return cls.IMPL.POST(*n, **kw)
@classmethod
def PUT(cls, *n, **kw):
"""Perform a PUT request using RESTClient.request"""
return cls.IMPL.PUT(*n, **kw)
class RESTSocketError(socket.error):
"""
A light wrapper for socket.errors raised by dropbox.rest.RESTClient.request
that adds more information to the socket.error.
"""
def __init__(self, host, e):
msg = "Error connecting to \"%s\": %s" % (host, str(e))
socket.error.__init__(self, msg)
class ErrorResponse(Exception):
"""
Raised by dropbox.rest.RESTClient.request for requests that:
- Return a non-200 HTTP response, or
- Have a non-JSON response body, or
- Have a malformed/missing header in the response.
Most errors that Dropbox returns will have a error field that is unpacked and
placed on the ErrorResponse exception. In some situations, a user_error field
will also come back. Messages under user_error are worth showing to an end-user
of your app, while other errors are likely only useful for you as the developer.
"""
def __init__(self, http_resp):
self.status = http_resp.status
self.reason = http_resp.reason
self.body = http_resp.read()
self.headers = http_resp.getheaders()
try:
self.body = json_loadb(self.body)
self.error_msg = self.body.get('error')
self.user_error_msg = self.body.get('user_error')
except ValueError:
self.error_msg = None
self.user_error_msg = None
def __str__(self):
if self.user_error_msg and self.user_error_msg != self.error_msg:
# one is translated and the other is English
msg = "%s (%s)" % (self.user_error_msg, self.error_msg)
elif self.error_msg:
msg = self.error_msg
elif not self.body:
msg = self.reason
else:
msg = "Error parsing response body or headers: " +\
"Body - %s Headers - %s" % (self.body, self.headers)
return "[%d] %s" % (self.status, repr(msg))

View File

@@ -0,0 +1,286 @@
"""
dropbox.session.DropboxSession is responsible for holding OAuth authentication info
(app key/secret, request key/secret, access key/secret) as well as configuration information for your app
('app_folder' or 'dropbox' access type, optional locale preference). It knows how to
use all of this information to craft properly constructed requests to Dropbox.
A DropboxSession object must be passed to a dropbox.client.DropboxClient object upon
initialization.
"""
from __future__ import absolute_import
import random
import sys
import time
import urllib
try:
from urlparse import parse_qs
except ImportError:
# fall back for Python 2.5
from cgi import parse_qs
from . import rest
class OAuthToken(object):
__slots__ = ('key', 'secret')
def __init__(self, key, secret):
self.key = key
self.secret = secret
class DropboxSession(object):
API_VERSION = 1
API_HOST = "api.dropbox.com"
WEB_HOST = "www.dropbox.com"
API_CONTENT_HOST = "api-content.dropbox.com"
def __init__(self, consumer_key, consumer_secret, access_type, locale=None, rest_client=rest.RESTClient):
"""Initialize a DropboxSession object.
Your consumer key and secret are available
at https://www.dropbox.com/developers/apps
Args:
- ``access_type``: Either 'dropbox' or 'app_folder'. All path-based operations
will occur relative to either the user's Dropbox root directory
or your application's app folder.
- ``locale``: A locale string ('en', 'pt_PT', etc.) [optional]
The locale setting will be used to translate any user-facing error
messages that the server generates. At this time Dropbox supports
'en', 'es', 'fr', 'de', and 'ja', though we will be supporting more
languages in the future. If you send a language the server doesn't
support, messages will remain in English. Look for these translated
messages in rest.ErrorResponse exceptions as e.user_error_msg.
"""
assert access_type in ['dropbox', 'app_folder'], "expected access_type of 'dropbox' or 'app_folder'"
self.consumer_creds = OAuthToken(consumer_key, consumer_secret)
self.token = None
self.request_token = None
self.root = 'sandbox' if access_type == 'app_folder' else 'dropbox'
self.locale = locale
self.rest_client = rest_client
def is_linked(self):
"""Return whether the DropboxSession has an access token attached."""
return bool(self.token)
def unlink(self):
"""Remove any attached access token from the DropboxSession."""
self.token = None
def set_token(self, access_token, access_token_secret):
"""Attach an access token to the DropboxSession.
Note that the access 'token' is made up of both a token string
and a secret string.
"""
self.token = OAuthToken(access_token, access_token_secret)
def set_request_token(self, request_token, request_token_secret):
"""Attach an request token to the DropboxSession.
Note that the request 'token' is made up of both a token string
and a secret string.
"""
self.request_token = OAuthToken(request_token, request_token_secret)
def build_path(self, target, params=None):
"""Build the path component for an API URL.
This method urlencodes the parameters, adds them
to the end of the target url, and puts a marker for the API
version in front.
Args:
- ``target``: A target url (e.g. '/files') to build upon.
- ``params``: A dictionary of parameters (name to value). [optional]
Returns:
- The path and parameters components of an API URL.
"""
if sys.version_info < (3,) and type(target) == unicode:
target = target.encode("utf8")
target_path = urllib.quote(target)
params = params or {}
params = params.copy()
if self.locale:
params['locale'] = self.locale
if params:
return "/%d%s?%s" % (self.API_VERSION, target_path, urllib.urlencode(params))
else:
return "/%d%s" % (self.API_VERSION, target_path)
def build_url(self, host, target, params=None):
"""Build an API URL.
This method adds scheme and hostname to the path
returned from build_path.
Args:
- ``target``: A target url (e.g. '/files') to build upon.
- ``params``: A dictionary of parameters (name to value). [optional]
Returns:
- The full API URL.
"""
return "https://%s%s" % (host, self.build_path(target, params))
def build_authorize_url(self, request_token, oauth_callback=None):
"""Build a request token authorization URL.
After obtaining a request token, you'll need to send the user to
the URL returned from this function so that they can confirm that
they want to connect their account to your app.
Args:
- ``request_token``: A request token from obtain_request_token.
- ``oauth_callback``: A url to redirect back to with the authorized
request token.
Returns:
- An authorization for the given request token.
"""
params = {'oauth_token': request_token.key,
}
if oauth_callback:
params['oauth_callback'] = oauth_callback
return self.build_url(self.WEB_HOST, '/oauth/authorize', params)
def obtain_request_token(self):
"""Obtain a request token from the Dropbox API.
This is your first step in the OAuth process. You call this to get a
request_token from the Dropbox server that you can then use with
DropboxSession.build_authorize_url() to get the user to authorize it.
After it's authorized you use this token with
DropboxSession.obtain_access_token() to get an access token.
NOTE: You should only need to do this once for each user, and then you
can store the access token for that user for later operations.
Returns:
- An dropbox.session.OAuthToken representing the request token Dropbox assigned
to this app. Also attaches the request token as self.request_token.
"""
self.token = None # clear any token currently on the request
url = self.build_url(self.API_HOST, '/oauth/request_token')
headers, params = self.build_access_headers('POST', url)
response = self.rest_client.POST(url, headers=headers, params=params, raw_response=True)
self.request_token = self._parse_token(response.read())
return self.request_token
def obtain_access_token(self, request_token=None):
"""Obtain an access token for a user.
After you get a request token, and then send the user to the authorize
URL, you can use the authorized request token with this method to get the
access token to use for future operations. The access token is stored on
the session object.
Args:
- ``request_token``: A request token from obtain_request_token. [optional]
The request_token should have been authorized via the
authorization url from build_authorize_url. If you don't pass
a request_token, the fallback is self.request_token, which
will exist if you previously called obtain_request_token on this
DropboxSession instance.
Returns:
- An tuple of (key, secret) representing the access token Dropbox assigned
to this app and user. Also attaches the access token as self.token.
"""
request_token = request_token or self.request_token
assert request_token, "No request_token available on the session. Please pass one."
url = self.build_url(self.API_HOST, '/oauth/access_token')
headers, params = self.build_access_headers('POST', url, request_token=request_token)
response = self.rest_client.POST(url, headers=headers, params=params, raw_response=True)
self.token = self._parse_token(response.read())
return self.token
def build_access_headers(self, method, resource_url, params=None, request_token=None):
"""Build OAuth access headers for a future request.
Args:
- ``method``: The HTTP method being used (e.g. 'GET' or 'POST').
- ``resource_url``: The full url the request will be made to.
- ``params``: A dictionary of parameters to add to what's already on the url.
Typically, this would consist of POST parameters.
Returns:
- A tuple of (header_dict, params) where header_dict is a dictionary
of header names and values appropriate for passing into dropbox.rest.RESTClient
and params is a dictionary like the one that was passed in, but augmented with
oauth-related parameters as appropriate.
"""
if params is None:
params = {}
else:
params = params.copy()
oauth_params = {
'oauth_consumer_key' : self.consumer_creds.key,
'oauth_timestamp' : self._generate_oauth_timestamp(),
'oauth_nonce' : self._generate_oauth_nonce(),
'oauth_version' : self._oauth_version(),
}
token = request_token if request_token is not None else self.token
if token:
oauth_params['oauth_token'] = token.key
self._oauth_sign_request(oauth_params, self.consumer_creds, token)
params.update(oauth_params)
return {}, params
@classmethod
def _oauth_sign_request(cls, params, consumer_pair, token_pair):
params.update({'oauth_signature_method' : 'PLAINTEXT',
'oauth_signature' : ('%s&%s' % (consumer_pair.secret, token_pair.secret)
if token_pair is not None else
'%s&' % (consumer_pair.secret,))})
@classmethod
def _generate_oauth_timestamp(cls):
return int(time.time())
@classmethod
def _generate_oauth_nonce(cls, length=8):
return ''.join([str(random.randint(0, 9)) for i in range(length)])
@classmethod
def _oauth_version(cls):
return '1.0'
@classmethod
def _parse_token(cls, s):
if not s:
raise ValueError("Invalid parameter string.")
params = parse_qs(s, keep_blank_values=False)
if not params:
raise ValueError("Invalid parameter string: %r" % s)
try:
key = params['oauth_token'][0]
except Exception:
raise ValueError("'oauth_token' not found in OAuth request.")
try:
secret = params['oauth_token_secret'][0]
except Exception:
raise ValueError("'oauth_token_secret' not found in "
"OAuth request.")
return OAuthToken(key, secret)

View File

@@ -0,0 +1,11 @@
import sys
def b(str_):
if sys.version_info >= (3,):
str_ = str_.encode('latin1')
return str_
def u(str_):
if sys.version_info < (3,):
str_ = str_.decode('latin1')
return str_

View File

@@ -0,0 +1,341 @@
# Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress=server-certs@thawte.com <server-certs@thawte.com>
# Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/emailAddress= server-certs@thawte.com
-----BEGIN CERTIFICATE-----
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
-----END CERTIFICATE-----
# Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com <premium-server@thawte.com>
# Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com <premium-server@thawte.com>
-----BEGIN CERTIFICATE-----
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----
# Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority
# Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIICPDCCAaUCEDJQM89Q0VbzXIGtZVxPyCUwDQYJKoZIhvcNAQECBQAwXzELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
MDEyOTAwMDAwMFoXDTIwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f
zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi
TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G
CSqGSIb3DQEBAgUAA4GBAEtEZmBoZOSYG/OwcuaViXzde7OVwB0u2NgZ0C00PcZQ
mhCGjKo/O6gE/DdSlcPZydvN8oYGxLEb8IKIMEKOF1AcZHq4PplJdJf8rAJD+5YM
VgQlDHx8h50kp9jwMim1pN9dokzFFjKoQvZFprY2ueC/ZTaTwtLXa9zeWdaiNfhF
-----END CERTIFICATE-----
# Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
# Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
-----END CERTIFICATE-----
# Subject: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority
# Issuer: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority
-----BEGIN CERTIFICATE-----
MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
-----END CERTIFICATE-----
# Subject: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1
# Issuer: C=US, O=Equifax Secure Inc., CN=Equifax Secure Global eBusiness CA-1
-----BEGIN CERTIFICATE-----
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
-----END CERTIFICATE-----
# Subject: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
# Issuer: C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware
-----BEGIN CERTIFICATE-----
MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
-----END CERTIFICATE-----
# Subject: C=US, O=Network Solutions L.L.C., CN=Network Solutions Certificate Authority
# Issuer: C=US, O=Network Solutions L.L.C., CN=Network Solutions Certificate Authority
-----BEGIN CERTIFICATE-----
MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
-----END CERTIFICATE-----
# Subject: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
# Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
-----BEGIN CERTIFICATE-----
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
ReYNnyicsbkqWletNw+vHX/bvZ8=
-----END CERTIFICATE-----
# Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository<http://certificates.godaddy.com/repository>, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
# Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
U+4=
-----END CERTIFICATE-----
# Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
# Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
4uJEvlz36hz1
-----END CERTIFICATE-----
# Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
# Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
-----BEGIN CERTIFICATE-----
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
-----END CERTIFICATE-----
# Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
# Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
-----BEGIN CERTIFICATE-----
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
-----END CERTIFICATE-----
# Subject: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
# Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com<http://www.valicert.com//emailAddress=info@valicert.com>
-----BEGIN CERTIFICATE-----
MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
-----END CERTIFICATE-----
# Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com<http://www.valicert.com//emailAddress=info@valicert.com>
# Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//emailAddress=info@valicert.com<http://www.valicert.com//emailAddress=info@valicert.com>
-----BEGIN CERTIFICATE-----
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
-----END CERTIFICATE-----

View File

@@ -0,0 +1,53 @@
import os
class AnalyzeFileObjBug(Exception):
msg = ("\n"
"Expected file object to have %d bytes, instead we read %d bytes.\n"
"File size detection may have failed (see dropbox.util.AnalyzeFileObj)\n")
def __init__(self, expected, actual):
self.expected = expected
self.actual = actual
def __str__(self):
return self.msg % (self.expected, self.actual)
def analyze_file_obj(obj):
""" Get the size and contents of a file-like object.
Returns: (size, raw_data)
size: The amount of data waiting to be read
raw_data: If not None, the entire contents of the stream (as a string).
None if the stream should be read() in chunks.
"""
pos = 0
if hasattr(obj, 'tell'):
pos = obj.tell()
# Handle cStringIO and StringIO
if hasattr(obj, 'getvalue'):
# Why using getvalue() makes sense:
# For StringIO, this string is pre-computed anyway by read().
# For cStringIO, getvalue() is the only way
# to determine the length without read()'ing the whole thing.
raw_data = obj.getvalue()
if pos == 0:
return (len(raw_data), raw_data)
else:
# We could return raw_data[pos:], but that could drastically
# increase memory usage. Better to read it block at a time.
size = max(0, len(raw_data) - pos)
return (size, None)
# Handle real files
if hasattr(obj, 'fileno'):
size = max(0, os.fstat(obj.fileno()).st_size - pos)
return (size, None)
# User-defined object with len()
if hasattr(obj, '__len__'):
size = max(0, len(obj) - pos)
return (size, None)
# We don't know what kind of stream this is.
# To determine the size, we must read the whole thing.
raw_data = obj.read()
return (len(raw_data), raw_data)

View File

@@ -0,0 +1,99 @@
import utils as utils
from xml.dom import minidom
from xml.parsers.expat import ExpatError
import json
import xbmc,xbmcvfs
class GuiSettingsManager:
settingsFile = None
doc = None
settings_allowed = list()
found_settings = list()
def __init__(self,settingsFile):
self._readFile(xbmc.translatePath(settingsFile))
def run(self):
#get a list of all the settings we can manipulate via json
json_response = json.loads(xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.GetSettings","params":{"level":"advanced"}}'))
settings = json_response['result']['settings']
for aSetting in settings:
self.settings_allowed.append(aSetting['id'])
#parse the existing xml file and get all the settings
root_nodes = self.__parseNodes(self.doc.documentElement)
for aNode in root_nodes:
secondary_list = self.__parseNodes(self.doc.getElementsByTagName(aNode.name)[0])
for secondNode in secondary_list:
#if the node does not have children and is not default
if(not secondNode.hasChildren and not secondNode.isDefault):
if(secondNode.json_name() in self.settings_allowed):
self.found_settings.append(secondNode)
#go through all the found settings and update them
for aSetting in self.found_settings:
utils.log("updating: " + aSetting.json_name() + ", value: " + aSetting.value)
#check for boolean and numeric values
if(aSetting.value.isdigit() or (aSetting.value == 'true' or aSetting.value == 'false')):
xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.SetSettingValue","params":{"setting":"' + aSetting.json_name() + '","value":' + aSetting.value + '}}')
else:
xbmc.executeJSONRPC('{"jsonrpc":"2.0", "id":1, "method":"Settings.SetSettingValue","params":{"setting":"' + aSetting.json_name() + '","value":"' + aSetting.value + '"}}')
#make a copy of the guisettings file to make user based restores easier
xbmcvfs.copy(self.settingsFile, xbmc.translatePath("special://home/userdata/guisettings.xml.restored"))
def __parseNodes(self,nodeList):
result = []
for node in nodeList.childNodes:
if(node.nodeType == self.doc.ELEMENT_NODE):
aSetting = SettingNode(node.nodeName)
#detect if there are any element nodes
if(len(node.childNodes) > 0):
for child_node in node.childNodes:
if(child_node.nodeType == self.doc.ELEMENT_NODE):
aSetting.hasChildren = True
if(not aSetting.hasChildren and len(node.childNodes) > 0):
aSetting.value = node.firstChild.nodeValue
if('default' not in node.attributes.keys()):
aSetting.isDefault = False
aSetting.parent = node.parentNode.nodeName
result.append(aSetting)
return result
def _readFile(self,fileLoc):
if(xbmcvfs.exists(fileLoc)):
try:
self.doc = minidom.parse(fileLoc)
self.settingsFile = fileLoc
except ExpatError:
utils.log("Can't read " + fileLoc)
class SettingNode:
name = ''
value = ''
hasChildren = False
isDefault = True
parent = ''
def __init__(self,name):
self.name = name
def json_name(self):
return self.parent + "." + self.name

View File

@@ -1,4 +1,5 @@
import xbmc
import xbmcgui
import xbmcaddon
__addon_id__= 'script.xbmcbackup'
@@ -7,11 +8,17 @@ __Addon = xbmcaddon.Addon(__addon_id__)
def data_dir():
return __Addon.getAddonInfo('profile')
def addon_dir():
return __Addon.getAddonInfo('path')
def openSettings():
__Addon.openSettings()
def log(message,loglevel=xbmc.LOGNOTICE):
xbmc.log(encode(__addon_id__ + ": " + message),level=loglevel)
xbmc.log(encode(__addon_id__ + "-" + __Addon.getAddonInfo('version') + ": " + message),level=loglevel)
def showNotification(message):
xbmc.executebuiltin("Notification(" + getString(30010) + "," + message + ",4000," + xbmc.translatePath(__Addon.getAddonInfo('path') + "/icon.png") + ")")
xbmcgui.Dialog().notification(encode(getString(30010)),encode(message),time=4000,icon=xbmc.translatePath(__Addon.getAddonInfo('path') + "/icon.png"))
def getSetting(name):
return __Addon.getSetting(name)
@@ -23,4 +30,11 @@ def getString(string_id):
return __Addon.getLocalizedString(string_id)
def encode(string):
return string.encode('UTF-8','replace')
result = ''
try:
result = string.encode('UTF-8','replace')
except UnicodeDecodeError:
result = 'Unicode Error'
return result

View File

@@ -1,256 +1,274 @@
'''
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 utils as utils
import xbmc
import xbmcvfs
import urllib
import xbmcgui
import zipfile
import zlib
from dropbox import client, rest, session
def walk(path):
APP_KEY = utils.getSetting('dropbox_key')
APP_SECRET = utils.getSetting('dropbox_secret')
'''
Reimplementation of os.walk using XBMC's jsonrpc API.
class Vfs:
root_path = None
This has the nice added benefits of being able to walk remote
directories and inside compressed files such as rars/zips.
'''
def __init__(self,rootString):
self.set_root(rootString)
def set_root(self,rootString):
old_root = self.root_path
self.root_path = rootString
#fix slashes
self.root_path = self.root_path.replace("\\","/")
#check if trailing slash is included
if(self.root_path[-1:] != "/"):
self.root_path = self.root_path + "/"
dir_tree = [[path]]
#return the old root
return old_root
def listdir(self,directory):
return {}
current_depth = 0
def mkdir(self,directory):
return True
not_dir = ['.zip','.xsp','.rar']
def put(self,source,dest):
return True
while True:
def getFile(self,source):
return True
def rmdir(self,directory):
return True
if current_depth > -1:
def rmfile(self,aFile):
return True
try:
def exists(self,aFile):
return True
def rename(self,aFile,newName):
return True
def cleanup(self):
return True
class XBMCFileSystem(Vfs):
current_path = dir_tree[current_depth].pop(0)
current_dirs, current_files = [], []
def listdir(self,directory):
return xbmcvfs.listdir(directory)
for x in listdir(current_path, extra_metadata=True):
def mkdir(self,directory):
return xbmcvfs.mkdir(xbmc.translatePath(directory))
file_ext = x['file'].split('.')[-1]
if x['filetype'] == 'directory' and not any(file_ext in s for s in not_dir):
def put(self,source,dest):
return xbmcvfs.copy(xbmc.translatePath(source),xbmc.translatePath(dest))
def rmdir(self,directory):
return xbmcvfs.rmdir(directory,True)
current_dirs.append(urllib.unquote(x['file']))
def rmfile(self,aFile):
return xbmcvfs.delete(aFile)
else:
current_files.append(urllib.unquote(x['file']))
def rename(self,aFile,newName):
return xbmcvfs.rename(aFile, newName)
except IndexError:
def exists(self,aFile):
return xbmcvfs.exists(aFile)
current_depth -= 1
class ZipFileSystem(Vfs):
zip = None
def __init__(self,rootString,mode):
self.root_path = ""
self.zip = zipfile.ZipFile(rootString,mode=mode,allowZip64=True)
def listdir(self,directory):
return [[],[]]
def mkdir(self,directory):
#self.zip.write(directory[len(self.root_path):])
return False
def put(self,source,dest):
aFile = xbmcvfs.File(xbmc.translatePath(source),'r')
self.zip.writestr(utils.encode(dest),aFile.read(),compress_type=zipfile.ZIP_DEFLATED)
return True
def rmdir(self,directory):
return False
def exists(self,aFile):
return False
def cleanup(self):
self.zip.close()
def extract(self,path):
#extract zip file to path
self.zip.extractall(path)
dir_tree.pop()
class DropboxFileSystem(Vfs):
client = None
def __init__(self,rootString):
self.set_root(rootString)
self.setup()
else:
def setup(self):
if(APP_KEY == '' or APP_SECRET == ''):
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30058),utils.getString(30059))
return
user_token_key,user_token_secret = self.getToken()
sess = session.DropboxSession(APP_KEY,APP_SECRET,"app_folder")
yield (current_path, current_dirs, current_files)
if current_dirs:
current_depth += 1
dir_tree.append(current_dirs)
if(user_token_key == '' and user_token_secret == ''):
token = sess.obtain_request_token()
url = sess.build_authorize_url(token)
#print url in log
utils.log("Authorize URL: " + url)
xbmcgui.Dialog().ok(utils.getString(30010),utils.getString(30056),utils.getString(30057))
#if user authorized this will work
user_token = sess.obtain_access_token(token)
self.setToken(user_token.key,user_token.secret)
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
sess.set_token(user_token_key,user_token_secret)
self.client = client.DropboxClient(sess)
try:
utils.log(str(self.client.account_info()))
except:
#this didn't work, delete the token file
self.deleteToken()
def listdir(self,directory):
if(self.client != None and self.exists(directory)):
files = []
dirs = []
metadata = self.client.metadata(directory)
for aFile in metadata['contents']:
if(aFile['is_dir']):
dirs.append(aFile['path'][len(directory):])
else:
files.append(aFile['path'][len(directory):])
return [dirs,files]
else:
return [[],[]]
def mkdir(self,directory):
directory = self._fix_slashes(directory)
if(self.client != None):
if(not self.exists(directory)):
self.client.file_create_folder(directory)
return True
else:
return False
def rmdir(self,directory):
directory = self._fix_slashes(directory)
if(self.client != None and self.exists(directory)):
#dropbox is stupid and will refuse to do this sometimes, need to delete recursively
dirs,files = self.listdir(directory)
for aDir in dirs:
self.rmdir(aDir)
#finally remove the root directory
self.client.file_delete(directory)
return True
else:
return False
def rmfile(self,aFile):
aFile = self._fix_slashes(aFile)
if(self.client != None and self.exists(aFile)):
self.client.file_delete(aFile)
return True
else:
return False
def exists(self,aFile):
aFile = self._fix_slashes(aFile)
if(self.client != None):
try:
meta_data = self.client.metadata(aFile)
#if we make it here the file does exist
return True
except:
return False
else:
return False
def put(self,source,dest,retry=True):
dest = self._fix_slashes(dest)
if(self.client != None):
f = open(source,'rb')
try:
response = self.client.put_file(dest,f,True)
return True
except:
#if we have an exception retry
if(retry):
return self.put(source,dest,False)
else:
#tried once already, just quit
return False
else:
return False
def get_file(self,source,dest):
if(self.client != None):
#write the file locally
out = open(dest,'wb')
f = self.client.get_file(source).read()
out.write(f)
out.close()
return True
else:
return False
def _fix_slashes(self,filename):
return filename.replace('\\','/')
def setToken(self,key,secret):
#write the token files
token_file = open(xbmc.translatePath(utils.data_dir() + "tokens.txt"),'w')
token_file.write("%s|%s" % (key,secret))
token_file.close()
def getToken(self):
#get tokens, if they exist
if(xbmcvfs.exists(xbmc.translatePath(utils.data_dir() + "tokens.txt"))):
token_file = open(xbmc.translatePath(utils.data_dir() + "tokens.txt"))
key,secret = token_file.read().split('|')
token_file.close()
return [key,secret]
else:
return ["",""]
def deleteToken(self):
if(xbmcvfs.exists(xbmc.translatePath(utils.data_dir() + "tokens.txt"))):
xbmcvfs.delete(xbmc.translatePath(utils.data_dir() + "tokens.txt"))

View File

@@ -1,26 +1,34 @@
<?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_selection" type="enum" lvalues="30018|30019|30027" 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" />
<setting id="dropbox_key" type="text" label="30028" visible="eq(-3,2)" default="" />
<setting id="dropbox_secret" type="text" label="30029" visible="eq(-4,2)" default="" />
<setting id="compress_backups" type="bool" label="30087" default="false" />
<setting id="backup_rotation" type="number" label="30026" default="0" />
<setting id="progress_mode" type="enum" label="30022" lvalues="30082|30083|30084" default="0" />
</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_profiles" type="bool" label="30080" default="false" />
<setting id="backup_thumbnails" type="bool" label="30034" default="true" />
<setting id="backup_config" type="bool" label="30035" default="true" />
<setting id="custom_dir_1_enable" type="bool" label="30036" default="false" />
<setting id="backup_custom_dir_1" type="folder" label="30018" default="" visible="eq(-1,true)"/>
<setting id="custom_dir_2_enable" type="bool" label="30037" default="false" />
<setting id="backup_custom_dir_2" type="folder" label="30018" default="" visible="eq(-1,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)"/>
<setting id="schedule_interval" type="enum" label="30061" lvalues="30079|30072|30073|30074|30075" default="1" 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,4)" 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,2)" enable="eq(-3,true)"/>
<setting id="cron_schedule" type="text" label="30064" default="0 0 * * *" visible="eq(-3,4)" enable="eq(-4,true)"/>
<setting id="cron_shutdown" type="bool" label="30076" default="false" enable="eq(-5,true)" />
</category>
</settings>

View File

@@ -1,4 +1,6 @@
import xbmc
import xbmcvfs
import xbmcgui
import datetime
import time
import os
@@ -7,11 +9,13 @@ from resources.lib.croniter import croniter
from resources.lib.backup import XbmcBackup
class BackupScheduler:
monitor = None
enabled = "false"
next_run = 0
settings_update_time = 0
restore_point = None
def __init__(self):
self.monitor = UpdateMonitor(update_method = self.settingsChanged)
self.enabled = utils.getSetting("enable_scheduler")
if(self.enabled == "true"):
@@ -20,59 +24,88 @@ class BackupScheduler:
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'))
self.findNextRun(time.time())
def start(self):
#check if a backup should be resumed
resumeRestore = self._resumeCheck()
if(resumeRestore):
restore = XbmcBackup()
restore.selectRestore(self.restore_point)
#skip the advanced settings check
restore.skipAdvanced()
restore.run(XbmcBackup.Restore)
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"):
if(self.enabled == "true"):
#scheduler is still on
now = time.time()
if(self.next_run <= now):
if(utils.getSetting('run_silent') == 'false'):
progress_mode = int(utils.getSetting('progress_mode'))
if(progress_mode != 2):
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)
if(backup.remoteConfigured()):
def findNextRun(self,now,forceUpdate = False):
mod_time = self.settings_update_time
if(int(utils.getSetting('progress_mode')) in [0,1]):
backup.run(XbmcBackup.Backup,True)
else:
backup.run(XbmcBackup.Backup,False)
#check if this is a "one-off"
if(int(utils.getSetting("schedule_interval")) == 0):
#disable the scheduler after this run
self.enabled = "false"
utils.setSetting('enable_scheduler','false')
else:
utils.showNotification(utils.getString(30045))
#check if we should shut the computer down
if(utils.getSetting("cron_shutdown") == 'true'):
#wait 10 seconds to make sure all backup processes and files are completed
time.sleep(10)
xbmc.executebuiltin('ShutDown()')
else:
#find the next run time like normal
self.findNextRun(now)
xbmc.sleep(500)
#delete monitor to free up memory
del self.monitor
def findNextRun(self,now):
#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.showNotification(utils.getString(30081) + " " + datetime.datetime.fromtimestamp(self.next_run).strftime('%m-%d-%Y %H:%M'))
utils.log("scheduler will run again on " + datetime.datetime.fromtimestamp(self.next_run).strftime('%m-%d-%Y %H:%M'))
def settingsChanged(self):
current_enabled = utils.getSetting("enable_scheduler")
#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(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
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'))
if(self.enabled == "true"):
#always recheck the next run time after an update
self.findNextRun(time.time())
def parseSchedule(self):
schedule_type = int(utils.getSetting("schedule_interval"))
@@ -80,18 +113,39 @@ class BackupScheduler:
hour_of_day = utils.getSetting("schedule_time")
hour_of_day = int(hour_of_day[0:2])
if(schedule_type == 0):
if(schedule_type == 0 or schedule_type == 1):
#every day
cron_exp = "0 " + str(hour_of_day) + " * * *"
elif(schedule_type == 1):
elif(schedule_type == 2):
#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):
elif(schedule_type == 3):
#first day of month
cron_exp = "0 " + str(hour_of_day) + " 1 * *"
return cron_exp
return cron_exp
def _resumeCheck(self):
shouldContinue = False
if(xbmcvfs.exists(xbmc.translatePath(utils.data_dir() + "resume.txt"))):
rFile = xbmcvfs.File(xbmc.translatePath(utils.data_dir() + "resume.txt"),'r')
self.restore_point = rFile.read()
rFile.close()
xbmcvfs.delete(xbmc.translatePath(utils.data_dir() + "resume.txt"))
shouldContinue = xbmcgui.Dialog().yesno(utils.getString(30042),utils.getString(30043),utils.getString(30044))
return shouldContinue
class UpdateMonitor(xbmc.Monitor):
update_method = None
def __init__(self,*args, **kwargs):
xbmc.Monitor.__init__(self)
self.update_method = kwargs['update_method']
def onSettingsChanged(self):
self.update_method()
BackupScheduler().start()