Merge remote-tracking branch 'siacs/master' into development
This commit is contained in:
commit
2c179a1d41
3 changed files with 47 additions and 7 deletions
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue