aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/eu/siacs/conversations/ui/ConversationFragment.java11
-rw-r--r--src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java75
2 files changed, 59 insertions, 27 deletions
diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java
index 06ed41e5..d8f9ad3b 100644
--- a/src/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/eu/siacs/conversations/ui/ConversationFragment.java
@@ -209,7 +209,6 @@ public class ConversationFragment extends Fragment {
.findViewById(R.id.message_photo);
viewHolder.imageView.setImageBitmap(selfBitmap);
viewHolder.indicator = (ImageView) view.findViewById(R.id.security_indicator);
- viewHolder.image = (ImageView) view.findViewById(R.id.message_image);
break;
case RECIEVED:
view = (View) inflater.inflate(
@@ -231,6 +230,7 @@ public class ConversationFragment extends Fragment {
viewHolder = null;
break;
}
+ viewHolder.image = (ImageView) view.findViewById(R.id.message_image);
viewHolder.messageBody = (TextView) view
.findViewById(R.id.message_body);
viewHolder.time = (TextView) view
@@ -256,8 +256,13 @@ public class ConversationFragment extends Fragment {
}
if (item.getType() == Message.TYPE_IMAGE) {
viewHolder.image.setVisibility(View.VISIBLE);
- viewHolder.image.setImageBitmap(activity.xmppConnectionService.getFileBackend().getThumbnailFromMessage(item,(int) (metrics.density * 288)));
- viewHolder.messageBody.setVisibility(View.GONE);
+ if (item.getStatus() != Message.STATUS_RECIEVING) {
+ viewHolder.image.setImageBitmap(activity.xmppConnectionService.getFileBackend().getThumbnailFromMessage(item,(int) (metrics.density * 288)));
+ viewHolder.messageBody.setVisibility(View.GONE);
+ } else {
+ viewHolder.messageBody.setVisibility(View.VISIBLE);
+ viewHolder.messageBody.setText("receiving image file");
+ }
} else {
if (viewHolder.image != null) viewHolder.image.setVisibility(View.GONE);
viewHolder.messageBody.setVisibility(View.VISIBLE);
diff --git a/src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java b/src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
index 5e59bb9a..821e192e 100644
--- a/src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
+++ b/src/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
@@ -133,6 +133,11 @@ public class JingleConnection {
Element fileSize = fileOffer.findChild("size");
Element fileName = fileOffer.findChild("name");
this.file.setExpectedSize(Long.parseLong(fileSize.getContent()));
+ conversation.getMessages().add(message);
+ this.mXmppConnectionService.databaseBackend.createMessage(message);
+ if (this.mXmppConnectionService.convChangedListener!=null) {
+ this.mXmppConnectionService.convChangedListener.onConversationListChanged();
+ }
if (this.file.getExpectedSize()>=this.mJingleConnectionManager.getAutoAcceptFileSize()) {
Log.d("xmppService","auto accepting file from "+packet.getFrom());
this.sendAccept();
@@ -181,7 +186,7 @@ public class JingleConnection {
public void onIqPacketReceived(Account account, IqPacket packet) {
if (packet.getType() != IqPacket.TYPE_ERROR) {
status = STATUS_ACCEPTED;
- connectWithCandidates();
+ connectNextCandidate();
}
}
});
@@ -204,7 +209,7 @@ public class JingleConnection {
Content content = packet.getJingleContent();
mergeCandidates(content.getCanditates());
this.status = STATUS_ACCEPTED;
- this.connectWithCandidates();
+ this.connectNextCandidate();
IqPacket response = packet.generateRespone(IqPacket.TYPE_RESULT);
account.getXmppConnection().sendIqPacket(response, null);
}
@@ -240,6 +245,11 @@ public class JingleConnection {
@Override
public void onFileTransmitted(JingleFile file) {
+ if (initiator.equals(account.getFullJid())) {
+ mXmppConnectionService.markMessage(message, Message.STATUS_SEND);
+ } else {
+ mXmppConnectionService.markMessage(message, Message.STATUS_RECIEVED);
+ }
Log.d("xmppService","sucessfully transmitted file. sha1:"+file.getSha1Sum());
}
};
@@ -286,33 +296,41 @@ public class JingleConnection {
this.mXmppConnectionService.markMessage(this.message, Message.STATUS_SEND_REJECTED);
}
- private void connectWithCandidates() {
+ private void connectNextCandidate() {
for(Element candidate : this.candidates) {
- final SocksConnection socksConnection = new SocksConnection(this,candidate);
- connections.put(socksConnection.getCid(), socksConnection);
- socksConnection.connect(new OnSocksConnection() {
-
- @Override
- public void failed() {
- Log.d("xmppService","socks5 failed");
- }
-
- @Override
- public void established() {
- if (candidatesUsedByCounterpart.contains(socksConnection.getCid())) {
- if (status!=STATUS_TRANSMITTING) {
- connect(socksConnection);
- } else {
- Log.d("xmppService","ignoring cuz already transmitting");
- }
+ String cid = candidate.getAttribute("cid");
+ if (!connections.containsKey(cid)) {
+ this.connectWithCandidate(candidate);
+ break;
+ }
+ }
+ }
+
+ private void connectWithCandidate(Element candidate) {
+ final SocksConnection socksConnection = new SocksConnection(this,candidate);
+ connections.put(socksConnection.getCid(), socksConnection);
+ socksConnection.connect(new OnSocksConnection() {
+
+ @Override
+ public void failed() {
+ connectNextCandidate();
+ }
+
+ @Override
+ public void established() {
+ if (candidatesUsedByCounterpart.contains(socksConnection.getCid())) {
+ if (status!=STATUS_TRANSMITTING) {
+ connect(socksConnection);
} else {
- sendCandidateUsed(socksConnection.getCid());
+ Log.d("xmppService","ignoring cuz already transmitting");
}
+ } else {
+ sendCandidateUsed(socksConnection.getCid());
}
- });
- }
+ }
+ });
}
-
+
private void disconnect() {
Iterator<Entry<String, SocksConnection>> it = this.connections.entrySet().iterator();
while (it.hasNext()) {
@@ -378,4 +396,13 @@ public class JingleConnection {
mergeCandidate(c);
}
}
+
+ private Element getCandidate(String cid) {
+ for(Element c : this.candidates) {
+ if (c.getAttribute("cid").equals(cid)) {
+ return c;
+ }
+ }
+ return null;
+ }
}