1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/* global Promise */
/**
* Mail
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @copyright Christoph Wurst 2015, 2017
*/
define(function(require) {
'use strict';
var $ = require('jquery');
var OC = require('OC');
var Radio = require('radio');
Radio.account.reply('create', createAccount);
Radio.account.reply('entities', getAccountEntities);
Radio.account.reply('delete', deleteAccount);
function createAccount(config) {
return new Promise(function(resolve, reject) {
$.ajax(OC.generateUrl('apps/mail/accounts'), {
data: config,
type: 'POST',
success: function() {
resolve();
},
error: function(jqXHR, textStatus, errorThrown) {
switch (jqXHR.status) {
case 400:
var response = JSON.parse(jqXHR.responseText);
reject(response.message);
break;
default:
var error = errorThrown || textStatus || t('mail', 'Unknown error');
reject(t('mail', 'Error while creating an account: ' + error));
}
}
});
});
}
/**
* @private
* @returns {Promise}
*/
function loadAccountData() {
var $serialized = $('#serialized-accounts');
var accounts = require('state').accounts;
if ($serialized.val() !== '') {
var serialized = $serialized.val();
var serialzedAccounts = JSON.parse(atob(serialized));
accounts.reset();
for (var i = 0; i < serialzedAccounts.length; i++) {
accounts.add(serialzedAccounts[i]);
}
$serialized.val('');
return Promise.resolve(accounts);
}
return new Promise(function(resolve, reject) {
accounts.fetch({
success: function() {
// fetch resolves the Promise with the raw data returned by
// the ajax call. Since we want the Backbone models, we have
// to 'convert' the response here.
resolve(accounts);
},
error: reject
});
});
}
function getAccountEntities() {
return loadAccountData().then(function(accounts) {
require('cache').cleanUp(accounts);
if (accounts.length > 1) {
accounts.add({
accountId: -1
}, {
at: 0
});
}
return accounts;
});
}
/**
* @param {Account} account
* @returns {Promise}
*/
function deleteAccount(account) {
var url = OC.generateUrl('/apps/mail/accounts/{accountId}', {
accountId: account.get('accountId')
});
return Promise.resolve($.ajax(url, {
type: 'DELETE'
})).then(function() {
// Delete cached message lists
require('cache').removeAccount(account);
});
}
return {
createAccount: createAccount
};
});
|