Skip to content
This repository was archived by the owner on Nov 8, 2018. It is now read-only.

Commit bec1687

Browse files
committed
Merge pull request #1505 from owncloud/traverse-folders-correctly
traverse folders correctly when searching by folder id
2 parents 1f8f38a + 2c03c15 commit bec1687

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

js/models/account.js

+35
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,41 @@ define(function(require) {
2727
initialize: function() {
2828
this.set('folders', new FolderCollection(this.get('folders')));
2929
},
30+
_getFolderByIdRecursively: function(folder, folderId) {
31+
if (!folder) {
32+
return null;
33+
}
34+
35+
if (folder.get('id') === folderId) {
36+
return folder;
37+
}
38+
39+
var subFolders = folder.get('folders');
40+
if (!subFolders) {
41+
return null;
42+
}
43+
for (var i = 0; i < subFolders.length; i++) {
44+
var subFolder = this._getFolderByIdRecursively(subFolders.at(i), folderId);
45+
if (subFolder) {
46+
return subFolder;
47+
}
48+
}
49+
50+
return null;
51+
},
52+
getFolderById: function(folderId) {
53+
var folders = this.get('folders');
54+
if (!folders) {
55+
return null;
56+
}
57+
for (var i = 0; i < folders.length; i++) {
58+
var result = this._getFolderByIdRecursively(folders.at(i), folderId);
59+
if (result) {
60+
return result;
61+
}
62+
}
63+
return null;
64+
},
3065
toJSON: function() {
3166
var data = Backbone.Model.prototype.toJSON.call(this);
3267
if (data.folders && data.folders.toJSON) {

js/routecontroller.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,15 @@ define(function(require) {
102102
var account = this.accounts.get(accountId);
103103
if (_.isUndefined(account)) {
104104
// Unknown account id -> redirect
105+
Radio.ui.trigger('error:show', t('mail', 'Invalid account'));
105106
_this.default();
106107
return;
107108
}
108109

109-
var folder = account.get('folders').get(folderId);
110+
var folder = account.getFolderById(folderId);
110111
if (_.isUndefined(folder)) {
111112
folder = account.get('folders').at(0);
113+
Radio.ui.trigger('error:show', t('mail', 'Invalid folder'));
112114
this._navigate('accounts/' + accountId + '/folders/' + folder.get('id'));
113115
}
114116
FolderController.showFolder(account, folder, noSelect);

js/views/composer.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ define(function(require) {
306306

307307
if (this.isReply()) {
308308
options.messageId = this.messageId;
309-
options.folder = this.account.get('folders').get(this.folderId);
309+
options.folder = this.account.getFolderById(this.folderId);
310310
}
311311

312312
var sendingMessage = Radio.message.request('send', this.account, this.getMessage(), options);
@@ -376,7 +376,7 @@ define(function(require) {
376376
// send the mail
377377
var _this = this;
378378
var savingDraft = Radio.message.request('draft', this.account, this.getMessage(), {
379-
folder: this.account.get('folders').get(this.folderId),
379+
folder: this.account.getFolderById(this.folderId),
380380
messageId: this.messageId,
381381
draftUID: this.draftUID
382382
});

0 commit comments

Comments
 (0)