blob: d33859aee60b54433bdb55a34dffec9fbceede82 [file] [log] [blame]
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
=======
>>>>>>> remove both of gwt-representer and gwt-dispatch dependencies, add license headers to all new files
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.hupa.client.activity;
import java.util.ArrayList;
import java.util.List;
<<<<<<< HEAD
<<<<<<< HEAD
=======
>>>>>>> fix the main part of issue 11 - delete selected messages.
import java.util.Set;
import org.apache.hupa.client.activity.MessageSendActivity.Type;
import org.apache.hupa.client.place.FolderPlace;
<<<<<<< HEAD
import org.apache.hupa.client.place.MessageSendPlace;
import org.apache.hupa.client.rf.DeleteMessageAllRequest;
import org.apache.hupa.client.rf.DeleteMessageByUidRequest;
import org.apache.hupa.client.rf.MoveMessageRequest;
import org.apache.hupa.client.rf.SetFlagRequest;
import org.apache.hupa.client.ui.MessagesCellTable;
import org.apache.hupa.client.widgets.HasDialog;
import org.apache.hupa.shared.data.MessageImpl.IMAPFlag;
import org.apache.hupa.shared.domain.DeleteMessageAllAction;
import org.apache.hupa.shared.domain.DeleteMessageByUidAction;
import org.apache.hupa.shared.domain.DeleteMessageResult;
import org.apache.hupa.shared.domain.GenericResult;
import org.apache.hupa.shared.domain.ImapFolder;
import org.apache.hupa.shared.domain.Message;
import org.apache.hupa.shared.domain.MoveMessageAction;
import org.apache.hupa.shared.domain.SetFlagAction;
import org.apache.hupa.shared.domain.User;
import org.apache.hupa.shared.events.DecreaseUnseenEvent;
import org.apache.hupa.shared.events.FolderSelectionEvent;
import org.apache.hupa.shared.events.FolderSelectionEventHandler;
import org.apache.hupa.shared.events.IncreaseUnseenEvent;
import org.apache.hupa.shared.events.LoadMessagesEvent;
import org.apache.hupa.shared.events.LogoutEvent;
import org.apache.hupa.shared.events.LogoutEventHandler;
import org.apache.hupa.shared.events.MessagesReceivedEvent;
import org.apache.hupa.shared.events.MessagesReceivedEventHandler;
import org.apache.hupa.shared.events.MoveMessageEvent;
import org.apache.hupa.shared.events.MoveMessageEventHandler;
import org.apache.hupa.widgets.ui.HasEnable;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.web.bindery.requestfactory.shared.Receiver;
public class IMAPMessageListActivity extends AppBaseActivity {
@Override
public void start(AcceptsOneWidget container, EventBus eventBus) {
bind();
revealDisplay(user, folder, searchValue);
container.setWidget(display.asWidget());
}
private void bind() {
eventBus.addHandler(LogoutEvent.TYPE, new LogoutEventHandler() {
public void onLogout(LogoutEvent logoutEvent) {
IMAPMessageListActivity.this.display.reset();
IMAPMessageListActivity.this.display.getSearchValue().setValue("");
}
});
eventBus.addHandler(MessagesReceivedEvent.TYPE, new MessagesReceivedEventHandler() {
public void onMessagesReceived(MessagesReceivedEvent event) {
// fill the oracle
display.fillSearchOracle(event.getMessages());
}
});
registrations.add(display.getSearchClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String searchValue = null;
if (display.getSearchValue().getValue().trim().length() > 0) {
searchValue = display.getSearchValue().getValue().trim();
}
eventBus.fireEvent(new LoadMessagesEvent(user, folder, searchValue));
}
}));
eventBus.addHandler(MoveMessageEvent.TYPE, new MoveMessageEventHandler() {
public void onMoveMessageHandler(MoveMessageEvent event) {
final Message message = event.getMessage();
MoveMessageRequest req = rf.moveMessageRequest();
<<<<<<< HEAD
MoveMessageAction action = req.create(MoveMessageAction.class);
ImapFolder newOne = req.create(ImapFolder.class);
ImapFolder oldOne = req.create(ImapFolder.class);
event.getNewFolder().setFolderTo(newOne);
event.getOldFolder().setFolderTo(oldOne);
action.setMessageUid(message.getUid());
action.setNewFolder(newOne);
action.setOldFolder(oldOne);
req.move(action).fire(new Receiver<GenericResult>() {
@Override
public void onSuccess(GenericResult response) {
List<Message> messageArray = new ArrayList<Message>();
messageArray.add(message);
display.removeMessages(messageArray);
}
});
}
});
registrations.add(display.getSelectAllClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.deselectAllMessages();
display.selectAllMessages();
}
}));
registrations.add(display.getSelectNoneClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.deselectAllMessages();
}
}));
registrations.add(display.getDeleteClick().addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
public void onClick(com.google.gwt.event.dom.client.ClickEvent event) {
if (folder.getFullName().equals(user.getSettings().getTrashFolderName())) {
display.getConfirmDeleteDialog().show();
} else {
deleteMessages();
}
}
}));
registrations.add(display.getConfirmDeleteDialogClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
deleteMessages();
}
}));
registrations.add(display.getNewClick().addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
public void onClick(com.google.gwt.event.dom.client.ClickEvent event) {
// eventBus.fireEvent(new NewMessageEvent());
pc.goTo(messageSendPlaceProvider.get().with(user, null, null, null, Type.NEW));
}
}));
registrations.add(display.getDeleteAllClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.getConfirmDeleteAllDialog().center();
}
}));
registrations.add(display.getConfirmDeleteAllDialogClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
DeleteMessageAllRequest req = rf.deleteMessageAllRequest();
DeleteMessageAllAction action = req.create(DeleteMessageAllAction.class);
ImapFolder f = req.create(ImapFolder.class);
folder.setFolderTo(f);
action.setFolder(f);
req.delete(action).fire(new Receiver<DeleteMessageResult>() {
@Override
public void onSuccess(DeleteMessageResult response) {
redrawTable();
eventBus.fireEvent(new DecreaseUnseenEvent(user, folder, response.getCount()));
}
});
}
}));
registrations.add(display.getMarkSeenClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
ArrayList<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN) == false) {
uids.add(m.getUid());
} else {
selectedMessages.remove(m);
}
}
SetFlagRequest req = rf.setFlagRequest();
SetFlagAction action = req.create(SetFlagAction.class);
ImapFolder f = req.create(ImapFolder.class);
folder.setFolderTo(f);
action.setFlag(IMAPFlag.SEEN);
action.setFolder(f);
action.setUids(uids);
action.setValue(true);
req.set(action).fire(new Receiver<GenericResult>() {
@Override
public void onSuccess(GenericResult response) {
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN) == false) {
m.getFlags().add(IMAPFlag.SEEN);
}
}
display.redraw();
eventBus.fireEvent(new DecreaseUnseenEvent(user, folder, selectedMessages.size()));
}
});
}
}));
registrations.add(display.getMarkUnseenClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
ArrayList<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN)) {
uids.add(m.getUid());
} else {
selectedMessages.remove(m);
}
}
SetFlagRequest req = rf.setFlagRequest();
SetFlagAction action = req.create(SetFlagAction.class);
ImapFolder f = req.create(ImapFolder.class);
folder.setFolderTo(f);
action.setFlag(IMAPFlag.SEEN);
action.setFolder(f);
action.setUids(uids);
action.setValue(false);
req.set(action).fire(new Receiver<GenericResult>() {
@Override
public void onSuccess(GenericResult response) {
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN)) {
m.getFlags().remove(IMAPFlag.SEEN);
}
}
display.redraw();
eventBus.fireEvent(new IncreaseUnseenEvent(user, folder, selectedMessages.size()));
}
});
}
}));
eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {// TODO
public void onFolderSelectionEvent(FolderSelectionEvent event) {
folder = event.getFolder();
user = event.getUser();
}
});
registrations.add(display.getRefreshClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.reset();
display.reloadData();
}
}));
registrations.add(display.getRowsPerPageChange().addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
// firePresenterRevealedEvent(true);
// firePresenterChangedEvent();
}
}));
// display.addTableListener(tableListener);
}
private void deleteMessages() {
Set<Message> ml = display.getSelectedMessages();
final List<Message> selectedMessages = new ArrayList<Message>(ml);
List<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
uids.add(m.getUid());
display.getTable().getSelectionModel().setSelected(m, false); // FIXME should be deSelected, or removed?
}
// maybe its better to just remove the messages from the table and
// expect the removal will work
display.removeMessages(selectedMessages);
DeleteMessageByUidRequest req = rf.deleteMessageByUidRequest();
DeleteMessageByUidAction action = req.create(DeleteMessageByUidAction.class);
ImapFolder f = req.create(ImapFolder.class);
// folder.setFolderTo(f); FIXME cannot use any more, for it's already a requestContext assigned.
clone(f, folder);
action.setMessageUids(uids);
action.setFolder(f);
req.delete(action).fire(new Receiver<DeleteMessageResult>() {
@Override
public void onSuccess(DeleteMessageResult response) {
redrawTable();//TODO presenter
eventBus.fireEvent(new DecreaseUnseenEvent(user, folder, response.getCount()));
}
});
}
private void clone(ImapFolder f, ImapFolder folder) {
f.setChildren(folder.getChildren());
f.setDelimiter(folder.getDelimiter());
f.setFullName(folder.getFullName());
f.setMessageCount(folder.getMessageCount());
f.setName(folder.getName());
f.setSubscribed(folder.getSubscribed());
f.setUnseenMessageCount(folder.getUnseenMessageCount());
}
private void redrawTable() {
display.getTable().setVisibleRangeAndClearData(display.getTable().getVisibleRange(), true);
}
public IMAPMessageListActivity with(FolderPlace place) {
// this.user = place.getUser();
// this.folder = place.getFolder();
// this.searchValue = place.getSearchValue();
return this;
}
protected void onRevealDisplay() {
if (user != null && folder != null) {
display.reloadData();
}
}
public void revealDisplay(User user, ImapFolder folder, String searchValue) {
this.user = user;
if (this.user == null || !this.user.getName().equals(user.getName()) || this.folder == null
|| !this.folder.getFullName().equals(folder.getFullName())
|| (searchValue == null && this.searchValue != null)
|| (searchValue != null && searchValue.equals(this.searchValue) == false)) {
display.reset();
display.deselectAllMessages();
}
display.setExpandLoading(false);
this.searchValue = searchValue;
this.folder = folder;
onRevealDisplay();
}
private String searchValue;
private User user;
private ImapFolder folder;
@Inject private Displayable display;
@Inject private Provider<MessageSendPlace> messageSendPlaceProvider;
public interface Displayable extends IsWidget {
public void setPostFetchMessageCount(int count);
public void fillSearchOracle(List<Message> messages);
public void setExpandLoading(boolean expanding);
public void redraw();
public void goToPage(int page);
public void reloadData();
public void removeMessages(List<Message> messages);
public void selectAllMessages();
public void deselectAllMessages();
public void reset();
public int getCurrentPage();
public int getRowsPerPageIndex();
public HasClickHandlers getNewClick();
public Message getData(int rowIndex);
public HasClickHandlers getDeleteClick();
public HasClickHandlers getDeleteAllClick();
public HasEnable getDeleteEnable();
public Set<Message> getSelectedMessages();
public HasDialog getConfirmDeleteDialog();
public HasDialog getConfirmDeleteAllDialog();
public HasClickHandlers getConfirmDeleteDialogClick();
public HasClickHandlers getConfirmDeleteAllDialogClick();
public HasClickHandlers getSelectAllClick();
public HasClickHandlers getSelectNoneClick();
public HasClickHandlers getMarkSeenClick();
public HasClickHandlers getMarkUnseenClick();
public HasEnable getMarkSeenEnable();
public HasEnable getMarkUnseenEnable();
public HasClickHandlers getRefreshClick();
public HasChangeHandlers getRowsPerPageChange();
public HasClickHandlers getSearchClick();
public HasValue<String> getSearchValue();
public MessagesCellTable getTable();
}
=======
=======
>>>>>>> Change to new mvp framework - first step
package org.apache.hupa.client.activity;
=======
>>>>>>> try to fetch messages, yet can not fire the login event in ModelTable such that just get a NullPointerException in it.
<<<<<<< HEAD
import java.util.ArrayList;
<<<<<<< HEAD
import net.customware.gwt.dispatch.client.DispatchAsync;
<<<<<<< HEAD
<<<<<<< HEAD
=======
>>>>>>> Make chechsession and login work with RF, with refactoring fetch folders.
import org.apache.hupa.client.HandlerRegistrationAdapter;
=======
>>>>>>> remove gwt-incubator dependency in Messages List Model;
import org.apache.hupa.client.activity.MessageSendActivity.Type;
import org.apache.hupa.client.place.MailFolderPlace;
=======
>>>>>>> change place management and make refresh folder and message list more gentle
import org.apache.hupa.client.place.MessageSendPlace;
import org.apache.hupa.client.rf.DeleteMessageAllRequest;
import org.apache.hupa.client.rf.DeleteMessageByUidRequest;
import org.apache.hupa.client.rf.MoveMessageRequest;
import org.apache.hupa.client.rf.SetFlagRequest;
import org.apache.hupa.client.ui.MessagesCellTable;
import org.apache.hupa.client.ui.WidgetDisplayable;
import org.apache.hupa.client.widgets.HasDialog;
import org.apache.hupa.shared.data.MessageImpl.IMAPFlag;
import org.apache.hupa.shared.domain.DeleteMessageAllAction;
import org.apache.hupa.shared.domain.DeleteMessageByUidAction;
import org.apache.hupa.shared.domain.DeleteMessageResult;
import org.apache.hupa.shared.domain.GenericResult;
import org.apache.hupa.shared.domain.ImapFolder;
import org.apache.hupa.shared.domain.Message;
import org.apache.hupa.shared.domain.MoveMessageAction;
import org.apache.hupa.shared.domain.SetFlagAction;
import org.apache.hupa.shared.domain.User;
import org.apache.hupa.shared.events.DecreaseUnseenEvent;
import org.apache.hupa.shared.events.FolderSelectionEvent;
import org.apache.hupa.shared.events.FolderSelectionEventHandler;
import org.apache.hupa.shared.events.IncreaseUnseenEvent;
import org.apache.hupa.shared.events.LoadMessagesEvent;
import org.apache.hupa.shared.events.LogoutEvent;
import org.apache.hupa.shared.events.LogoutEventHandler;
import org.apache.hupa.shared.events.MessagesReceivedEvent;
import org.apache.hupa.shared.events.MessagesReceivedEventHandler;
import org.apache.hupa.shared.events.MoveMessageEvent;
import org.apache.hupa.shared.events.MoveMessageEventHandler;
<<<<<<< HEAD
<<<<<<< HEAD
import org.apache.hupa.shared.proxy.IMAPFolderProxy;
import org.apache.hupa.shared.rpc.DeleteAllMessages;
import org.apache.hupa.shared.rpc.DeleteMessageByUid;
import org.apache.hupa.shared.rpc.DeleteMessageResult;
import org.apache.hupa.shared.rpc.GenericResult;
import org.apache.hupa.shared.rpc.MoveMessage;
import org.apache.hupa.shared.rpc.MoveMessageResult;
import org.apache.hupa.shared.rpc.SetFlag;
import org.apache.hupa.widgets.ui.HasEnable;
import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
=======
=======
import org.apache.hupa.client.HandlerRegistrationAdapter;
<<<<<<< HEAD
import org.apache.hupa.client.HupaEvoCallback;
<<<<<<< HEAD
>>>>>>>
=======
import org.apache.hupa.client.activity.MessageSendActivity.Type;
>>>>>>> 1. improve the inbox folder place.
import org.apache.hupa.client.mvp.WidgetDisplayable;
import org.apache.hupa.client.place.IMAPMessagePlace;
=======
import org.apache.hupa.client.activity.MessageSendActivity.Type;
import org.apache.hupa.client.evo.HupaEvoCallback;
import org.apache.hupa.client.place.MailFolderPlace;
>>>>>>> Make the evo more clear.
import org.apache.hupa.client.place.MessageSendPlace;
import org.apache.hupa.client.ui.WidgetDisplayable;
import org.apache.hupa.client.widgets.HasDialog;
import org.apache.hupa.shared.data.Message;
import org.apache.hupa.shared.data.Message.IMAPFlag;
import org.apache.hupa.shared.data.User;
import org.apache.hupa.shared.events.DecreaseUnseenEvent;
import org.apache.hupa.shared.events.ExpandMessageEvent;
import org.apache.hupa.shared.events.FolderSelectionEvent;
import org.apache.hupa.shared.events.FolderSelectionEventHandler;
import org.apache.hupa.shared.events.IncreaseUnseenEvent;
import org.apache.hupa.shared.events.LoadMessagesEvent;
import org.apache.hupa.shared.events.LogoutEvent;
import org.apache.hupa.shared.events.LogoutEventHandler;
import org.apache.hupa.shared.events.MessagesReceivedEvent;
import org.apache.hupa.shared.events.MessagesReceivedEventHandler;
import org.apache.hupa.shared.events.MoveMessageEvent;
import org.apache.hupa.shared.events.MoveMessageEventHandler;
import org.apache.hupa.shared.proxy.ImapFolder;
=======
>>>>>>> Allow client can use the domain entity interface.
import org.apache.hupa.shared.rpc.DeleteAllMessages;
import org.apache.hupa.shared.rpc.DeleteMessageByUid;
import org.apache.hupa.shared.rpc.DeleteMessageResult;
import org.apache.hupa.shared.rpc.GenericResult;
import org.apache.hupa.shared.rpc.MoveMessage;
import org.apache.hupa.shared.rpc.MoveMessageResult;
import org.apache.hupa.shared.rpc.SetFlag;
=======
>>>>>>> Make chechsession and login work with RF, with refactoring fetch folders.
import org.apache.hupa.widgets.ui.HasEnable;
<<<<<<< HEAD
import com.google.gwt.activity.shared.AbstractActivity;
<<<<<<< HEAD
>>>>>>> Change to new mvp framework - first step
=======
=======
>>>>>>> fix issue 10
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
>>>>>>>
import com.google.gwt.event.dom.client.HasChangeHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.EventBus;
<<<<<<< HEAD
<<<<<<< HEAD
import com.google.gwt.gen2.table.event.client.HasPageChangeHandlers;
import com.google.gwt.gen2.table.event.client.HasPageLoadHandlers;
import com.google.gwt.gen2.table.event.client.HasRowSelectionHandlers;
<<<<<<< HEAD
<<<<<<< HEAD
=======
>>>>>>>
import com.google.gwt.gen2.table.event.client.PageChangeEvent;
import com.google.gwt.gen2.table.event.client.PageChangeHandler;
import com.google.gwt.gen2.table.event.client.RowSelectionEvent;
import com.google.gwt.gen2.table.event.client.RowSelectionHandler;
<<<<<<< HEAD
=======
>>>>>>> Change to new mvp framework - first step
=======
>>>>>>>
=======
>>>>>>> remove gwt-incubator dependency in Messages List Model;
import com.google.gwt.place.shared.PlaceController;
=======
>>>>>>> scrub code
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.HasValue;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.web.bindery.requestfactory.shared.Receiver;
public class IMAPMessageListActivity extends AppBaseActivity {
<<<<<<< HEAD
<<<<<<< HEAD
private String searchValue;
private User user;
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
private IMAPFolderProxy folder;
=======
private IMAPFolder folder;
>>>>>>> Change to new mvp framework - first step
=======
private IMAPFolderProxy folder;
>>>>>>> Aim to make the front end view work after the server side's IMAPFolder services RF being working, but there are issues on RF's find* method, I think.
=======
private ImapFolder folder;
>>>>>>> Make the ValueProxy(ImapFolder) work with Manolo's patch. Hupa can display folders in west view with RequestFactory now.
private ShowMessageTableListener tableListener = new ShowMessageTableListener();
=======
private String searchValue;
private User user;
private ImapFolder folder;
<<<<<<< HEAD
private ShowMessageTableListener tableListener = new ShowMessageTableListener();
>>>>>>> delete messages, make WestActivity Singleton
=======
>>>>>>> clean some code. Pager issue remain
@Inject private Displayable display;
@Inject private EventBus eventBus;
@Inject private PlaceController placeController;
@Inject private Provider<MessageSendPlace> messageSendPlaceProvider;
@Inject private HupaRequestFactory requestFactory;
<<<<<<< HEAD
<<<<<<< HEAD
private final Displayable display;
private final EventBus eventBus;
private final PlaceController placeController;
<<<<<<< HEAD
<<<<<<< HEAD
private DispatchAsync dispatcher;
private final Provider<MessageSendPlace> messageSendPlaceProvider;
=======
@Inject private Displayable display;
@Inject private EventBus eventBus;
@Inject private PlaceController placeController;
@Inject private Provider<MessageSendPlace> messageSendPlaceProvider;
>>>>>>> fix issue 2&3. Handle exceptions thrown in async blocks & Simply injection code
=======
>>>>>>> delete messages, make WestActivity Singleton
=======
>>>>>>> scrub code
@Override
public void start(AcceptsOneWidget container, EventBus eventBus) {
bind();
revealDisplay(user, folder, searchValue);
container.setWidget(display.asWidget());
}
<<<<<<< HEAD
<<<<<<< HEAD
private void bind(){
=======
private final Provider<MailInboxPlace> mailInboxPlaceProvider;
=======
>>>>>>> At first make the inbox work, but only when click the refresh button. The page also be working, the other folder will be like the same.
private DispatchAsync dispatcher;
private final Provider<MessageSendPlace> messageSendPlaceProvider;
@Inject
public IMAPMessageListActivity(Displayable display, EventBus eventBus, PlaceController placeController,
DispatchAsync dispatcher,Provider<MessageSendPlace> messageSendPlaceProvider){
this.display = display;
this.eventBus = eventBus;
this.placeController = placeController;
this.dispatcher = dispatcher;
this.messageSendPlaceProvider = messageSendPlaceProvider;
// add this event on constructor because we don't want to remove it on unbind
>>>>>>> Change to new mvp framework - first step
eventBus.addHandler(LogoutEvent.TYPE, new LogoutEventHandler() {
public void onLogout(LogoutEvent logoutEvent) {
IMAPMessageListActivity.this.display.reset();
IMAPMessageListActivity.this.display.getSearchValue().setValue("");
}
});
<<<<<<< HEAD
=======
=======
>>>>>>> fix issue 10
private void bind() {
eventBus.addHandler(LogoutEvent.TYPE, new LogoutEventHandler() {
public void onLogout(LogoutEvent logoutEvent) {
IMAPMessageListActivity.this.display.reset();
IMAPMessageListActivity.this.display.getSearchValue().setValue("");
}
});
>>>>>>> delete messages, make WestActivity Singleton
eventBus.addHandler(MessagesReceivedEvent.TYPE, new MessagesReceivedEventHandler() {
public void onMessagesReceived(MessagesReceivedEvent event) {
// fill the oracle
display.fillSearchOracle(event.getMessages());
}
});
registrations.add(display.getSearchClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String searchValue = null;
if (display.getSearchValue().getValue().trim().length() > 0) {
searchValue = display.getSearchValue().getValue().trim();
}
eventBus.fireEvent(new LoadMessagesEvent(user, folder, searchValue));
}
}));
eventBus.addHandler(MoveMessageEvent.TYPE, new MoveMessageEventHandler() {
public void onMoveMessageHandler(MoveMessageEvent event) {
final Message message = event.getMessage();
MoveMessageRequest req = requestFactory.moveMessageRequest();
=======
>>>>>>> change message list view to make it not refresh the whole list when click one of the messages
MoveMessageAction action = req.create(MoveMessageAction.class);
ImapFolder newOne = req.create(ImapFolder.class);
ImapFolder oldOne = req.create(ImapFolder.class);
event.getNewFolder().setFolderTo(newOne);
event.getOldFolder().setFolderTo(oldOne);
action.setMessageUid(message.getUid());
action.setNewFolder(newOne);
action.setOldFolder(oldOne);
req.move(action).fire(new Receiver<GenericResult>() {
@Override
public void onSuccess(GenericResult response) {
List<Message> messageArray = new ArrayList<Message>();
messageArray.add(message);
display.removeMessages(messageArray);
}
});
}
});
registrations.add(display.getSelectAllClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.deselectAllMessages();
display.selectAllMessages();
}
}));
registrations.add(display.getSelectNoneClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.deselectAllMessages();
}
}));
registrations.add(display.getDeleteClick().addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
public void onClick(com.google.gwt.event.dom.client.ClickEvent event) {
if (folder.getFullName().equals(user.getSettings().getTrashFolderName())) {
display.getConfirmDeleteDialog().show();
} else {
deleteMessages();
}
}
}));
registrations.add(display.getConfirmDeleteDialogClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
deleteMessages();
}
}));
registrations.add(display.getNewClick().addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
public void onClick(com.google.gwt.event.dom.client.ClickEvent event) {
// eventBus.fireEvent(new NewMessageEvent());
pc.goTo(messageSendPlaceProvider.get().with(user, null, null, null, Type.NEW));
}
}));
registrations.add(display.getDeleteAllClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.getConfirmDeleteAllDialog().center();
}
}));
registrations.add(display.getConfirmDeleteAllDialogClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
DeleteMessageAllRequest req = rf.deleteMessageAllRequest();
DeleteMessageAllAction action = req.create(DeleteMessageAllAction.class);
ImapFolder f = req.create(ImapFolder.class);
folder.setFolderTo(f);
action.setFolder(f);
req.delete(action).fire(new Receiver<DeleteMessageResult>() {
@Override
public void onSuccess(DeleteMessageResult response) {
redrawTable();
eventBus.fireEvent(new DecreaseUnseenEvent(user, folder, response.getCount()));
}
});
}
}));
registrations.add(display.getMarkSeenClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
ArrayList<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN) == false) {
uids.add(m.getUid());
} else {
selectedMessages.remove(m);
}
}
SetFlagRequest req = rf.setFlagRequest();
SetFlagAction action = req.create(SetFlagAction.class);
ImapFolder f = req.create(ImapFolder.class);
folder.setFolderTo(f);
action.setFlag(IMAPFlag.SEEN);
action.setFolder(f);
action.setUids(uids);
action.setValue(true);
req.set(action).fire(new Receiver<GenericResult>() {
@Override
public void onSuccess(GenericResult response) {
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN) == false) {
m.getFlags().add(IMAPFlag.SEEN);
}
}
display.redraw();
eventBus.fireEvent(new DecreaseUnseenEvent(user, folder, selectedMessages.size()));
}
});
}
}));
registrations.add(display.getMarkUnseenClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
ArrayList<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN)) {
uids.add(m.getUid());
} else {
selectedMessages.remove(m);
}
}
SetFlagRequest req = rf.setFlagRequest();
SetFlagAction action = req.create(SetFlagAction.class);
ImapFolder f = req.create(ImapFolder.class);
folder.setFolderTo(f);
action.setFlag(IMAPFlag.SEEN);
action.setFolder(f);
action.setUids(uids);
action.setValue(false);
req.set(action).fire(new Receiver<GenericResult>() {
@Override
public void onSuccess(GenericResult response) {
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN)) {
m.getFlags().remove(IMAPFlag.SEEN);
}
}
display.redraw();
eventBus.fireEvent(new IncreaseUnseenEvent(user, folder, selectedMessages.size()));
}
});
}
}));
eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {// TODO
public void onFolderSelectionEvent(FolderSelectionEvent event) {
folder = event.getFolder();
user = event.getUser();
}
});
registrations.add(display.getRefreshClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.reset();
display.reloadData();
}
}));
registrations.add(display.getRowsPerPageChange().addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
// firePresenterRevealedEvent(true);
// firePresenterChangedEvent();
}
}));
// display.addTableListener(tableListener);
}
private void deleteMessages() {
Set<Message> ml = display.getSelectedMessages();
final List<Message> selectedMessages = new ArrayList<Message>(ml);
List<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
uids.add(m.getUid());
display.getTable().getSelectionModel().setSelected(m, false); // FIXME should be deSelected, or removed?
}
// maybe its better to just remove the messages from the table and
// expect the removal will work
display.removeMessages(selectedMessages);
DeleteMessageByUidRequest req = rf.deleteMessageByUidRequest();
DeleteMessageByUidAction action = req.create(DeleteMessageByUidAction.class);
ImapFolder f = req.create(ImapFolder.class);
// folder.setFolderTo(f); FIXME cannot use any more, for it's already a requestContext assigned.
clone(f, folder);
action.setMessageUids(uids);
action.setFolder(f);
req.delete(action).fire(new Receiver<DeleteMessageResult>() {
@Override
public void onSuccess(DeleteMessageResult response) {
redrawTable();//TODO presenter
eventBus.fireEvent(new DecreaseUnseenEvent(user, folder, response.getCount()));
}
});
}
private void clone(ImapFolder f, ImapFolder folder) {
f.setChildren(folder.getChildren());
f.setDelimiter(folder.getDelimiter());
f.setFullName(folder.getFullName());
f.setMessageCount(folder.getMessageCount());
f.setName(folder.getName());
f.setSubscribed(folder.getSubscribed());
f.setUnseenMessageCount(folder.getUnseenMessageCount());
}
private void redrawTable() {
display.getTable().setVisibleRangeAndClearData(display.getTable().getVisibleRange(), true);
}
public IMAPMessageListActivity with(FolderPlace place) {
// this.user = place.getUser();
// this.folder = place.getFolder();
<<<<<<< HEAD
this.searchValue = place.getSearchValue();
<<<<<<< HEAD
<<<<<<< HEAD
=======
}
@Override
public void start(AcceptsOneWidget container, EventBus eventBus) {
bind();
revealDisplay(user, folder, searchValue);
container.setWidget(display.asWidget());
}
private void bind(){
eventBus.addHandler(MessagesReceivedEvent.TYPE, new MessagesReceivedEventHandler() {
public void onMessagesReceived(MessagesReceivedEvent event) {
// fill the oracle
display.fillSearchOracle(event.getMessages());
}
});
display.getSearchClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String searchValue = null;
if (display.getSearchValue().getValue().trim().length() > 0) {
searchValue = display.getSearchValue().getValue().trim();
}
eventBus.fireEvent(new LoadMessagesEvent(user, folder, searchValue));
}
});
eventBus.addHandler(MoveMessageEvent.TYPE, new MoveMessageEventHandler() {
public void onMoveMessageHandler(MoveMessageEvent event) {
final Message message = event.getMessage();
dispatcher.execute(new MoveMessage(event.getOldFolder(), event.getNewFolder(), message.getUid()), new HupaEvoCallback<MoveMessageResult>(dispatcher, eventBus) {
public void callback(MoveMessageResult result) {
ArrayList<Message> messageArray = new ArrayList<Message>();
messageArray.add(message);
display.removeMessages(messageArray);
}
});
}
});
display.getSelectAllClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.deselectAllMessages();
display.selectAllMessages();
}
});
display.getSelectNoneClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.deselectAllMessages();
}
});
display.getDeleteClick().addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
public void onClick(com.google.gwt.event.dom.client.ClickEvent event) {
if (folder.getFullName().equals(user.getSettings().getTrashFolderName())) {
display.getConfirmDeleteDialog().show();
} else {
deleteMessages();
}
}
});
display.getConfirmDeleteDialogClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
deleteMessages();
}
});
display.getNewClick().addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
public void onClick(com.google.gwt.event.dom.client.ClickEvent event) {
// eventBus.fireEvent(new NewMessageEvent());
placeController.goTo(messageSendPlaceProvider.get().with(user, null, null, null, Type.NEW));
}
});
display.getDeleteAllClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.getConfirmDeleteAllDialog().center();
}
});
display.getConfirmDeleteAllDialogClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
dispatcher.execute(new DeleteAllMessages(folder), new HupaEvoCallback<DeleteMessageResult>(dispatcher, eventBus) {
public void callback(DeleteMessageResult result) {
display.reset();
display.reloadData();
// eventBus.fireEvent(new DecreaseUnseenEvent(user,folder,result.getCount()));
}
});
}
});
display.getMarkSeenClick().addClickHandler( new ClickHandler() {
public void onClick(ClickEvent event) {
final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
ArrayList<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN) == false) {
uids.add(m.getUid());
} else {
selectedMessages.remove(m);
}
}
dispatcher.execute(new SetFlag(folder, IMAPFlag.SEEN, true, uids), new HupaEvoCallback<GenericResult>(dispatcher, eventBus) {
public void callback(GenericResult result) {
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN) == false) {
m.getFlags().add(IMAPFlag.SEEN);
}
}
display.redraw();
eventBus.fireEvent(new DecreaseUnseenEvent(user, folder,selectedMessages.size()));
}
});
}
});
display.getMarkUnseenClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
ArrayList<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN)) {
uids.add(m.getUid());
} else {
selectedMessages.remove(m);
}
}
dispatcher.execute(new SetFlag(folder, IMAPFlag.SEEN, false, uids), new HupaEvoCallback<GenericResult>(dispatcher, eventBus) {
public void callback(GenericResult result) {
for (Message m : selectedMessages) {
if (m.getFlags().contains(IMAPFlag.SEEN)) {
m.getFlags().remove(IMAPFlag.SEEN);
}
}
display.redraw();
eventBus.fireEvent(new IncreaseUnseenEvent(user, folder,selectedMessages.size()));
}
});
}
});
eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {//TODO
public void onFolderSelectionEvent(FolderSelectionEvent event) {
folder = event.getFolder();
user = event.getUser();
}
});
new HandlerRegistrationAdapter(display.getDataTableSelection().addRowSelectionHandler(new RowSelectionHandler() {
public void onRowSelection(RowSelectionEvent event) {
if (event.getSelectedRows().size() == 0) {
display.getDeleteEnable().setEnabled(false);
display.getMarkSeenEnable().setEnabled(false);
display.getMarkUnseenEnable().setEnabled(false);
} else {
display.getDeleteEnable().setEnabled(true);
display.getMarkSeenEnable().setEnabled(true);
display.getMarkUnseenEnable().setEnabled(true);
}
}
}));
display.getRefreshClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
display.reset();
display.reloadData();
}
});
new HandlerRegistrationAdapter(display.getDataTablePageChange().addPageChangeHandler(new PageChangeHandler() {//TODO
public void onPageChange(PageChangeEvent event) {
//firePresenterRevealedEvent(true);
// firePresenterChangedEvent();
}
}));
display.getRowsPerPageChange().addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
//firePresenterRevealedEvent(true);
// firePresenterChangedEvent();
}
});
display.addTableListener(tableListener);
}
private void deleteMessages() {
final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
ArrayList<Long> uids = new ArrayList<Long>();
for (Message m : selectedMessages) {
uids.add(m.getUid());
}
// maybe its better to just remove the messages from the table and expect the removal will work
display.removeMessages(selectedMessages);
dispatcher.execute(new DeleteMessageByUid(folder,uids), new HupaEvoCallback<DeleteMessageResult>(dispatcher, eventBus) {
public void callback(DeleteMessageResult result) {
eventBus.fireEvent(new DecreaseUnseenEvent(user,folder,result.getCount()));
}
});
}
<<<<<<< HEAD
public IMAPMessageListActivity with(User user, IMAPFolder imapFolder, String string){
this.user = user;
<<<<<<< HEAD
this.folder = new IMAPFolder(user.getSettings().getInboxFolderName());
>>>>>>> Change to new mvp framework - first step
=======
this.folder = imapFolder;
this.searchValue = string;
>>>>>>> At first make the inbox work, but only when click the refresh button. The page also be working, the other folder will be like the same.
=======
public IMAPMessageListActivity with(MailFolderPlace place){
this.user = place.getUser();
this.folder = place.getFolder();
this.searchValue = place.getSearchValue();
>>>>>>> Make the evo more clear.
=======
display.setImapFolder(folder);
>>>>>>> use CellTable to deal with MessageTableModel, even a few issues
=======
>>>>>>> fix the CellTable display
=======
// this.searchValue = place.getSearchValue();
>>>>>>> scrub code
return this;
}
<<<<<<< HEAD
protected void onRevealDisplay() {
if (user != null && folder != null) {
display.reloadData();
}
}
<<<<<<< HEAD
<<<<<<< HEAD
<<<<<<< HEAD
public void revealDisplay(User user, IMAPFolderProxy folder, String searchValue) {
=======
public void revealDisplay(User user, IMAPFolder folder, String searchValue) {
>>>>>>> Change to new mvp framework - first step
=======
public void revealDisplay(User user, IMAPFolderProxy folder, String searchValue) {
>>>>>>> Aim to make the front end view work after the server side's IMAPFolder services RF being working, but there are issues on RF's find* method, I think.
=======
public void revealDisplay(User user, ImapFolder folder, String searchValue) {
>>>>>>> Make the ValueProxy(ImapFolder) work with Manolo's patch. Hupa can display folders in west view with RequestFactory now.
this.user = user;
if (this.user == null
|| !this.user.getName().equals(user.getName())
|| this.folder == null
|| !this.folder.getFullName().equals(folder.getFullName())
|| (searchValue == null && this.searchValue != null)
|| (searchValue != null && searchValue.equals(this.searchValue) == false)) {
display.reset();
display.deselectAllMessages();
}
display.setExpandLoading(false);
this.searchValue = searchValue;
this.folder = folder;
onRevealDisplay();
}
public interface Displayable extends WidgetDisplayable{
public HasRowSelectionHandlers getDataTableSelection();
public HasPageLoadHandlers getDataTableLoad();
public void addTableListener(TableListener listener) ;
public void removeTableListener(TableListener listener) ;
public void setPostFetchMessageCount(int count);
public HasClickHandlers getNewClick();
public Message getData(int rowIndex);
public HasClickHandlers getDeleteClick();
public HasClickHandlers getDeleteAllClick();
public HasEnable getDeleteEnable();
public void reloadData();
public void removeMessages(ArrayList<Message> messages);
public List<Message> getSelectedMessages();
public void reset();
public HasDialog getConfirmDeleteDialog();
public HasDialog getConfirmDeleteAllDialog();
public HasClickHandlers getConfirmDeleteDialogClick();
public HasClickHandlers getConfirmDeleteAllDialogClick();
public void selectAllMessages();
public void deselectAllMessages();
public HasClickHandlers getSelectAllClick();
public HasClickHandlers getSelectNoneClick();
public HasClickHandlers getMarkSeenClick();
public HasClickHandlers getMarkUnseenClick();
public HasEnable getMarkSeenEnable();
public HasEnable getMarkUnseenEnable();
public HasClickHandlers getRefreshClick();
public void redraw();
public HasPageChangeHandlers getDataTablePageChange();
public void goToPage(int page);
public int getCurrentPage();
public int getRowsPerPageIndex();
public HasChangeHandlers getRowsPerPageChange();
public HasClickHandlers getSearchClick();
public HasValue<String> getSearchValue();
public void fillSearchOracle(List<Message> messages);
public void setExpandLoading(boolean expanding);
}
private final class ShowMessageTableListener implements TableListener {
public void onCellClicked(SourcesTableEvents sender, int row,
int cell) {
display.setExpandLoading(true);
Message message = display.getData(row);
// mark the message as seen and redraw the table to reflect this
if (message.getFlags().contains(MessageImpl.IMAPFlag.SEEN) == false) {
// add flag, fire event and redraw
message.getFlags().add(MessageImpl.IMAPFlag.SEEN);
eventBus.fireEvent(new DecreaseUnseenEvent(user,folder,1));
display.redraw();
}
<<<<<<< HEAD
<<<<<<< HEAD
=======
>>>>>>> Change to new mvp framework - first step
=======
>>>>>>> 1. improve the inbox folder place.
eventBus.fireEvent(new ExpandMessageEvent(user,folder,message));
}
}
<<<<<<< HEAD
>>>>>>> Change to new mvp framework - first step
=======
>>>>>>> Change to new mvp framework - first step
=======
protected void onRevealDisplay() {
if (user != null && folder != null) {
display.reloadData();
}
}
public void revealDisplay(User user, ImapFolder folder, String searchValue) {
this.user = user;
if (this.user == null || !this.user.getName().equals(user.getName()) || this.folder == null
|| !this.folder.getFullName().equals(folder.getFullName())
|| (searchValue == null && this.searchValue != null)
|| (searchValue != null && searchValue.equals(this.searchValue) == false)) {
display.reset();
display.deselectAllMessages();
}
display.setExpandLoading(false);
this.searchValue = searchValue;
this.folder = folder;
onRevealDisplay();
}
private String searchValue;
private User user;
private ImapFolder folder;
@Inject private Displayable display;
@Inject private Provider<MessageSendPlace> messageSendPlaceProvider;
public interface Displayable extends WidgetDisplayable {
public void setPostFetchMessageCount(int count);
public void fillSearchOracle(List<Message> messages);
public void setExpandLoading(boolean expanding);
public void redraw();
public void goToPage(int page);
public void reloadData();
public void removeMessages(List<Message> messages);
public void selectAllMessages();
public void deselectAllMessages();
public void reset();
public int getCurrentPage();
public int getRowsPerPageIndex();
public HasClickHandlers getNewClick();
public Message getData(int rowIndex);
public HasClickHandlers getDeleteClick();
public HasClickHandlers getDeleteAllClick();
public HasEnable getDeleteEnable();
public Set<Message> getSelectedMessages();
public HasDialog getConfirmDeleteDialog();
public HasDialog getConfirmDeleteAllDialog();
public HasClickHandlers getConfirmDeleteDialogClick();
public HasClickHandlers getConfirmDeleteAllDialogClick();
public HasClickHandlers getSelectAllClick();
public HasClickHandlers getSelectNoneClick();
public HasClickHandlers getMarkSeenClick();
public HasClickHandlers getMarkUnseenClick();
public HasEnable getMarkSeenEnable();
public HasEnable getMarkUnseenEnable();
public HasClickHandlers getRefreshClick();
public HasChangeHandlers getRowsPerPageChange();
public HasClickHandlers getSearchClick();
public HasValue<String> getSearchValue();
public MessagesCellTable getTable();
}
<<<<<<< HEAD
private final class ShowMessageTableListener implements TableListener {
public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
display.setExpandLoading(true);
Message message = display.getData(row);
// mark the message as seen and redraw the table to reflect this
if (message.getFlags().contains(MessageImpl.IMAPFlag.SEEN) == false) {
// add flag, fire event and redraw
message.getFlags().add(MessageImpl.IMAPFlag.SEEN);
eventBus.fireEvent(new DecreaseUnseenEvent(user, folder, 1));
display.redraw();
}
eventBus.fireEvent(new ExpandMessageEvent(user, folder, message));
}
}
>>>>>>> delete messages, make WestActivity Singleton
=======
>>>>>>> clean some code. Pager issue remain
}