Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function vkRestoreMessages() {
- var box = null;
- var mids = [];
- var proc_offset = 0;
- var cur_offset = 0;
- var abort = false;
- var restored = [];
- var MSG_DEL_REQ_DELAY = 350;
- var MSG_SCAN_REQ_DELAY = 350;
- var deleted_cnt = 0;
- var restored_cnt = 0;
- var cant_restore_cnt = 0;
- var deleted = [];
- window.dead_messages = [];
- var SCAN_STEP = 1000;
- var fast_messages_get = function(out, offset, count, onDone) {
- var code_body='';
- var code_r=[];
- var steps=Math.ceil(count/100);
- for (var i=0; i<steps;i++){
- var obj={count:count>100?100:count, offset:offset,out:out,preview_length:0};
- code_body+='var x'+i+'=API.messages.get('+JSON.stringify(obj)+');\n';
- code_r.push('x'+i);
- count-=100;
- offset+=100;
- }
- code_body+='\nreturn ['+code_r.join(',')+'];';
- dApi.call('execute',{v:'5.53', code:code_body},function(r){
- var res=[];
- var count = 0;
- var m=r.response;
- for (var i=0;i<m.length;i++){
- count = m[i].count || count;
- if (m[i].items && m[i].items.length>0)
- res = res.concat(m[i].items)
- }
- onDone({response:{count: count, items: res}});
- });
- }
- var get_dead_message = function(ids, callback){
- dApi.call('messages.getById', {
- message_ids : ids,
- preview_length:0,
- v:'5.53'
- },{
- ok:function (r) {
- if (r.response && r.response.items && r.response.items.length > 0) {
- for (var i = 0; i< r.response.items.length; i++)
- if (r.response.items[i].deleted == 1) //ignore msg in spam
- dead_messages.push(r.response.items[i]);
- console.log(r.response.items);
- }
- setTimeout(callback, MSG_DEL_REQ_DELAY);
- },
- error: function(){
- setTimeout(callback, MSG_DEL_REQ_DELAY);
- //restored.push(ids_part.join(',') + ' - fail');
- }
- });
- }
- var restore = function () {
- if (abort)
- return;
- var proc_count = deleted.length;
- var ids_part = deleted.slice(proc_offset, proc_offset + 1);
- ge('vk_scan_msg').innerHTML = vkProgressBar(proc_offset, proc_count, 310, IDL('msgrestore') + ' %')+'<br><br>'+
- 'restored: <b>' + restored_cnt +'</b><br/>'+
- 'failed: <b>' + cant_restore_cnt +'</b><br/>'+
- 'dead_messages: <b>' + dead_messages.length + '</b> <button onclick="save_dead()">save loaded</button><br/>'+
- 'cur msg id:' + ids_part;
- if (ids_part.length == 0) {
- alert('restored: ' + restored_cnt +'\n'+
- 'failed: ' + cant_restore_cnt
- /*restored.join(', ')*/);
- //box.hide();
- vkMsg(IDL('RestoreMessagesDone'), 3000);
- } else
- dApi.call('messages.restore', {
- message_id : ids_part.join(','),
- v:'5.53'
- },{
- ok:function (r) {
- if (r.response == '1') {
- restored_cnt++;
- //restored.push(ids_part.join(',') + ' - ok');
- } else {
- cant_restore_cnt++;
- //restored.push(ids_part.join(',') + ' - fail');
- }
- proc_offset += 1;
- if (r.response == '1')
- setTimeout(restore, MSG_DEL_REQ_DELAY);
- else
- setTimeout(get_dead_message.pbind(ids_part.join(','), restore),MSG_DEL_REQ_DELAY);
- },
- error: function(){
- cant_restore_cnt++;
- proc_offset += 1;
- //setTimeout(restore, MSG_DEL_REQ_DELAY);
- setTimeout(get_dead_message.pbind(ids_part.join(','), restore),MSG_DEL_REQ_DELAY);
- //restored.push(ids_part.join(',') + ' - fail');
- }
- });
- };
- var is_out = 0;
- var scan = function () {
- if (cur_offset == 0)
- ge('vk_scan_msg').innerHTML = vkProgressBar(cur_offset, 2, 310, IDL('msgreq') + ' %');
- fast_messages_get(is_out ? 1 : 0, cur_offset, SCAN_STEP, function(r){
- if (abort)
- return;
- var ms = r.response.items;
- var ms_count = r.response.count;
- var msg_count = ms_count;
- ge('vk_scan_msg').innerHTML = vkProgressBar(cur_offset, msg_count, 310, IDL('msgreq') + ' % ('+(is_out == 1 ? 'outgoing' : 'incoming')+')');
- for (var i = 0; i < ms.length; i++)
- mids.push(ms[i].id);
- if (cur_offset < msg_count /*&& cur_offset < 3000*/) {
- cur_offset += SCAN_STEP;
- setTimeout(scan, MSG_SCAN_REQ_DELAY);
- } else if (is_out == 0){
- is_out = 1;
- cur_offset = 0;
- setTimeout(scan, MSG_SCAN_REQ_DELAY);
- } else {
- var int_sort = function(a,b){
- a = parseInt(a);
- b = parseInt(b);
- return a > b ? 1 : (a < b ? -1 : 0);
- }
- //mids.sort(int_sort);
- //var maxmid = Math.max.apply(this, mids); // RangeError: Maximum call stack size exceeded
- var maxmid = 0;
- console.log('find max in array',mids.length, mids);
- for (var i = 0;i < mids.length; i++)
- maxmid = Math.max(maxmid, mids[i]);
- console.log('max:',maxmid);
- for (var i = 0; i < maxmid; i++) {
- if (mids.indexOf(i) == -1)
- deleted.push(i);
- }
- console.log('deleted collected. sorting...');
- deleted.sort(int_sort).reverse();
- console.log('max:', maxmid);
- console.log('mids:', mids.reverse());
- console.log('deleted:', deleted);
- restore();
- }
- });
- };
- var run = function () {
- box = new MessageBox({
- title : IDL('ScanMessages'),
- closeButton : true,
- width : "350px"
- });
- box.removeButtons();
- box.addButton(IDL('Cancel'), function (r) {
- abort = true;
- box.hide();
- }, 'no');
- var html = '<div id="vk_scan_msg"></div>';
- box.content(html).show();
- scan();
- }
- vkAlertBox(IDL('ScanMessages'), IDL('msgscanconfirm'), run, true);
- }
- function save_dead(){
- vkLdr.show();
- FileSaverConnect(function() {
- var blob = new Blob([JSON.stringify(dead_messages,'',' ')], {type: "text/plain;charset=utf-8"});
- vkLdr.hide();
- saveAs(blob, 'dead_messages_'+vk.id+' '+(new Date())+'.json');
- });
- }
- vkRestoreMessages();
Advertisement
RAW Paste Data
Copied
Advertisement