mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-08-21 06:33:18 +00:00
Possibility to collapsed threads with persistance
This commit is contained in:
@@ -145,6 +145,85 @@
|
||||
return response;
|
||||
}
|
||||
|
||||
- (id) markMessageCollapseAction
|
||||
{
|
||||
NSMutableDictionary *moduleSettings, *threadsCollapsed;
|
||||
NSMutableArray *mailboxThreadsCollapsed;
|
||||
NSString *msguid, *currentMailbox, *currentAccount, *keyForMsgUIDs;
|
||||
SOGoUserSettings *us;
|
||||
us = [[context activeUser] userSettings];
|
||||
moduleSettings = [us objectForKey: @"Mail"];
|
||||
|
||||
msguid = [[self clientObject] nameInContainer];
|
||||
currentMailbox = [[[self clientObject] container] nameInContainer];
|
||||
currentAccount = [[[[self clientObject] container] container] nameInContainer];
|
||||
keyForMsgUIDs = [NSString stringWithFormat:@"/%@/%@", currentAccount, currentMailbox];
|
||||
|
||||
// Check if the module threadsCollapsed is created in the userSettings
|
||||
if ([moduleSettings objectForKey:@"threadsCollapsed"])
|
||||
{
|
||||
// Check if the currentMailbox already have other threads saved and add the new collapsed thread
|
||||
threadsCollapsed = [moduleSettings objectForKey:@"threadsCollapsed"];
|
||||
if ([threadsCollapsed objectForKey:keyForMsgUIDs])
|
||||
{
|
||||
mailboxThreadsCollapsed = [threadsCollapsed objectForKey:keyForMsgUIDs];
|
||||
if (![mailboxThreadsCollapsed containsObject:msguid])
|
||||
[mailboxThreadsCollapsed addObject:msguid];
|
||||
}
|
||||
else
|
||||
{
|
||||
mailboxThreadsCollapsed = [NSMutableArray arrayWithObject:msguid];
|
||||
[threadsCollapsed setObject:mailboxThreadsCollapsed forKey:keyForMsgUIDs];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Created the module threadsCollapsed and add the new collapsed thread
|
||||
mailboxThreadsCollapsed = [NSMutableArray arrayWithObject:msguid];
|
||||
threadsCollapsed = [NSMutableDictionary dictionaryWithObject:mailboxThreadsCollapsed forKey:keyForMsgUIDs];
|
||||
[moduleSettings setObject:threadsCollapsed forKey: @"threadsCollapsed"];
|
||||
}
|
||||
|
||||
[us synchronize];
|
||||
|
||||
return [self responseWith204];
|
||||
}
|
||||
|
||||
- (id) markMessageUncollapseAction
|
||||
{
|
||||
NSMutableDictionary *moduleSettings, *threadsCollapsed;
|
||||
NSMutableArray *mailboxThreadsCollapsed;
|
||||
NSString *msguid, *currentMailbox, *currentAccount, *keyForMsgUIDs;
|
||||
SOGoUserSettings *us;
|
||||
us = [[context activeUser] userSettings];
|
||||
moduleSettings = [us objectForKey: @"Mail"];
|
||||
|
||||
msguid = [[self clientObject] nameInContainer];
|
||||
currentMailbox = [[[self clientObject] container] nameInContainer];
|
||||
currentAccount = [[[[self clientObject] container] container] nameInContainer];
|
||||
keyForMsgUIDs = [NSString stringWithFormat:@"/%@/%@", currentAccount, currentMailbox];
|
||||
|
||||
// Check if the module threadsCollapsed is created in the userSettings
|
||||
if ([moduleSettings objectForKey:@"threadsCollapsed"])
|
||||
{
|
||||
// Check if the currentMailbox already have other threads saved and remove the uncollapsed thread
|
||||
threadsCollapsed = [moduleSettings objectForKey:@"threadsCollapsed"];
|
||||
if ([threadsCollapsed objectForKey:keyForMsgUIDs])
|
||||
{
|
||||
mailboxThreadsCollapsed = [threadsCollapsed objectForKey:keyForMsgUIDs];
|
||||
[mailboxThreadsCollapsed removeObject:msguid];
|
||||
|
||||
if ([mailboxThreadsCollapsed count] == 0)
|
||||
[threadsCollapsed removeObjectForKey:keyForMsgUIDs];
|
||||
|
||||
[us synchronize];
|
||||
}
|
||||
}
|
||||
// TODO : Manage errors
|
||||
|
||||
return [self responseWith204];
|
||||
}
|
||||
|
||||
/* SOGoDraftObject */
|
||||
- (WOResponse *) editAction
|
||||
{
|
||||
|
||||
@@ -252,6 +252,16 @@
|
||||
actionClass = "UIxMailActions";
|
||||
actionName = "forward";
|
||||
};
|
||||
markMessageUncollapse = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailActions";
|
||||
actionName = "markMessageUncollapse";
|
||||
};
|
||||
markMessageCollapse = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailActions";
|
||||
actionName = "markMessageCollapse";
|
||||
};
|
||||
markMessageUnflagged = {
|
||||
protectedBy = "View";
|
||||
actionClass = "UIxMailActions";
|
||||
|
||||
@@ -219,13 +219,16 @@ function openMessageWindowsForSelection(action, firstOnly) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
function mailListToggleMessageThread(row, cell) {
|
||||
var show = row.hasClassName('closedThread');
|
||||
var msguid = row.id.split("_")[1];
|
||||
var action = "markMessageCollapse";
|
||||
$(cell).down('img').remove();
|
||||
if (show) {
|
||||
row.removeClassName('closedThread');
|
||||
row.addClassName('openedThread');
|
||||
action = "markMessageUncollapse";
|
||||
var img = createElement("img", null, null, { src: ResourcesURL + '/arrow-down.png' });
|
||||
cell.insertBefore(img, cell.firstChild);
|
||||
}
|
||||
@@ -241,8 +244,23 @@ function mailListToggleMessageThread(row, cell) {
|
||||
else
|
||||
row.hide();
|
||||
}
|
||||
|
||||
// Update the dictionnary of the collapsed threads
|
||||
var mailbox = Mailer.currentMailbox;
|
||||
var url = ApplicationBaseURL + encodeURI(mailbox) + "/" + msguid + "/" + action;
|
||||
var data = { "currentMailbox": Mailer.currentMailbox, "msguid": msguid };
|
||||
|
||||
triggerAjaxRequest(url, mailListToggleMessageCollapseCallback);
|
||||
}
|
||||
*/
|
||||
|
||||
function mailListToggleMessageCollapseCallback(http) {
|
||||
var data = http.callbackData;
|
||||
if (!isHttpStatus204(http.status)) {
|
||||
log("Message Collapse Failed (" + http.status + "): " + http.statusText);
|
||||
}
|
||||
//Mailer.dataTable.invalidate(data["msguid"], true);
|
||||
}
|
||||
|
||||
|
||||
/* Triggered when clicking on the read/unread dot of a message row or
|
||||
* through the contextual menu. */
|
||||
@@ -929,6 +947,8 @@ function openMailbox(mailbox, reload) {
|
||||
/*
|
||||
* Called from SOGoDataTable.render()
|
||||
*/
|
||||
var show = false;
|
||||
|
||||
function messageListCallback(row, data, isNew) {
|
||||
var currentMessage = Mailer.currentMessages[Mailer.currentMailbox];
|
||||
row.id = data['rowID'];
|
||||
@@ -940,13 +960,31 @@ function messageListCallback(row, data, isNew) {
|
||||
if (data['uid'] == currentMessage)
|
||||
row.addClassName('_selected');
|
||||
|
||||
if (data['Thread'])
|
||||
row.addClassName('openedThread');
|
||||
if (data['Thread']) {
|
||||
if (UserSettings.Mail.threadsCollapsed) {
|
||||
var mailbox = Mailer.currentMailbox;
|
||||
var collapsedList = UserSettings.Mail.threadsCollapsed[mailbox];
|
||||
if (collapsedList != undefined && collapsedList.indexOf(row.id.split("_")[1]) != -1) {
|
||||
row.addClassName('closedThread');
|
||||
show = true;
|
||||
}
|
||||
else {
|
||||
row.addClassName('openedThread');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (data['ThreadLevel'] > 0) {
|
||||
if (data['ThreadLevel'] > 10) data['ThreadLevel'] = 10;
|
||||
row.addClassName('thread');
|
||||
row.addClassName('thread' + data['ThreadLevel']);
|
||||
|
||||
if (show)
|
||||
row.hide();
|
||||
}
|
||||
|
||||
else
|
||||
show = false;
|
||||
|
||||
var cells = row.childElements();
|
||||
for (var j = 0; j < cells.length; j++) {
|
||||
@@ -1222,7 +1260,7 @@ function onMessageSelectionChange(event) {
|
||||
t = t.parentNode;
|
||||
if (t.tagName == 'TD') {
|
||||
if (t.className == 'messageThreadColumn') {
|
||||
//mailListToggleMessageThread(t.parentNode, t); Disable thread collapsing
|
||||
mailListToggleMessageThread(t.parentNode, t);
|
||||
}
|
||||
else if (t.className == 'messageUnreadColumn') {
|
||||
mailListToggleMessagesRead(t.parentNode);
|
||||
|
||||
@@ -248,7 +248,6 @@ var SOGoDataTableInterface = {
|
||||
j++, i++) {
|
||||
var row = this.rowModel.cloneNode(true);
|
||||
this.rowRenderCallback(row, data[j], true);
|
||||
row.show();
|
||||
this.body.insertBefore(row, this.rowBottom);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,8 +196,13 @@ SOGoMailDataSource = Class.create({
|
||||
data[j] = this.cache.get(this.uids[i][0]);
|
||||
|
||||
// Add thread-related data
|
||||
if (parseInt(this.uids[i][2]) > 0)
|
||||
data[j]['Thread'] = ' '; //'<img class="messageThread" src="' + ResourcesURL + '/arrow-down.png">';
|
||||
if (parseInt(this.uids[i][2]) > 0) {
|
||||
var mailbox = Mailer.currentMailbox;
|
||||
if ((UserSettings.Mail.threadsCollapsed[Mailer.currentMailbox] != undefined) && (UserSettings.Mail.threadsCollapsed[Mailer.currentMailbox].indexOf((this.uids[i][0]).toString())) != -1)
|
||||
data[j]['Thread'] = '<img class="messageThread" src="' + ResourcesURL + '/arrow-right.png">';
|
||||
else
|
||||
data[j]['Thread'] = '<img class="messageThread" src="' + ResourcesURL + '/arrow-down.png">';
|
||||
}
|
||||
else if (data[j]['Thread'])
|
||||
delete data[j]['Thread'];
|
||||
if (parseInt(this.uids[i][1]) > -1)
|
||||
|
||||
Reference in New Issue
Block a user