Advertisement
KiberInfinity

vk_msg_rst

Sep 22nd, 2016
144
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function vkRestoreMessages() {
  2.     var box = null;
  3.     var mids = [];
  4.     var proc_offset = 0;
  5.     var cur_offset = 0;
  6.     var abort = false;
  7.     var restored = [];
  8.    var MSG_DEL_REQ_DELAY = 350;
  9.    var MSG_SCAN_REQ_DELAY = 350;
  10.    var deleted_cnt  = 0;
  11.    var restored_cnt = 0;
  12.    var cant_restore_cnt = 0;
  13.    var deleted = [];
  14.    window.dead_messages = [];
  15.  
  16.    var SCAN_STEP = 1000;
  17.    var fast_messages_get = function(out, offset, count, onDone) {
  18.         var code_body='';
  19.         var code_r=[];
  20.         var steps=Math.ceil(count/100);
  21.         for (var i=0; i<steps;i++){
  22.             var obj={count:count>100?100:count, offset:offset,out:out,preview_length:0};
  23.             code_body+='var x'+i+'=API.messages.get('+JSON.stringify(obj)+');\n';
  24.             code_r.push('x'+i);
  25.             count-=100;
  26.             offset+=100;
  27.         }
  28.         code_body+='\nreturn ['+code_r.join(',')+'];';
  29.         dApi.call('execute',{v:'5.53', code:code_body},function(r){
  30.             var res=[];
  31.          var count = 0;
  32.             var m=r.response;
  33.             for (var i=0;i<m.length;i++){
  34.                 count = m[i].count || count;
  35.             if (m[i].items && m[i].items.length>0)
  36.                     res = res.concat(m[i].items)
  37.             }
  38.             onDone({response:{count: count, items: res}});
  39.         });
  40.     }
  41.    var get_dead_message = function(ids, callback){
  42.             dApi.call('messages.getById', {
  43.                 message_ids : ids,
  44.             preview_length:0,
  45.             v:'5.53'
  46.             },{
  47.             ok:function (r) {
  48.                if (r.response && r.response.items && r.response.items.length > 0) {
  49.                   for (var i = 0; i< r.response.items.length; i++)
  50.                   if (r.response.items[i].deleted == 1) //ignore msg in spam
  51.                      dead_messages.push(r.response.items[i]);
  52.                   console.log(r.response.items);
  53.                }
  54.                setTimeout(callback, MSG_DEL_REQ_DELAY);
  55.             },
  56.             error: function(){
  57.                setTimeout(callback, MSG_DEL_REQ_DELAY);
  58.                //restored.push(ids_part.join(',') + ' - fail');
  59.             }
  60.          });
  61.    }
  62.     var restore = function () {
  63.         if (abort)
  64.             return;
  65.         var proc_count = deleted.length;
  66.         var ids_part = deleted.slice(proc_offset, proc_offset + 1);
  67.  
  68.         ge('vk_scan_msg').innerHTML = vkProgressBar(proc_offset, proc_count, 310, IDL('msgrestore') + ' %')+'<br><br>'+
  69.                                     'restored: <b>' + restored_cnt +'</b><br/>'+
  70.                                     'failed: <b>' + cant_restore_cnt +'</b><br/>'+
  71.                                     'dead_messages: <b>' + dead_messages.length + '</b> <button onclick="save_dead()">save loaded</button><br/>'+
  72.                                     'cur msg id:' + ids_part;
  73.         if (ids_part.length == 0) {
  74.             alert('restored: ' + restored_cnt +'\n'+
  75.                'failed: ' + cant_restore_cnt
  76.                /*restored.join(', ')*/);
  77.             //box.hide();
  78.             vkMsg(IDL('RestoreMessagesDone'), 3000);
  79.         } else
  80.             dApi.call('messages.restore', {
  81.                 message_id : ids_part.join(','),
  82.             v:'5.53'
  83.             },{
  84.             ok:function (r) {
  85.                if (r.response == '1') {
  86.                   restored_cnt++;
  87.                   //restored.push(ids_part.join(',') + ' - ok');
  88.                } else {
  89.                   cant_restore_cnt++;
  90.                   //restored.push(ids_part.join(',') + ' - fail');
  91.                }
  92.                proc_offset += 1;
  93.                if (r.response == '1')
  94.                   setTimeout(restore, MSG_DEL_REQ_DELAY);
  95.                else
  96.                   setTimeout(get_dead_message.pbind(ids_part.join(','), restore),MSG_DEL_REQ_DELAY);
  97.             },
  98.             error: function(){
  99.                cant_restore_cnt++;
  100.                proc_offset += 1;
  101.                //setTimeout(restore, MSG_DEL_REQ_DELAY);
  102.                setTimeout(get_dead_message.pbind(ids_part.join(','), restore),MSG_DEL_REQ_DELAY);
  103.                //restored.push(ids_part.join(',') + ' - fail');
  104.             }
  105.          });
  106.     };
  107.    var is_out = 0;
  108.  
  109.     var scan = function () {
  110.         if (cur_offset == 0)
  111.             ge('vk_scan_msg').innerHTML = vkProgressBar(cur_offset, 2, 310, IDL('msgreq') + ' %');
  112.  
  113.       fast_messages_get(is_out ? 1 : 0, cur_offset, SCAN_STEP, function(r){
  114.             if (abort)
  115.                 return;
  116.             var ms = r.response.items;
  117.          var ms_count = r.response.count;
  118.             var msg_count = ms_count;
  119.             ge('vk_scan_msg').innerHTML = vkProgressBar(cur_offset, msg_count, 310, IDL('msgreq') + ' % ('+(is_out == 1 ? 'outgoing' : 'incoming')+')');
  120.             for (var i = 0; i < ms.length; i++)
  121.                 mids.push(ms[i].id);
  122.             if (cur_offset < msg_count /*&& cur_offset < 3000*/) {
  123.                 cur_offset += SCAN_STEP;
  124.                 setTimeout(scan, MSG_SCAN_REQ_DELAY);
  125.             } else if (is_out == 0){
  126.             is_out = 1;
  127.             cur_offset = 0;
  128.             setTimeout(scan, MSG_SCAN_REQ_DELAY);
  129.          } else {
  130.             var int_sort = function(a,b){
  131.                a = parseInt(a);
  132.                b = parseInt(b);
  133.                return a > b ? 1 : (a < b ? -1 : 0);
  134.             }
  135.  
  136.             //mids.sort(int_sort);
  137.             //var maxmid = Math.max.apply(this, mids); // RangeError: Maximum call stack size exceeded
  138.             var maxmid = 0;
  139.             console.log('find max in array',mids.length, mids);
  140.             for (var i = 0;i < mids.length; i++)
  141.                maxmid = Math.max(maxmid, mids[i]);
  142.             console.log('max:',maxmid);
  143.             for (var i = 0; i < maxmid; i++) {
  144.                if (mids.indexOf(i) == -1)
  145.                   deleted.push(i);
  146.             }
  147.             console.log('deleted collected. sorting...');
  148.             deleted.sort(int_sort).reverse();
  149.             console.log('max:', maxmid);
  150.             console.log('mids:', mids.reverse());
  151.             console.log('deleted:', deleted);
  152.                 restore();
  153.          }
  154.         });
  155.     };
  156.     var run = function () {
  157.         box = new MessageBox({
  158.                 title : IDL('ScanMessages'),
  159.                 closeButton : true,
  160.                 width : "350px"
  161.             });
  162.         box.removeButtons();
  163.         box.addButton(IDL('Cancel'), function (r) {
  164.             abort = true;
  165.             box.hide();
  166.         }, 'no');
  167.         var html = '<div id="vk_scan_msg"></div>';
  168.         box.content(html).show();
  169.         scan();
  170.     }
  171.     vkAlertBox(IDL('ScanMessages'), IDL('msgscanconfirm'), run, true);
  172. }
  173.  
  174. function save_dead(){
  175.    vkLdr.show();
  176.    FileSaverConnect(function() {
  177.       var blob = new Blob([JSON.stringify(dead_messages,'','  ')], {type: "text/plain;charset=utf-8"});
  178.       vkLdr.hide();
  179.       saveAs(blob, 'dead_messages_'+vk.id+' '+(new Date())+'.json');
  180.    });
  181. }
  182.  
  183. vkRestoreMessages();
Advertisement
RAW Paste Data Copied
Advertisement