Statistics
| Branch: | Revision:

root / src / pithos / content / operations.js @ 68:0ec0b09ea126

History | View | Annotate | Download (23.2 kB)

1
// The Pithos File Manager Firefox Extension is funded by GRNET S.A.
2
// (http://www.grnet.gr)
3
//
4
// Copyright (c) 2009, Christos KK Loverdos, Vassilios Karakoidas.
5
// All rights reserved.
6
//
7
// Redistribution and use in source and binary forms, with or without
8
// modification, are permitted provided that the following conditions are
9
// met:
10
//
11
//   - Redistributions of source code must retain the above copyright
12
//     notice, this list of conditions and the following disclaimer.
13
//   - Redistributions in binary form must reproduce the above
14
//     copyright notice, this list of conditions and the following
15
//     disclaimer in the documentation and/or other materials provided
16
//     with the distribution.
17
//   - Neither the name of GRNET S.A. nor the names of its contributors
18
//     may be used to endorse or promote products derived from this
19
//     software without specific prior written permission.
20
//
21
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32

    
33
//////////////////////////////////// CREATE FOLDER //////////////////////////////////////////////////////////////
34

    
35
function create_folder_event() {
36
        var new_directory = window.prompt("Enter the directory name:", "");
37
        var source_directory = pithos_object.getSourceCurrentDirectory();
38
        if (new_directory == null) {
39
                promptAlert('Directory creation canceled');
40
                return;
41
        } else {
42
                if( create_folder(source_directory, new_directory) ) {
43
                        promptAlert(source_directory + new_directory + ' - created');
44
                        pithos_object.refreshLists();
45
                } else {
46
                        promptAlert(source_directory + new_directory + ' - Directory creation failed');
47
                }
48
        }
49
}
50

    
51
function create_folder(uri, new_directory) {
52
        if ( vfs.isRemoteResource(uri) ) {
53
                var req = connection_obj.rest_request_post(uri, '?new=' + encodeURIComponent(new_directory), '');
54
                return (connection_obj.success(req.status));
55
        } else if ( vfs.isLocalResource(uri) ) {
56
                try {
57
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
58
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
59
                        file.initWithPath(uri);
60
                        file.append(new_directory);
61
                        if( !file.exists() || !file.isDirectory() ) {   
62
                                // if it doesn't exist, create
63
                                   file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777);
64
                                return true;
65
                        }
66
                } catch(error) {
67
                        return false;
68
                }
69
        }
70
}
71

    
72
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
73

    
74
/////////////////////////////////////////////// COPY ////////////////////////////////////////////////////////////////////
75

    
76
function copy_event() {
77
        var sources = pithos_object.getSelectedResources();
78
        var destination = pithos_object.getDestinationCurrentDirectory();
79
    var copied = 0;
80
        
81
        if (sources.length == 0) {
82
                promptAlert('No Files/Folders are selected');
83
                return;
84
        }
85
        
86
        if ( sources.length > 1 ) {
87
                promptAlert('Copy ' + sources.length + ' items to ' + destination);
88
        } else if (sources.length == 1) {
89
        promptAlert('Copy ' + sources[0] + ' to ' + destination);
90
    }
91
        
92
        for ( i = 0; i < sources.length; i++ ) {
93
        if ( vfs.isDirectory(sources[i]) ) {
94
            promptAlert('Copy of directories is not supported! Operation Canceled.');
95
            return;
96
        }
97
        }
98
        
99
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
100
        window.openDialog("dialogs/operation_dialog.xul", "Copy Files", "chrome,resizable,centerscreen,window", "copy", sources, destination, pithos_object);
101
        
102
    pithos_object.refreshLists();
103
}
104

    
105
function copy(source, destination,params) {
106
        var source_metadata = vfs.getResourceMetadata(source);
107

    
108
        // server side
109
        if ( vfs.isRemoteResource(source) && vfs.isRemoteResource(destination) ) {
110
                var destinationFile = destination + source_metadata.name;
111
                var req = connection_obj.rest_request_post(source, '?copy=' + destinationFile, '');
112
        if ( req == null ) {
113
            return false;
114
        }
115
        
116
                return connection_obj.success(req.status);
117
        } else if ( vfs.isLocalResource(source) && vfs.isRemoteResource(destination) ) {
118
                // Upload from local to remote
119
                data = '';
120
        var req = connection_obj.rest_request_put_upload_async(source, destination + source_metadata.name, data, mimes.getByExtension(source_metadata.name),params);
121
                current_request = req;
122
                // Do not return anything as this is an async event
123
        //return connection_obj.success(req.status);
124
        } else if ( vfs.isRemoteResource(source) && vfs.isLocalResource(destination) ) {
125
                // Download from remote to local
126
        if ( vfs.isRemoteResource(source) ) {
127
            var req = connection_obj.rest_request_get_inline_async(source,params,destination);
128
                        current_request = req;
129
                        // Do not return anything as this is an async event                
130
        } else if ( vfs.isLocalResource(source) ) {
131
            return loadBinaryFile(source);
132
        }
133
                
134
        } else if ( vfs.isLocalResource(source) && vfs.isLocalResource(destination) ) {
135
                try {
136
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
137
                        var source_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
138
                        source_file.initWithPath(source);
139
            
140
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
141
                        var destination_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
142
                        destination_file.initWithPath(destination);
143
            
144
                        source_file.copyTo(destination_file, null);
145
                        
146
                        return true;
147
                } catch (e) {
148
                        return false;
149
                }                
150
        }
151
        
152
        return false;
153
}
154

    
155
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
156

    
157
////////////////////////////////////////////////////////// MOVE ////////////////////////////////////////////////////////////////
158

    
159
function move_event() {
160
        var sources = pithos_object.getSelectedResources();
161
        var destination = pithos_object.getDestinationCurrentDirectory();
162
        
163
        if (sources.length == 0) {
164
                promptAlert('No Files/Folders are selected');
165
                return;
166
        }
167
        
168
        for ( i = 0; i < sources.length; i++ ) {
169
        if ( vfs.isDirectory(sources[i]) ) {
170
            promptAlert('Moving directories is not supported!');
171
            continue;
172
        }
173

    
174
        }
175
        
176
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
177
        window.openDialog("dialogs/operation_dialog.xul", "Move Files", "chrome,resizable,centerscreen,window, window", "move", sources, destination,pithos_object);        
178

    
179
    pithos_object.refreshLists();
180
}
181

    
182
function move(source, destination) {
183
        if ( vfs.isRemoteResource(source) && vfs.isRemoteResource(destination)) {
184
                var destinationFile = destination + source_metadata.name;
185
                var req = connection_obj.rest_request_post(source, '?move=' + destinationFile, '');
186

    
187
                return connection_obj.success(req.status);        
188
        } else if ( vfs.isLocalResource(source) && vfs.isLocalResource(destination) ) {
189
        try {
190
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
191
            var source_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
192
            source_file.initWithPath(source);
193

    
194
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
195
            var destination_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
196
            destination_file.initWithPath(destination);
197

    
198
            source_file.moveTo(destination_file, null);
199

    
200
            return true;
201
        } catch (e) {
202
            return false;
203
        }
204
        } else if ( !copy(source, destination) ) {
205
                return false;
206
        }
207
        
208
        return delete_resource(source);
209
}
210

    
211
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
212

    
213
////////////////////////////////////////////////////// DELETE /////////////////////////////////////////////////////////////////////
214

    
215
function delete_all_async(uris) {
216
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
217
        window.openDialog("dialogs/operation_dialog.xul", "Delete Files", "chrome,resizable,centerscreen,window, modal", "delete_all", uris);
218
        pithos_object.refreshLists();    
219
}
220

    
221
function delete_context_menu(uri) {
222
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
223
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
224
        var result = prompt.confirm(window, "Confirm action", "Delete " + uri + "?");
225
        if ( result ) {
226
                if ( !delete_resource(uri) ) {
227
                        promptAlert('Cannot delete ' + uri);
228
                        return;
229
                }
230
        } else {
231
                promptAlert('Action canceled');
232
                return;
233
        }
234
        pithos_object.refreshLists();
235
}
236

    
237
function delete_event() {
238
        var resources = pithos_object.getSelectedResources();
239
        
240
        if (resources.length == 0) {
241
                promptAlert('No File/Directory is selected');
242
                return;
243
        }
244
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
245
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
246
        var result = prompt.confirm(window, "Confirm action", "You are going to delete the " + resources.length + " item(s). Proceed?");
247
        
248
        if (result) {
249
                for (i = 0; i < resources.length; i++) {
250
                        var b = delete_resource(resources[i]);
251
                        if (!b) {
252
                                b = prompt.confirm(window, "Failed!", "Deletion of " + resources[i] + " failed. Continue?");
253
                                if (!b) {
254
                                        promptAlert('Action canceled');
255
                                        return;
256
                                }
257
                        }
258
                }
259
        } else {
260
                promptAlert('Action canceled');
261
                return;
262
        }
263
        promptAlert('Removed ' + resources.length + ' items.');
264
        pithos_object.refreshLists();
265
}
266

    
267
function delete_context_menu_trash(uri) {
268
    if(promptBox('Realy delete ' + uri)) {
269
        if ( delete_resource(uri) ) {
270
            promptAlert(uri + ' purged');
271
        }
272
    } else {
273
        promptAlert('Purge canceled');
274
    }
275
        pithos_object.refreshLists();
276
}
277

    
278
function delete_resource(uri) {
279
        if ( vfs.isRemoteResource(uri) ) {
280
                var req = connection_obj.rest_request_delete(uri, '?trash=', '');
281
                return connection_obj.success(req.status);
282
        } else if ( vfs.isLocalResource(uri) ) {
283
                try {
284
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
285
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
286
                        file.initWithPath(uri);
287
                        file.remove(true);
288
            
289
                        return true;
290
                } catch (e) {
291
                        return false;
292
                }
293
        }
294
        
295
        return false;
296
}
297

    
298
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
299

    
300
//////////////////////////////////////////////////////////////// MOVE TO TRASH /////////////////////////////////////////////////////////////////
301

    
302
function movetotrash_context_menu_multiple(uris) {
303
    var result = promptBox("Delete " + uris.length + " item(s)?");
304
    if ( result ) {
305
        for (var i = 0; i < uris.length; i++) {
306
            if ( !movetotrash_resource(uris[i]) ) {
307
                if(!promptBox('Cannot move to trash ' + uris[i]) + '. Continue?') {
308
                    promptAlert('Action canceled');
309
                    break;
310
                }
311
            }
312
        }
313
    } else {
314
        promptAlert('Action canceled');
315
        return;
316
    }
317
    pithos_object.refreshLists();
318
}
319

    
320
function movetotrash_context_menu(uri) {
321
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
322
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
323
        var result = prompt.confirm(window, "Confirm action", "Delete " + uri + "?");
324
        if ( result ) {
325
                if ( !movetotrash_resource(uri) ) {
326
                        promptAlert('Cannot delete ' + uri);
327
                        return;
328
                }
329
        } else {
330
                promptAlert('Action canceled');
331
                return;
332
        }
333
        pithos_object.refreshLists();
334
}
335

    
336
function movetotrash_resource(uri) {
337
        if ( vfs.isRemoteResource(uri) ) {
338
                var req = connection_obj.rest_request_post(uri, '?trash=', '');
339
                return connection_obj.success(req.status);
340
        } else if ( vfs.isLocalResource(uri) ) {
341
                try {
342
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
343
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
344
                        file.initWithPath(uri);
345
                        file.remove(true);
346
                                                
347
                        return true;
348
                } catch (e) {
349
                        return false;
350
                }
351
        }
352
        
353
        return false;        
354
}
355

    
356
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
357

    
358
//////////////////////////////////////////////////////////// HOME EVENT ////////////////////////////////////////////////////////////////////////////
359

    
360
function home_event() {
361
        pithos_object.reInitLists();
362
}
363

    
364
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
365

    
366
/////////////////////////////////////////////////////////// SHARE ////////////////////////////////////////////////////////////////////////////////////
367

    
368
function share_event(source) {
369
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
370

    
371
        // Create a parameter list
372
        var params = { inp: source, out: null };
373
        
374
        window.openDialog("share/addshare.xul", "Share item", "chrome,dialog,resizable,centerscreen",params);
375
    connection_obj.get_shared_data();
376
        pithos_object.refreshLists();
377
}
378

    
379
function share_resource(source, permissions) {
380
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
381
        var ret = connection_obj.rest_request_post(source, '?update=', jsonToString(permissions));
382

    
383
        // if status not acceptable, return the status code (false scenario)
384
        if( !connection_obj.success(ret.status) ) {
385
            return (ret.status);
386
        } else {
387
            // remember to refresh the data
388
            return true;
389
        }
390
}
391

    
392
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
393

    
394
////////////////////////////////////////////////////// UNSHARE //////////////////////////////////////////////////////////////////////////////////////
395

    
396
function unshare_event(source) {
397
        // Example of source: http://pithos.grnet.gr/pithos/rest/aaitest@grnet-hq.admin.grnet.gr/files/Documents/
398
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
399

    
400
        // Get the metadata of the source
401
        var source_metadata = vfs.getResourceMetadata(source);
402
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
403

    
404
        // Get the file or folder name
405
        var itemname = source_metadata.name;
406
        var promptmessage = "Are you sure you want to unshare "+itemname+" from all users and groups?";
407
        var result = prompt.confirm(window, "Confirm action", promptmessage);
408
        
409
        if (result == true) {
410
                if ( unshare_resource(source) ) {
411
            connection_obj.get_shared_data();
412
            pithos_object.refreshLists();
413
        } else {
414
            promptAlert('Unshare failed');
415
        }
416
        } else {
417
                promptAlert('Unshare process canceled');
418
        }
419
}
420

    
421
function unshare_resource(source) {
422
        // trim the trailing slash ...
423
        source = source.replace(/\/$/,'');
424
        var ownFileObj = new Object();
425
        
426
        ownFileObj.readForAll = false;
427
        ownFileObj.permissions = new Array();
428
        
429
        var ownACL = new Object();
430
        
431
        ownACL.modifyACL = true;
432
        ownACL.write = true;
433
        ownACL.read = true;
434
        ownACL.user = connection_obj.username;
435

    
436
        ownFileObj.permissions.push(ownACL);
437

    
438
        var req = connection_obj.rest_request_post(source, '?update=', jsonToString(ownFileObj));
439
        return connection_obj.success(req.status);
440
}
441

    
442
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
443

    
444
////////////////////////////////////////////////////// TAGS //////////////////////////////////////////////////////////////////////////////////////
445

    
446
function modifytags_event(source){
447
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
448
        window.openDialog("tags/tags.xul", "Modify tags", "chrome,dialog,modal,resizable",source);
449
}
450

    
451
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
452

    
453
///////////////////////////////////////////////////////////////////// RENAME ///////////////////////////////////////////////////////////////////////////////
454

    
455
function rename_context_menu(uri) {
456
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
457
        var prompt = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
458
        var new_name = window.prompt("Enter the new name:", "");
459
        if ( new_name != null ) {
460
                if ( !rename_resource(uri, new_name) ) {
461
                        promptAlert('Cannot rename ' + uri + ' to ' + new_name);
462
                        return;
463
                }
464
        } else {
465
                promptAlert('Action canceled');
466
        }
467
        pithos_object.refreshLists();
468
}
469

    
470
function rename_resource(uri, new_name) {
471
        if ( vfs.isRemoteResource(uri) ) {
472
                var update = new Object();
473
                if ( vfs.isFile(uri) ) {
474
                        update.name = new_name;
475
                } else {
476
                        update.directoryName = new_name;
477
                }
478
                var req = connection_obj.rest_request_post(uri, '?update=', jsonToString(update));
479
                return (connection_obj.success(req.status));
480
        } else if ( vfs.isLocalResource(uri) ) {
481
                try {
482
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
483
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
484
                        file.initWithPath(uri);
485
                        file.moveTo(file.parent, new_name);
486
                                                
487
                        return true;
488
                } catch (e) {
489
                        return false;
490
                }                
491
        }
492
        
493
        return false;
494
}
495

    
496
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
497

    
498
//////////////////////////////////////////////////////////// LAUNCH ///////////////////////////////////////////////////////////////////////////////////////////
499

    
500
function launch_local_resource(uri) {
501
        if (  vfs.isLocalResource(uri) ) {
502
                try {
503
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
504
                        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
505
                        file.initWithPath(uri);
506
                        file.launch();
507
                                                
508
                        return true;
509
                } catch (e) {
510
                        return false;
511
                }                
512
        } else {
513
                alert('Cannot execute remote file!');
514
        }
515
}
516

    
517
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
518

    
519
/////////////////////////////////////////////////////////// VERSION /////////////////////////////////////////////////////////////////////////////////////
520

    
521
function enable_version_event(uri) {
522
    if ( vfs.isLocalResource(uri) ) {
523
        promptAlert('Cannot enable versioning in local files');
524
        return;
525
    }
526
    if ( enable_version_resource(uri) ) {
527
        promptAlert('File versioning is enabled');
528
    } else {
529
        promptAlert('Could not enable file versioning for ' + uri);
530
    }
531
}
532

    
533
function enable_version_resource(uri) {
534
    if ( vfs.isRemoteResource(uri) ) {
535
        var ownFileObj = new Object();
536
        ownFileObj.versioned = true;
537

    
538
        var req = connection_obj.rest_request_post(uri, '?update=', jsonToString(ownFileObj));
539
        return connection_obj.success(req.status);
540
    }
541

    
542
    return false;
543
}
544

    
545
function download_version_event(uri, current_version) {
546
    //var version = window.prompt("Download version:", current_version);
547
    var versions = new Array();
548
    var outChoice = new Object();
549

    
550
    for ( i = 0; i < current_version; i++ ) {
551
        versions.push(i + 1);
552
    }
553

    
554
    if (promptSelect('Open Resource', 'Download version:', versions, outChoice)) {
555
        var version_number = new Number(versions[outChoice.value]);
556
        if ( (version_number >= 1) && (version_number <= current_version) ) {
557
            var local_url = connection_obj.create_request_get(uri) + '&version=' + version_number;
558
            window.open(local_url);
559
        } else {
560
            promptAlert('Invalid version number (' + version_number + '). Available versions: 1 ... ' + current_version);
561
        }            
562
    } else {
563
        promptAlert('Action canceled');
564
    }
565
}
566

    
567
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
568

    
569
////////////////////////////////////////////////// UNDELETE ///////////////////////////////////////////////////////////////////////////////
570

    
571
function restore_context_menu_trash(uri) {
572
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
573

    
574
    var theuri = uri;
575
    var theobj = vfs.getResourceMetadata(theuri);
576

    
577
    // Set the metadata delete property to false (i.e. not deleted)
578
    theobj.deleted = false;
579

    
580
    var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
581
    var theitem_with_path = '';
582
    
583
    if (theobj.hasOwnProperty('directoryName')) {
584
        theitem_with_path = theobj.parentFolder + '/' + theobj.directoryName;
585
        theitem_with_path = theitem_with_path.replace(connection_obj.user_homepage().fileroot, "");
586
    } else {
587
        theitem_with_path = theobj.path + theobj.name;
588
    }
589

    
590
    if (prompts.confirm(window, "Confirm action", "Are you sure you want to restore " + theitem_with_path + ' ?')) {
591
        // trim the trailing slash ...
592
        theuri = theuri.replace(/\/$/,'');
593
        if (restore_resource(theuri)) {
594
            promptAlert(theuri + ' succesfully restored');
595
            pithos_object.refreshLists();
596
        } else {
597
            promptAlert('Restoration of ' + theuri + ' failed');
598
        }
599
    }
600
}
601

    
602
function restore_resource(uri) {
603
    var retcode = connection_obj.rest_request_post(uri,'?restore=', '');
604
    return connection_obj.success(retcode.status);
605
}
606

    
607

    
608
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////