OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 'use strict'; | 5 'use strict'; |
6 | 6 |
7 /** | 7 /** |
8 * Global (placed in the window object) variable name to hold internal | 8 * Global (placed in the window object) variable name to hold internal |
9 * file dragging information. Needed to show visual feedback while dragging | 9 * file dragging information. Needed to show visual feedback while dragging |
10 * since DataTransfer object is in protected state. Reachable from other | 10 * since DataTransfer object is in protected state. Reachable from other |
11 * file manager instances. | 11 * file manager instances. |
12 */ | 12 */ |
13 var DRAG_AND_DROP_GLOBAL_DATA = '__drag_and_drop_global_data'; | 13 var DRAG_AND_DROP_GLOBAL_DATA = '__drag_and_drop_global_data'; |
14 | 14 |
15 /** | 15 /** |
16 * @param {HTMLDocument} doc Owning document. | 16 * @param {HTMLDocument} doc Owning document. |
17 * @param {FileOperationManager} fileOperationManager File operation manager | 17 * @param {FileOperationManager} fileOperationManager File operation manager |
18 * instance. | 18 * instance. |
19 * @param {MetadataCache} metadataCache Metadata cache service. | 19 * @param {MetadataCache} metadataCache Metadata cache service. |
20 * @param {DirectoryModel} directoryModel Directory model instance. | 20 * @param {DirectoryModel} directoryModel Directory model instance. |
21 * @param {VolumeManagerWrapper} volumeManager Volume manager instance. | 21 * @param {VolumeManagerWrapper} volumeManager Volume manager instance. |
22 * @param {MultiProfileShareDialog} multiProfileShareDialog Share dialog to be | 22 * @param {MultiProfileShareDialog} multiProfileShareDialog Share dialog to be |
23 * used to share files from another profile. | 23 * used to share files from another profile. |
hirono
2014/09/16 08:12:56
Please update JSDoc.
iseki
2014/09/16 08:44:21
Done.
| |
24 * @constructor | 24 * @constructor |
25 */ | 25 */ |
26 function FileTransferController(doc, | 26 function FileTransferController(doc, |
27 fileOperationManager, | 27 fileOperationManager, |
28 metadataCache, | 28 metadataCache, |
29 directoryModel, | 29 directoryModel, |
30 volumeManager, | 30 volumeManager, |
31 multiProfileShareDialog) { | 31 multiProfileShareDialog, |
32 progressCenter) { | |
32 this.document_ = doc; | 33 this.document_ = doc; |
33 this.fileOperationManager_ = fileOperationManager; | 34 this.fileOperationManager_ = fileOperationManager; |
34 this.metadataCache_ = metadataCache; | 35 this.metadataCache_ = metadataCache; |
35 this.directoryModel_ = directoryModel; | 36 this.directoryModel_ = directoryModel; |
36 this.volumeManager_ = volumeManager; | 37 this.volumeManager_ = volumeManager; |
37 this.multiProfileShareDialog_ = multiProfileShareDialog; | 38 this.multiProfileShareDialog_ = multiProfileShareDialog; |
39 this.progressCenter_ = progressCenter; | |
38 | 40 |
39 this.directoryModel_.getFileList().addEventListener( | 41 this.directoryModel_.getFileList().addEventListener( |
40 'change', function(event) { | 42 'change', function(event) { |
41 if (this.directoryModel_.getFileListSelection(). | 43 if (this.directoryModel_.getFileListSelection(). |
42 getIndexSelected(event.index)) { | 44 getIndexSelected(event.index)) { |
43 this.onSelectionChanged_(); | 45 this.onSelectionChanged_(); |
44 } | 46 } |
45 }.bind(this)); | 47 }.bind(this)); |
46 this.directoryModel_.getFileListSelection().addEventListener('change', | 48 this.directoryModel_.getFileListSelection().addEventListener('change', |
47 this.onSelectionChanged_.bind(this)); | 49 this.onSelectionChanged_.bind(this)); |
48 | 50 |
49 /** | 51 /** |
52 * The array of pending task id. | |
53 * @type {Array.<string>} | |
54 */ | |
55 this.pendingTaskId = []; | |
hirono
2014/09/16 08:12:56
nit: pendingTaskIDs ?
iseki
2014/09/16 08:44:21
Done.
| |
56 | |
57 /** | |
50 * Promise to be fulfilled with the thumbnail image of selected file in drag | 58 * Promise to be fulfilled with the thumbnail image of selected file in drag |
51 * operation. Used if only one element is selected. | 59 * operation. Used if only one element is selected. |
52 * @type {Promise} | 60 * @type {Promise} |
53 * @private | 61 * @private |
54 */ | 62 */ |
55 this.preloadedThumbnailImagePromise_ = null; | 63 this.preloadedThumbnailImagePromise_ = null; |
56 | 64 |
57 /** | 65 /** |
58 * File objects for selected files. | 66 * File objects for selected files. |
59 * | 67 * |
60 * @type {Array.<File>} | 68 * @type {Array.<File>} |
61 * @private | 69 * @private |
62 */ | 70 */ |
63 this.selectedFileObjects_ = []; | 71 this.selectedFileObjects_ = []; |
64 | 72 |
65 /** | 73 /** |
66 * Drag selector. | 74 * Drag selector. |
67 * @type {DragSelector} | 75 * @type {DragSelector} |
68 * @private | 76 * @private |
69 */ | 77 */ |
70 this.dragSelector_ = new DragSelector(); | 78 this.dragSelector_ = new DragSelector(); |
71 | 79 |
72 /** | 80 /** |
73 * Whether a user is touching the device or not. | 81 * Whether a user is touching the device or not. |
74 * @type {boolean} | 82 * @type {boolean} |
75 * @private | 83 * @private |
76 */ | 84 */ |
77 this.touching_ = false; | 85 this.touching_ = false; |
86 | |
87 /** | |
88 * Task id counter. | |
89 * @type {int} | |
hirono
2014/09/16 08:12:56
We don't use int. Instead, please use number.
iseki
2014/09/16 08:44:21
Done.
| |
90 * @private | |
91 */ | |
92 this.taskIdCounter_ = 0; | |
78 } | 93 } |
79 | 94 |
80 /** | 95 /** |
81 * Size of drag thumbnail for image files. | 96 * Size of drag thumbnail for image files. |
82 * | 97 * |
83 * @type {number} | 98 * @type {number} |
84 * @const | 99 * @const |
85 * @private | 100 * @private |
86 */ | 101 */ |
87 FileTransferController.DRAG_THUMBNAIL_SIZE_ = 64; | 102 FileTransferController.DRAG_THUMBNAIL_SIZE_ = 64; |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
326 // work fine. | 341 // work fine. |
327 var effectAllowed = dataTransfer.effectAllowed !== 'uninitialized' ? | 342 var effectAllowed = dataTransfer.effectAllowed !== 'uninitialized' ? |
328 dataTransfer.effectAllowed : dataTransfer.getData('fs/effectallowed'); | 343 dataTransfer.effectAllowed : dataTransfer.getData('fs/effectallowed'); |
329 var toMove = util.isDropEffectAllowed(effectAllowed, 'move') && | 344 var toMove = util.isDropEffectAllowed(effectAllowed, 'move') && |
330 (!util.isDropEffectAllowed(effectAllowed, 'copy') || | 345 (!util.isDropEffectAllowed(effectAllowed, 'copy') || |
331 opt_effect === 'move'); | 346 opt_effect === 'move'); |
332 var destinationEntry = | 347 var destinationEntry = |
333 opt_destinationEntry || this.currentDirectoryContentEntry; | 348 opt_destinationEntry || this.currentDirectoryContentEntry; |
334 var entries; | 349 var entries; |
335 var failureUrls; | 350 var failureUrls; |
351 var taskId = this.generateTaskId_(); | |
336 | 352 |
337 util.URLsToEntries(sourceURLs). | 353 util.URLsToEntries(sourceURLs). |
338 then(function(result) { | 354 then(function(result) { |
355 this.pendingTaskId.push(taskId); | |
339 entries = result.entries; | 356 entries = result.entries; |
340 failureUrls = result.failureUrls; | 357 failureUrls = result.failureUrls; |
358 var item = new ProgressCenterItem(); | |
359 item.id = taskId; | |
360 item.type = ProgressItemType.COPY; | |
361 item.message = strf('CHECK_FILES_ARE_SHARED'); | |
362 this.progressCenter_.updateItem(item); | |
341 // Check if cross share is needed or not. | 363 // Check if cross share is needed or not. |
342 return this.getMultiProfileShareEntries_(entries); | 364 return this.getMultiProfileShareEntries_(entries); |
343 }.bind(this)). | 365 }.bind(this)). |
344 then(function(shareEntries) { | 366 then(function(shareEntries) { |
345 if (shareEntries.length === 0) | 367 if (shareEntries.length === 0) |
346 return; | 368 return; |
347 return this.multiProfileShareDialog_.show(shareEntries.length > 1). | 369 return this.multiProfileShareDialog_.show(shareEntries.length > 1). |
348 then(function(dialogResult) { | 370 then(function(dialogResult) { |
349 if (dialogResult === 'cancel') | 371 if (dialogResult === 'cancel') |
350 return Promise.reject('ABORT'); | 372 return Promise.reject('ABORT'); |
(...skipping 11 matching lines...) Expand all Loading... | |
362 fulfill(); | 384 fulfill(); |
363 }); | 385 }); |
364 }).then(requestDriveShare.bind(null, index + 1)); | 386 }).then(requestDriveShare.bind(null, index + 1)); |
365 }; | 387 }; |
366 return requestDriveShare(0); | 388 return requestDriveShare(0); |
367 }); | 389 }); |
368 }.bind(this)). | 390 }.bind(this)). |
369 then(function() { | 391 then(function() { |
370 // Start the pasting operation. | 392 // Start the pasting operation. |
371 this.fileOperationManager_.paste( | 393 this.fileOperationManager_.paste( |
372 entries, destinationEntry, toMove); | 394 entries, destinationEntry, toMove, taskId); |
395 this.pendingTaskId.splice(this.pendingTaskId.find(taskId), 1); | |
hirono
2014/09/16 08:12:56
Array does not have 'find' method.
iseki
2014/09/16 08:44:21
Done.
| |
373 | 396 |
374 // Publish events for failureUrls. | 397 // Publish events for failureUrls. |
375 for (var i = 0; i < failureUrls.length; i++) { | 398 for (var i = 0; i < failureUrls.length; i++) { |
376 var fileName = | 399 var fileName = |
377 decodeURIComponent(failureUrls[i].replace(/^.+\//, '')); | 400 decodeURIComponent(failureUrls[i].replace(/^.+\//, '')); |
378 var event = new Event('source-not-found'); | 401 var event = new Event('source-not-found'); |
379 event.fileName = fileName; | 402 event.fileName = fileName; |
380 event.progressType = | 403 event.progressType = |
381 toMove ? ProgressItemType.MOVE : ProgressItemType.COPY; | 404 toMove ? ProgressItemType.MOVE : ProgressItemType.COPY; |
382 this.dispatchEvent(event); | 405 this.dispatchEvent(event); |
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1061 destinationLocationInfo.volumeInfo.fileSystem.root.toURL() && | 1084 destinationLocationInfo.volumeInfo.fileSystem.root.toURL() && |
1062 !event.ctrlKey) { | 1085 !event.ctrlKey) { |
1063 return 'move'; | 1086 return 'move'; |
1064 } | 1087 } |
1065 if (event.shiftKey) { | 1088 if (event.shiftKey) { |
1066 return 'move'; | 1089 return 'move'; |
1067 } | 1090 } |
1068 } | 1091 } |
1069 return 'copy'; | 1092 return 'copy'; |
1070 }, | 1093 }, |
1094 | |
1095 /** | |
1096 * Generates new task ID. | |
1097 * | |
1098 * @return {string} New task ID. | |
1099 * @private | |
1100 */ | |
1101 generateTaskId_: function() { | |
1102 return 'file-operation-from-transfer-controller' + this.taskIdCounter_++; | |
1103 }, | |
1071 }; | 1104 }; |
OLD | NEW |