Merge remote-tracking branch 'siacs/master' into development

This commit is contained in:
Christian S 2015-10-22 20:31:08 +02:00
commit 2c179a1d41
3 changed files with 47 additions and 7 deletions

View file

@ -314,12 +314,11 @@ public class Conversation extends AbstractEntity implements Blockable {
public List<Message> markRead() {
final List<Message> unread = new ArrayList<>();
synchronized (this.messages) {
for (int i = this.messages.size() - 1; i >= 0; --i) {
if (this.messages.get(i).isRead()) {
break;
for(Message message : this.messages) {
if (!message.isRead()) {
message.markRead();
unread.add(message);
}
this.messages.get(i).markRead();
unread.add(this.messages.get(i));
}
}
return unread;

View file

@ -1683,8 +1683,8 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
if (account.getStatus() == Account.State.ONLINE || now) {
conversation.resetMucOptions();
fetchConferenceConfiguration(conversation, new OnConferenceConfigurationFetched() {
@Override
public void onConferenceConfigurationFetched(Conversation conversation) {
private void join(Conversation conversation) {
Account account = conversation.getAccount();
final String nick = conversation.getMucOptions().getProposedNick();
final Jid joinJid = conversation.getMucOptions().createJoinJid(nick);
@ -1723,6 +1723,27 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
getMessageArchiveService().catchupMUC(conversation);
}
}
@Override
public void onConferenceConfigurationFetched(Conversation conversation) {
join(conversation);
}
@Override
public void onFetchFailed(final Conversation conversation, Element error) {
conversation.getMucOptions().setOnJoinListener(new MucOptions.OnJoinListener() {
@Override
public void onSuccess() {
fetchConferenceConfiguration(conversation);
}
@Override
public void onFailure() {
}
});
join(conversation);
}
});
} else {
@ -1913,6 +1934,10 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
callback.onConferenceConfigurationFetched(conversation);
}
updateConversationUi();
} else if (packet.getType() == IqPacket.TYPE.ERROR) {
if (callback != null) {
callback.onFetchFailed(conversation, packet.getError());
}
}
}
});
@ -2901,6 +2926,8 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
public interface OnConferenceConfigurationFetched {
void onConferenceConfigurationFetched(Conversation conversation);
void onFetchFailed(Conversation conversation, Element error);
}
public interface OnConferenceOptionsPushed {

View file

@ -1,5 +1,7 @@
package eu.siacs.conversations.xmpp.stanzas;
import eu.siacs.conversations.xml.Element;
abstract public class AbstractAcknowledgeableStanza extends AbstractStanza {
protected AbstractAcknowledgeableStanza(String name) {
@ -14,4 +16,16 @@ abstract public class AbstractAcknowledgeableStanza extends AbstractStanza {
public void setId(final String id) {
setAttribute("id", id);
}
public Element getError() {
Element error = findChild("error");
if (error != null) {
for(Element element : error.getChildren()) {
if (!element.getName().equals("text")) {
return element;
}
}
}
return null;
}
}