Statistics
| Branch: | Revision:

root / src / pithos / content / operations.js @ 71:7dde618cb775

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
        } else if ( vfs.isLocalResource(source) && vfs.isLocalResource(destination) ) {
134
                try {
135
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
136
                        var source_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
137
                        source_file.initWithPath(source);
138
            
139
                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalFileRead UniversalBrowserRead");
140
                        var destination_file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
141
                        destination_file.initWithPath(destination);
142
            
143
                        source_file.copyTo(destination_file, null);
144
                        
145
                        return true;
146
                } catch (e) {
147
                        return false;
148
                }                
149
        }
150
        
151
        return false;
152
}
153

    
154
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
155

    
156
////////////////////////////////////////////////////////// MOVE ////////////////////////////////////////////////////////////////
157

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

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

    
178
    pithos_object.refreshLists();
179
}
180

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

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

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

    
197
            source_file.moveTo(destination_file, null);
198

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

    
210
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
211

    
212
////////////////////////////////////////////////////// DELETE /////////////////////////////////////////////////////////////////////
213

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

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

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

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

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

    
297
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
298

    
299
//////////////////////////////////////////////////////////////// MOVE TO TRASH /////////////////////////////////////////////////////////////////
300

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

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

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

    
355
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
356

    
357
//////////////////////////////////////////////////////////// HOME EVENT ////////////////////////////////////////////////////////////////////////////
358

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

    
363
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
364

    
365
/////////////////////////////////////////////////////////// SHARE ////////////////////////////////////////////////////////////////////////////////////
366

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

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

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

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

    
391
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
392

    
393
////////////////////////////////////////////////////// UNSHARE //////////////////////////////////////////////////////////////////////////////////////
394

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

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

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

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

    
435
        ownFileObj.permissions.push(ownACL);
436

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

    
441
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
442

    
443
////////////////////////////////////////////////////// TAGS //////////////////////////////////////////////////////////////////////////////////////
444

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

    
450
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
451

    
452
///////////////////////////////////////////////////////////////////// RENAME ///////////////////////////////////////////////////////////////////////////////
453

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

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

    
495
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
496

    
497
//////////////////////////////////////////////////////////// LAUNCH ///////////////////////////////////////////////////////////////////////////////////////////
498

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

    
516
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
517

    
518
/////////////////////////////////////////////////////////// VERSION /////////////////////////////////////////////////////////////////////////////////////
519

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

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

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

    
541
    return false;
542
}
543

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

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

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

    
566
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
567

    
568
////////////////////////////////////////////////// UNDELETE ///////////////////////////////////////////////////////////////////////////////
569

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

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

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

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

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

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

    
606

    
607
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////