source: sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/mail_archiver.js @ 4722

Revision 4722, 30.6 KB checked in by fernando-alberto, 13 years ago (diff)

Ticket #1269 - Desenvolvimento da nova solucao de arquivamento local MailArchiver?, ajuste para gerenciar folder

  • Property svn:eol-style set to native
Line 
1/*
2 * Mail Archive JS API
3 *
4 * This JavaScript file is the core to use MailArchiver embeded at Expresso suite.
5 * It contains all the resources used to handle local messages stored at the brand
6 * new solution Mail Archiver (a embeded application server running at client side).
7 *
8 * This feature is a replacement for Google Gears(obsolete by now), used by
9 * Expresso to store local messages at user workstation hard disk.
10 *
11 * @author Fernando Wendt [fernando-alberto.wendt@serpro.gov.br]
12 *
13 * @status under development
14 */
15
16var sessid = 'sessionId';
17
18function IterateIt(){
19    var deph = 0;
20    var returnstr = "";
21
22    for (i in arguments[0]){
23      if((arguments[0][i]) && (arguments[0][i].visited == null)){
24          arguments[0][i].visited = true;
25
26          if(typeof(arguments[0][i]) == 'object'){
27            returnstr += '+ Property "' + i + '"[object ' + deph + ']\n<br>';
28            //returnstr += IterateIt(arguments[0][i]);
29            deph++;
30          }
31      }
32    else returnstr += 'Property "' + i + '" -> ' + arguments[0][i] + ' [' + typeof(i) + ']\n<br>';
33    }
34    return (returnstr);
35}
36
37function dump(arr,level) {
38        var dumped_text = "";
39        if(!level) level = 0;
40       
41        //The padding given at the beginning of the line.
42        var level_padding = "";
43        for(var j=0;j<level+1;j++) level_padding += "    ";
44       
45        if(typeof(arr) == 'object') { //Array/Hashes/Objects
46                for(var item in arr) {
47                        var value = arr[item];
48                       
49                        if(typeof(value) == 'object') { //If it is an array,
50                                dumped_text += level_padding + "'" + item + "' ...\n<br>";
51                                dumped_text += dump(value,level+1);
52                        } else {
53                                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n<br>";
54                        }
55                }
56        } else { //Stings/Chars/Numbers etc.
57                dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
58        }
59        return dumped_text;
60}
61
62function zeroFill(d){
63    if(parseInt(d) < 10)
64        return('0' + d);
65    else
66        return(d);
67}
68
69/**
70 * Concatenates the values of a variable into an easily readable string
71 * by Matt Hackett [scriptnode.com]
72 * @param {Object} x The variable to debug
73 * @param {Number} max The maximum number of recursions allowed (keep low, around 5 for HTML elements to prevent errors) [default: 10]
74 * @param {String} sep The separator to use between [default: a single space ' ']
75 * @param {Number} l The current level deep (amount of recursion). Do not use this parameter: it's for the function's own use
76 */
77function print_r(x, max, sep, l) {
78
79        l = l || 0;
80        max = max || 100;
81        sep = sep || ' ';
82
83        if (l > max) {
84                return "[WARNING: Too much recursion]\n";
85        }
86
87        var
88                i,
89                r = '',
90                t = typeof x,
91                tab = '';
92
93        if (x === null) {
94                r += "(null)\n";
95        } else if (t == 'object') {
96
97                l++;
98
99                for (i = 0; i < l; i++) {
100                        tab += sep;
101                }
102
103                if (x && x.length) {
104                        t = 'array';
105                }
106
107                r += '(' + t + ") :\n";
108
109                for (i in x) {
110                        try {
111                                r += tab + '[' + i + '] : ' + print_r(x[i], max, sep, (l + 1));
112                        } catch(e) {
113                                return "[ERROR: " + e + "]\n";
114                        }
115                }
116
117        } else {
118
119                if (t == 'string') {
120                        if (x == '') {
121                                x = '(empty)';
122                        }
123                }
124
125                r += '(' + t + ') ' + x + "\n";
126
127        }
128
129        return r;
130
131};
132var_dump = print_r;
133
134
135
136//Main object structure: object property data definition
137function MailArchiver() {
138    this.enabled = null;
139    this.interval = 500;
140    this.timer = null;
141    this.counter = 0;
142    this.message_list = new Array();
143    this.total_messages = 0;
144    this.messages_processed = 0;
145    this.messages_fail = 0;
146    this.folder_origin = null;
147    this.folder_destination = null;
148    this.folders = null;
149    this.currentfolder = 'local_root';
150    this.drawdata = null;
151    this.onprocess = false;
152}
153
154//Invoked at some possible MA crash issue
155MailArchiver.prototype.resetObject = function(){
156    expresso_mail_archive.message_list = new Array();
157    expresso_mail_archive.total_messages = 0;
158    expresso_mail_archive.messages_processed = 0;
159    expresso_mail_archive.messages_fail = 0;
160    expresso_mail_archive.folder_origin = null;
161    expresso_mail_archive.folder_destination = null;
162    expresso_mail_archive.folder = null;
163}
164
165/*SystemCheck method: test if MailArchive is installed and/or running at user workstation
166*Try to get a instance of ArchiveServices object - the handler of services provided by
167*the MailArchive services provider interface, from user workstation.
168*/
169MailArchiver.prototype.SystemCheck = function(){
170    expresso_mail_archive.enabled = ((ArchiveServices) ? true : false);
171}
172
173//Turns on the listener timer to check services availability
174MailArchiver.prototype.ActivateStatusListener = function(obj){
175    if (document.getElementById('mail_archiver_retry'))
176        tem_tag = true;
177    else
178        tem_tag = false;
179    try{
180        if (obj.enabled){
181            obj.interval = 500; //set default timer to 1ms (imediate lauching)
182            draw_footer_box(get_current_folder());
183            obj.getServicesStatus(obj);
184        }
185        else{
186            throw "this is not enabled: " + obj;
187            window.alert('Nope: obj.enabled is not true...');
188        }
189    }
190    catch (e){
191        window.alert('ActivateStatusListener error: ' + e);
192    }
193}
194
195//Turns off the service status listener, at a crash issue
196MailArchiver.prototype.DeactivateStatusListener = function(obj){
197    window.clearInterval(obj.timer);
198    obj.enabled = null;
199    obj.timer=null;
200    obj.interval = 500;
201    ArchiveServices = null;
202    connector.purgeCache();
203   
204    draw_footer_box(get_current_folder());
205    auto_refresh();
206
207    if(document.getElementById('mail_archiver_retry')){
208        document.getElementById('mail_archiver_retry').parentNode.removeChild(document.getElementById('mail_archiver_retry'));
209    }
210    else{
211        //to do, by now, means nothing
212    }
213}
214
215//ServiceStatus callback OK
216MailArchiver.prototype.getServicesStatusOK = function(serviceData){
217    if ((serviceData.getReturn() == "STARTED") || (serviceData.getReturn() == "RUNNING")){
218        //If there is no timer activated to services check interval, set it up.
219        if(expresso_mail_archive.enabled){
220           if(expresso_mail_archive.timer == null){
221                expresso_mail_archive.interval = 5000;
222                expresso_mail_archive.timer = window.setInterval(expresso_mail_archive.getServicesStatus, expresso_mail_archive.interval);
223                var drawinginfo = {treeObject: tree_folders, treeName: 'tree_folders', folderName: 'local_root'};
224                expresso_mail_archive.currentfolder = 'local_root';
225                expresso_mail_archive.drawdata = drawinginfo;
226                expresso_mail_archive.getFoldersList();
227           }
228        }
229        else{
230            window.clearInterval(expresso_mail_archive.timer);
231            write_msg(get_lang('Your preferences are setting to use local messages, but Mail Archiver does not seems to be running or installed at this workstation. By now, we are turning off this feature. Check it out!'),true);
232        }
233    }
234    else{
235        expresso_mail_archive.enabled = false;
236        window.clearInterval(expresso_mail_archive.timer);
237        write_msg(get_lang('Your preferences are setting to use local messages, but Mail Archiver does not seems to be running or installed at this workstation. By now, we are turning off this feature. Check it out!'),true);
238    }
239}
240
241//Dettach resources handler
242MailArchiver.prototype.DeactivateResources = function(obj){   
243    if(obj.timer)
244        window.clearInterval(obj.timer);
245    write_msg(get_lang('3Mail Archiver is not responding. There is some communicating issue hang it up. Some services may not work properly. Check it out!'));
246    obj.DeactivateStatusListener(obj);
247    return;
248}
249
250//Services Status Fail callback
251MailArchiver.prototype.getServicesStatusFailure = function(serviceData){
252    window.alert('getServicesStatusFailure feature: ' + serviceData);
253}
254
255//Service Status handler
256MailArchiver.prototype.getServicesStatus = function(obj){
257    try{
258        if(ArchiveServices){
259            try{
260                ArchiveServices.getState(expresso_mail_archive.getServicesStatusOK, expresso_mail_archive.getServicesStatusFailure, "true");
261            }catch (e){
262                throw "Service failure status: getState";
263            }
264        }
265        else {
266            throw "No ArchiveServices object present. Sorry, but leaving now...";
267        }
268    }catch (e){
269        window.alert('getServiceStatus exception:' + e);
270    }
271    expresso_mail_archive.counter = expresso_mail_archive.counter +1;
272}
273
274/*Restart method: re-initializes all the Mail Archive structure
275 **/
276MailArchiver.prototype.Restart = function(obj){
277    obj.SystemCheck();
278    obj.ActivateStatusListener(obj);
279    auto_refresh();
280}
281
282/*Startup method: initializes all the Mail Archive structure to work so far as possible
283 *Looks like the old 'gears_init', from Gears
284 **/
285MailArchiver.prototype.Startup = function(){
286    this.SystemCheck();
287}
288
289MailArchiver.prototype.serializeToExpresso = function(data){
290    return(connector.serialize(data));
291}
292
293MailArchiver.prototype.unserializeFromExpresso = function(data){
294    return(connector.unserialize(data));
295}
296
297
298MailArchiver.prototype.CreateMessageList = function(msg_list){
299    if((msg_list != null) && (msg_list != "") && (msg_list != " ")){
300        if (expresso_mail_archive.message_list.length == 0){
301            //Get all the messages ids by pass at msgs_id to "message_list" object array propertie - if more than one exists
302            if(msg_list.indexOf(',') != -1){
303                var tmp_list = msg_list.split(',');
304                for(var i=0; i < tmp_list.length; i++){
305                    expresso_mail_archive.message_list.push(tmp_list[i]);
306                }
307            }
308            //Push message list to process the only one
309            else expresso_mail_archive.message_list.push(msg_list);
310        }
311    }
312    //msg_list is corrupted. aborting population
313    else expresso_mail_archive.message_list = new Array();
314}
315
316//Archive Operation
317MailArchiver.prototype.Archive = function(source_folder,destination_folder,msgs_id){
318    //window.alert('tentando arquivar a mensagem [' + msgs_id + '], do folder ['+source_folder+'] para a pasta destino ['+destination_folder+']');
319    try{
320        document.getElementById('main_title').innerHTML = get_lang("Starting to archive messages");
321        expresso_mail_archive.CreateMessageList(msgs_id);
322
323        if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')){
324
325            //Sets the message counter
326            expresso_mail_archive.total_messages = expresso_mail_archive.message_list.length;
327           
328            //Sets the folders properties: destination and origin
329            expresso_mail_archive.folder_origin = source_folder;
330            //window.alert('substr(0,5) = ' + destination_folder.substr(0,5));
331            if(destination_folder.substr(0,5) == 'local')
332                expresso_mail_archive.folder_destination = destination_folder.substr(6,destination_folder.length);
333            else
334                expresso_mail_archive.folder_destination = destination_folder;
335           
336            //window.alert('destination_folder = ' + expresso_mail_archive.folder_destination);
337
338            var arch_handler = function(data){
339                //Store the message source from Ajax request by now (string data)
340                var js_var = new String(data);
341                try{
342                    //Archive services needs session id, message source and destination folder
343                    document.getElementById('main_title').innerHTML = get_lang("Archiving message on folder") + " " + expresso_mail_archive.folder_destination +"...";
344                    ArchiveServices.archive(expresso_mail_archive.getArchiveOperationOK, expresso_mail_archive.getArchiveOperationFailure, sessid, data ,expresso_mail_archive.folder_destination);
345                }
346                catch(e){
347                    window.alert('ArchiveServices.archive eror: ' + e);
348                }
349            }
350           
351            document.getElementById('main_title').innerHTML = get_lang("Archiving messages " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.message_list.length);
352            cExecute("$this.exporteml.js_source_var",arch_handler,"folder="+url_decode(source_folder)+"&msgs_to_export="+expresso_mail_archive.message_list[0]);
353        }
354        else throw('Ops. Message list stack is empty!');
355    }
356    catch(e){
357        window.alert('Archive error: ' + e);
358    }
359}
360
361//Archive callback OK
362MailArchiver.prototype.getArchiveOperationOK = function(status_message){
363    expresso_mail_archive.messages_processed++;
364    if(expresso_mail_archive.message_list.length > 1){
365       document.getElementById('main_title').innerHTML = get_lang("Message " + expresso_mail_archive.messages_processed + " of " + expresso_mail_archive.total_messages + " successfully archived.");
366       expresso_mail_archive.message_list.shift();
367       expresso_mail_archive.Archive(expresso_mail_archive.folder_origin, expresso_mail_archive.folder_destination, expresso_mail_archive.message_list);
368    }
369    else{
370        document.getElementById('main_title').innerHTML = get_lang("All done. End of archive messages operation.");
371        expresso_mail_archive.resetObject();
372        window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
373    }
374}
375//Archive callback Fail
376MailArchiver.prototype.getArchiveOperationFailure = function(error_message){
377    window.alert('Hi! getArchiveOperationFailure comes with ' + error_message.getReturn());
378    window.setTimeout("eval('document.getElementById(\"main_title\").innerHTML =\"Expresso Mail\"')",3000);
379}
380
381//getFolderList Operation
382MailArchiver.prototype.getFoldersList = function(basefolder){   
383    try{
384        ArchiveServices.listFolders(expresso_mail_archive.getFoldersListOperationOK, expresso_mail_archive.getFoldersListOperationFailure, sessid, basefolder);
385    }
386    catch (e){
387        window.alert('AQUI MESMO\nOps...List folders fails at:\n' + e.description);
388    }
389}
390
391//getFolderList callback OK
392MailArchiver.prototype.getFoldersListOperationOK = function(folderlist){
393    //Internal variable used to map all XML data return from WS invokated
394    var lfolders = new Array();
395   
396    //Mapping XML data to a handler data structure
397    if(folderlist.getReturn().length > 0){
398        var lfolders = new Array();
399        for(i=0; i<folderlist.getReturn().length; i++){
400            (folderlist.getReturn()[i].getFolderCount() > 0 ) ? folderChild = 1 : folderChild = 0;
401
402            //Store folder data at this format: {folder name, number of messages contained, folder has child nodes, folder id, folder parent id, folder full path}
403            //var folderData = new Array(folderlist.getReturn()[i].getName(), folderlist.getReturn()[i].getMessageCount(), folderChild, folderlist.getReturn()[i].getId(), folderlist.getReturn()[i].getParentId(), folderlist.getReturn()[i].getPath());
404            var folderData = {name: folderlist.getReturn()[i].getName(), messages: folderlist.getReturn()[i].getMessageCount(), haschild: folderChild, id: folderlist.getReturn()[i].getId(), parentid: folderlist.getReturn()[i].getParentId(), path: folderlist.getReturn()[i].getPath()};
405            lfolders.push(folderData);
406        }
407
408        //Sets folders property at main object
409        expresso_mail_archive.folders = lfolders;
410       
411        if(expresso_mail_archive.folders[0]["parentid"] == "")
412            expresso_mail_archive.currentfolder = 'local_root';
413        else
414            expresso_mail_archive.currentfolder = expresso_mail_archive.folders[0]["parentid"];
415       
416        //Folders dumping :)
417        /*var strFolders = '---';
418        for (var w=0; w < expresso_mail_archive.folders.length; w++){
419            strFolders += '\nFolder ' + w + ' -->';
420            for (x in expresso_mail_archive.folders[w]){
421                strFolders += '\n----------' + x + ':= ' + expresso_mail_archive.folders[w][x];
422            }
423            strFolders += '\n<---';
424        }
425        strFolders += '\n---';
426        alert(lfolders.length + ' folders mapeados, com default = ' + expresso_mail_archive.currentfolder + '\nfolders list:\n\n' + strFolders);
427        */
428
429        //If something UI related have been flagged, handle it
430        if (expresso_mail_archive.drawdata){
431            //window.alert('com drawdata');
432            expresso_mail_archive.drawFolderTree();
433        }
434    }
435}
436
437//getFolderList callback Fail
438MailArchiver.prototype.getFoldersListOperationFailure = function(error, http_msg){
439    window.alert('List folders mistake:' + error + '\nhttp_error = ' + http_msg);
440}
441
442//drawFolderTree operation, if requested to
443MailArchiver.prototype.drawFolderTree = function(){
444    //window.alert('na api de foldertree');
445    var localBaseName  = 'local_';
446    var objectTree = expresso_mail_archive.drawdata.treeObject;
447    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
448   
449    //Add nodes to tree
450    if(expresso_mail_archive.folders.length > 0){
451        for(i=0; i<expresso_mail_archive.folders.length; i++){
452            var folder_caption;
453           
454            //Special folders treatment: Inbox, Outbox, Drafts, Sent and Trash folders
455            if((expresso_mail_archive.folders[i]["name"] == 'Inbox') || (expresso_mail_archive.folders[i]["name"] == 'Outbox') || (expresso_mail_archive.folders[i]["name"] == 'Drafts') || (expresso_mail_archive.folders[i]["name"] == 'Sent') || (expresso_mail_archive.folders[i]["name"] == 'Trash')){
456                folder_caption = get_lang(expresso_mail_archive.folders[i]["name"]);
457            }
458            else{
459                folder_caption = expresso_mail_archive.folders[i]["name"];
460            }
461            var n_demo = new dNode({id: localBaseName + expresso_mail_archive.folders[i]["id"], caption: folder_caption, onClick: "change_folder('"+ localBaseName + expresso_mail_archive.folders[i]["id"] +"','"+ localBaseName + expresso_mail_archive.folders[i]["id"]+"', '" + expresso_mail_archive.drawdata.treeName + "')", plusSign:expresso_mail_archive.folders[i]["haschild"]});
462           
463            //Adjust the id node names
464            if(expresso_mail_archive.currentfolder){
465                if(expresso_mail_archive.currentfolder.substr(0,5) != 'local'){
466                    evalobjectTree.add(n_demo, localBaseName + expresso_mail_archive.currentfolder);
467                }
468                else{
469                    evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
470                }
471            }
472            else {
473                expresso_mail_archive.currentfolder = 'local_root';
474                evalobjectTree.add(n_demo,expresso_mail_archive.currentfolder);
475            }
476        }
477    }
478}
479
480//getFaultInfo operation
481MailArchiver.prototype.getFaultInfo = function(){
482    try{
483        ArchiveServices.getFaultInfo(expresso_mail_archive.getFaultInfoOperationOK, expresso_mail_archive.getFaultInfoOperationFailure, sessid);
484    }   
485    catch(e){
486        write_msg(get_lang('getFaultInfo invoke fails = ' + e),true);
487    }
488}
489
490//getFaultInfo callback OK
491MailArchiver.prototype.getFaultInfoOperationOK = function(faultinfo){
492    try{
493        write_msg(get_lang('MailArchiver remote service reports the following error:' + faultinfo.getReturn().getSoapFaultString(), true));
494    } catch(e){
495        write_msg(get_lang('Ops! It was not possible to capture service error data.', true));
496    }
497}
498
499//getFaultInfo callback Fail
500MailArchiver.prototype.getFaultInfoOperationFailure = function(errorCode, errorDesc){
501    try{
502        write_msg(get_lang('SoapFault capture fails at:' + errorCode + ' | ' + errorDesc, true));
503    } catch(e){
504        write_msg(get_lang('Service error mapping', true));
505    }   
506}
507
508//createFolder operation
509MailArchiver.prototype.createFolder = function(parentFolder, folderName){
510    try{
511        ArchiveServices.createFolder(expresso_mail_archive.createFolderOperationOK, expresso_mail_archive.createFolderOperationFailure, sessid, parentFolder, folderName);
512    }
513    catch (e){
514        window.alert('Ops...create folder fails at:\n' + e);
515    }
516   
517}
518
519//createFolder callback OK
520MailArchiver.prototype.createFolderOperationOK = function (folderObject){
521    draw_tree_local_folders();
522    ttreeBox.update_folder();   
523}
524
525//createFolder callback Fail
526MailArchiver.prototype.createFolderOperationFailure = function (message){
527    window.alert('Folder creation fails...\n->' + message.getReturn());
528}
529
530//deleteFolder operation
531MailArchiver.prototype.deleteFolder = function(folderName){
532    try{
533        ArchiveServices.deleteFolder(expresso_mail_archive.deleteFolderOperationOK, expresso_mail_archive.deleteFolderOperationFailure, sessid, folderName, true);
534    }
535    catch (e){
536        window.alert('Ops...delete folder fails at:\n' + e);
537    }
538   
539}
540
541//deleteFolder callback OK
542MailArchiver.prototype.deleteFolderOperationOK = function (folderObject){
543    var fo = IterateIt(folderObject);
544    write_msg(get_lang("The folder " + expresso_mail_archive.drawdata.folderName + " was successfully removed"));
545    draw_tree_local_folders();
546    ttreeBox.update_folder();   
547}
548
549//deleteFolder callback Fail
550MailArchiver.prototype.deleteFolderOperationFailure = function (message){
551    window.alert('Folder deletion fails...\n->' + message.getReturn());
552}
553
554//renameFolder operation
555MailArchiver.prototype.renameFolder = function(folderId, newFolderName){
556    try{
557        ArchiveServices.renameFolder(expresso_mail_archive.renameFolderOperationOK, expresso_mail_archive.renameFolderOperationFailure, sessid, folderId, newFolderName);
558    }
559    catch (e){
560        window.alert('Ops...renaming folder fails at:\n' + e);
561    }
562   
563}
564
565//renameFolder callback OK
566MailArchiver.prototype.renameFolderOperationOK = function (returnService){
567    var evalobjectTree = eval(expresso_mail_archive.drawdata.treeName);
568    evalobjectTree.update_folder();
569}
570
571//renameFolder callback Fail
572MailArchiver.prototype.renameFolderOperationFailure = function (ServiceFault){
573    window.alert('Folder rename fails...\n->' + ServiceFault.getReturn());
574    alert(get_lang("cannot rename folder. try other folder name"));
575}
576
577//getFolderInfo operation
578MailArchiver.prototype.getFolderInfo = function (folderId){
579    try{
580        ArchiveServices.getFolderInfo(expresso_mail_archive.getFolderInfoOperationOK, expresso_mail_archive.getFolderInfoOperationFailure, sessid, folderId);
581    }
582    catch (e){
583        window.alert('Ops...getFolderInfo fails at:\n' + e);
584    }     
585}
586
587//getFolderInfo callback OK
588MailArchiver.prototype.getFolderInfoOperationOK = function(returnService){
589   var folder_info = {id : returnService.getReturn().getId(), name : returnService.getReturn().getName(), parent : returnService.getReturn().getParentId(), numfolders: returnService.getReturn().getFolderCount(), nummessages: returnService.getReturn().getMessageCount()};
590   expresso_mail_archive.folder = folder_info;
591}
592
593//getFolderInfo callback Fail
594MailArchiver.prototype.getFolderInfoOperationFailure = function (ServiceFault){
595    window.alert('getFolderInfo service fails...\n->' + ServiceFault.getReturn());
596}
597
598//listMessages operation
599MailArchiver.prototype.listMessages = function(){
600    try{
601        var folderid = expresso_mail_archive.currentfolder;
602        var testing_data_xml = '<?xml version="1.0" encoding="UTF-8"?><query lowerIndex="0" upperIndex="50"><folder id="'+folderid+'"/><order asc="date"/><order desc="subject"/></query>';
603        var testing_data_json_mapped = '{"query":{"@lowerIndex":"0", "@upperIndex":"50", "folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date", "@desc":"subject"}]}}';
604        var testing_data = testing_data_json_mapped;
605        //window.alert('vai chamar o listMessages com testing_data = ' + testing_data);
606        ArchiveServices.listMessages(expresso_mail_archive.listMessagesOperationOK, expresso_mail_archive.listMessagesOperationFailure, sessid, testing_data);
607    }
608    catch (e){
609        window.alert('Ops...listMessages fails at:\n' + e);
610    }
611}
612
613//listMessages callback OK
614MailArchiver.prototype.listMessagesOperationOK = function(returnService){
615    var msglist = new Array();
616    /*window.alert('Dados da mensagem:\n->From ' + returnService.getReturn()[0].getFrom()
617                                      +'\n->To ' + returnService.getReturn()[0].getTo()
618                                      +'\n->Subject ' + returnService.getReturn()[0].getSubject()
619                                      +'\n->Date ' + returnService.getReturn()[0].getDate()
620                                      +'\n->Date ' + returnService.getReturn()[0].getSize()
621                                      +'\n->ID ' + returnService.getReturn()[0].getId());
622    */
623    for(var i=0; i< returnService.getReturn().length; i++){
624        //window.alert('quer deserializar:\n\n' + print_r(returnService.getReturn()[i]));
625        var ExpSerialized = expresso_mail_archive.toExpressoHeader(returnService.getReturn()[i]);
626        //window.alert('expSerialized ' + i + '\n\n --\n\n' + print_r(ExpSerialized));
627        //var test = connector.unserialize(ExpSerialized);
628        //window.alert('unserialized = \n\n' + test);
629        msglist.push(connector.unserialize(ExpSerialized));//usando connector.unserialize sobre o header mapeado no layout abaixo
630    }
631    msglist["num_msgs"] = returnService.getReturn().length;
632    //window.alert('print_r\n\n' + print_r(msglist));
633    expresso_mail_archive.drawdata = {messagesList:msglist};
634    expresso_mail_archive.drawMessagesList();
635}
636
637//listMessages callback Fail
638MailArchiver.prototype.listMessagesOperationFailure = function(ServiceFault){
639    window.alert('listmessages FALHOU!\n' + ServiceFault.getReturn());
640}
641
642MailArchiver.prototype.drawMessagesList = function(){
643    var data_to_draw = expresso_mail_archive.drawdata.messagesList; 
644    //window.alert('data to draw =  ' + data_to_draw.length + '\ndata_to_draw[0].from.full = ' + print_r(data_to_draw));
645   
646    alternate_border(0);
647    Element("border_id_0").innerHTML = "&nbsp;" + lang_folder(expresso_mail_archive.currentfolder) + '&nbsp;<font face="Verdana" size="1" color="#505050">[<span id="new_m">&nbsp;</span> / <span id="tot_m"></span>]</font>';
648    draw_box(data_to_draw, expresso_mail_archive.currentfolder, true);
649    draw_paging(expresso_mail_archive.drawdata.messagesList.length);
650    Element("tot_m").innerHTML = expresso_mail_archive.drawdata.messagesList.length;
651    //update_menu();
652   
653}
654
655// -----------------------------------SERIALIZED DATA TEMPLATES ----------------
656MailArchiver.prototype.toExpressoAddress = function(data){
657    /*var dataFormat = expresso_mail_archive.toExpressoFormatNameMail(data);
658    var dataName = dataFormat[0];
659    var dataEmail = dataFormat[1];
660    */
661    //window.alert('em toExpressoFrom com data = \n' + data + '[' + typeof(data) + ']('+data.length+')');
662    var Fromdata = eval("(" + data + ")");
663    var dataName = Fromdata.mailbox.name.$;
664    var dataEmail = Fromdata.mailbox.localPart.$ + '@' + Fromdata.mailbox.domain.$;
665    //window.alert('name = ' + Fromdata.mailbox.name.$ + '\nlocal part = ' + Fromdata.mailbox.localPart.$ + '\ndomain = ' + Fromdata.mailbox.domain.$);
666       
667    var tplFrom = 'a:2:{'
668+           's:4:"name";'
669+           's:'+dataName.length+':"'+dataName+'";'
670+           's:5:"email";'
671+           's:'+dataEmail.length+':"'+dataEmail+'";'
672+           's:4:"full";'
673+           's:'+(dataName.length + dataEmail.length + 3)+':"'+dataName+'" <'+dataEmail+'>;'
674+       '}';
675    //window.alert('retorno do email: ' + tplFrom);
676    return(tplFrom);
677}
678
679MailArchiver.prototype.toExpressoDate = function(data){
680    var ndate = new Date(data);   
681    var odate = zeroFill(ndate.getDay()) + '/' + zeroFill(ndate.getMonth()) + '/' + zeroFill(ndate.getFullYear());
682    return(odate);
683}
684
685MailArchiver.prototype.toExpressoHour = function(data){
686    var ndate = new Date(data);   
687    var ohour = zeroFill(ndate.getHours()) + ':' + zeroFill(ndate.getMinutes()) + ':' + zeroFill(ndate.getSeconds());
688    return(ohour);   
689}
690
691MailArchiver.prototype.toExpressoCC = function(data){
692    var tplCC =  "s:"+data.getCC().length+":\""+data.getCC()+"\";";
693    return(tplCC);
694}
695
696MailArchiver.prototype.toExpressoTo = function(data){
697    var tplTo =  "s:"+data.getTo().length+":\""+data.getTo()+"\";";
698    return(tplTo);
699}
700
701/**
702 *+           's:'+expresso_mail_archive.toExpressoDate(data.getDate()).length+':"'+expresso_mail_archive.toExpressoDate(data.getDate())+'";'
703+           's:7:"msg_day";'
704+           's:'+expresso_mail_archive.toExpressoDate(data.getDate()).length+':"'+expresso_mail_archive.toExpressoDate(data.getDate())+'";'
705+           's:8:"msg_hour";'
706+           's:'+expresso_mail_archive.toExpressoHour(data.getDate()).length+':"'+expresso_mail_archive.toExpressoHour(data.getDate())+'";'
707+           's:8:"fulldate";'
708+           's:'+(expresso_mail_archive.toExpressoDate(data.getDate()).length+expresso_mail_archive.toExpressoHour(data.getDate()).length+1)+':"'+expresso_mail_archive.toExpressoDate(data.getDate())+' '+expresso_mail_archive.toExpressoHour(data.getDate())+'";'
709+           's:9:"smalldate";'
710+           's:'+expresso_mail_archive.toExpressoDate(data.getDate()).length+':"'+expresso_mail_archive.toExpressoDate(data.getDate())+'";'
711+           's:8:"aux_date";'
712+           's:1:"N";'
713 */
714
715
716MailArchiver.prototype.toExpressoHeader = function(data){   
717    var tplHeader = 'a:16:{'
718+           's:11:"ContentType";'
719+           's:6:"normal";'
720+           's:10:"Importance";'
721+           's:6:"Normal";'
722+           's:6:"Recent";'
723+           's:1:" ";'
724+           's:6:"Unseen";'
725+           's:1:"N";'
726+           's:8:"Answered";'
727+           's:1:" ";'
728+           's:5:"Draft";'
729+           's:1:" ";'
730+           's:7:"Deleted";'
731+           's:1:" ";'
732+           's:7:"Flagged";'
733+           'b:0;'
734+           's:10:"msg_number";'
735+           's:'+data.getId().length+':"'+data.getId()+'";'
736+           's:4:"from";'
737+           expresso_mail_archive.toExpressoAddress(data.getFrom())
738+           's:2:"to";'
739+           expresso_mail_archive.toExpressoAddress(data.getTo())
740+           's:7:"subject";'
741+           's:'+data.getSubject().length+':"'+data.getSubject()+'";'
742+           's:4:"Size";'
743+           'i:'+data.getSize()+';'
744+           's:5:"udate";'
745+           's:10:"01/04/2011";'
746+           's:7:"msg_day";'
747+           's:10:"01/04/2011";'
748+           's:8:"msg_hour";'
749+           's:8:"01:01:59";'
750+           's:8:"fulldate";'
751+           's:19:"01/04/2011 01:01:59";'
752+           's:9:"smalldate";'
753+           's:10:"01/04/2011";'
754+           's:10:"attachment";'
755+           'a:2:{'
756+                   's:5:"names";'
757+                   'b:0;'
758+                   's:18:"number_attachments";'
759+                  'i:0;'
760+               '}'
761+           's:8:"aux_date";'
762+           's:10:"01/04/2011";'
763+           '}';
764    //window.alert('Expresso Header draw data = ' + tplHeader);
765    return(tplHeader);
766}
767
768MailArchiver.prototype.toExpressoMail = function(data){
769   
770}
771/*
772 *The all pourpose JavaScript variable, used by all related functionalityes at
773 *Expresso Mail to handle this object at user gui.
774 */
775
776var expresso_mail_archive;
777expresso_mail_archive = new MailArchiver();
Note: See TracBrowser for help on using the repository browser.