@@ -954,24 +954,58 @@ var µb = µBlock;
954954
955955/******************************************************************************/
956956
957- var getUserData = function ( callback ) {
958- var onUserFiltersReady = function ( details ) {
957+ var getLocalData = function ( callback ) {
958+ var onStorageInfoReady = function ( bytesInUse ) {
959+ var o = µb . restoreBackupSettings ;
959960 callback ( {
960- 'timeStamp' : Date . now ( ) ,
961- 'version' : vAPI . app . version ,
962- 'userSettings' : µb . userSettings ,
963- 'filterLists' : µb . remoteBlacklists ,
964- 'netWhitelist' : µb . stringFromWhitelist ( µb . netWhitelist ) ,
965- 'userFilters' : details . content
961+ storageUsed : bytesInUse ,
962+ lastRestoreFile : o . lastRestoreFile ,
963+ lastRestoreTime : o . lastRestoreTime ,
964+ lastBackupFile : o . lastBackupFile ,
965+ lastBackupTime : o . lastBackupTime
966966 } ) ;
967967 } ;
968+
969+ µb . getBytesInUse ( onStorageInfoReady ) ;
970+ } ;
971+
972+ /******************************************************************************/
973+
974+ var backupUserData = function ( callback ) {
975+ var onUserFiltersReady = function ( details ) {
976+ var userData = {
977+ timeStamp : Date . now ( ) ,
978+ version : vAPI . app . version ,
979+ userSettings : µb . userSettings ,
980+ filterLists : µb . remoteBlacklists ,
981+ netWhitelist : µb . stringFromWhitelist ( µb . netWhitelist ) ,
982+ userFilters : details . content
983+ } ;
984+ var now = new Date ( ) ;
985+ var filename = vAPI . i18n ( 'aboutBackupFilename' )
986+ . replace ( '{{datetime}}' , now . toLocaleString ( ) )
987+ . replace ( / + / g, '_' ) ;
988+
989+ vAPI . download ( {
990+ 'url' : 'data:text/plain;charset=utf-8,' + encodeURIComponent ( JSON . stringify ( userData , null , ' ' ) ) ,
991+ 'filename' : filename
992+ } ) ;
993+
994+ µb . restoreBackupSettings . lastBackupFile = filename ;
995+ µb . restoreBackupSettings . lastBackupTime = Date . now ( ) ;
996+ µb . XAL . keyvalSetMany ( µb . restoreBackupSettings ) ;
997+
998+ getLocalData ( callback ) ;
999+ } ;
1000+
9681001 µb . assets . get ( 'assets/user/filters.txt' , onUserFiltersReady ) ;
9691002} ;
9701003
9711004/******************************************************************************/
9721005
973- var restoreUserData = function ( userData ) {
974- var countdown = 5 ;
1006+ var restoreUserData = function ( request ) {
1007+ var userData = request . userData ;
1008+ var countdown = 6 ;
9751009 var onCountdown = function ( ) {
9761010 countdown -= 1 ;
9771011 if ( countdown === 0 ) {
@@ -987,6 +1021,13 @@ var restoreUserData = function(userData) {
9871021 µb . XAL . keyvalSetOne ( 'remoteBlacklists' , userData . filterLists , onCountdown ) ;
9881022 µb . XAL . keyvalSetOne ( 'netWhitelist' , userData . netWhitelist , onCountdown ) ;
9891023 µb . assets . put ( 'assets/user/filters.txt' , userData . userFilters , onCountdown ) ;
1024+
1025+ µb . XAL . keyvalSetMany ( {
1026+ lastRestoreFile : request . file || '' ,
1027+ lastRestoreTime : Date . now ( ) ,
1028+ lastBackupFile : '' ,
1029+ lastBackupTime : 0
1030+ } , onCountdown ) ;
9901031 } ;
9911032
9921033 // If we are going to restore all, might as well wipe out clean local
@@ -999,7 +1040,7 @@ var restoreUserData = function(userData) {
9991040var resetUserData = function ( ) {
10001041 µb . XAL . keyvalRemoveAll ( ) ;
10011042 // Keep global counts, people can become quite attached to numbers
1002- µBlock . saveLocalSettings ( ) ;
1043+ µb . saveLocalSettings ( ) ;
10031044 vAPI . app . restart ( ) ;
10041045} ;
10051046
@@ -1008,8 +1049,11 @@ var resetUserData = function() {
10081049var onMessage = function ( request , sender , callback ) {
10091050 // Async
10101051 switch ( request . what ) {
1011- case 'getUserData' :
1012- return getUserData ( callback ) ;
1052+ case 'backupUserData' :
1053+ return backupUserData ( callback ) ;
1054+
1055+ case 'getLocalData' :
1056+ return getLocalData ( callback ) ;
10131057
10141058 default :
10151059 break ;
@@ -1020,7 +1064,7 @@ var onMessage = function(request, sender, callback) {
10201064
10211065 switch ( request . what ) {
10221066 case 'restoreUserData' :
1023- restoreUserData ( request . userData ) ;
1067+ restoreUserData ( request ) ;
10241068 break ;
10251069
10261070 case 'resetUserData' :
0 commit comments