From 3c50ba672af0a6057c837d9158cfba9753a8ce7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Fri, 11 Jun 2021 17:13:21 -0400
Subject: [PATCH] Revert "datatransfer: use new API"

This reverts commit e7c9e57055b1eee838100535da6df69780d1c77e.

Reason for revert: wip

Change-Id: If03c88b17fd02f740e8a9b01b18768cc328533bf
---
 build-daemon.sh                               |  2 +-
 .../ring/fragments/ConversationFragment.java  |  4 +-
 .../java/cx/ring/service/DRingService.java    |  2 +-
 .../services/DeviceRuntimeServiceImpl.java    |  4 +-
 .../services/NotificationServiceImpl.java     | 10 ++--
 .../conversation/TvConversationAdapter.java   |  4 +-
 .../conversation/TvConversationFragment.java  |  4 +-
 .../net/jami/facades/ConversationFacade.java  | 32 +++++------
 .../src/main/java/net/jami/model/Account.java |  9 ++-
 .../java/net/jami/model/DataTransfer.java     | 24 +++-----
 .../net/jami/services/AccountService.java     | 57 ++++++++-----------
 .../java/net/jami/services/DaemonService.java |  6 +-
 .../jami/services/NotificationService.java    |  2 +-
 13 files changed, 68 insertions(+), 92 deletions(-)

diff --git a/build-daemon.sh b/build-daemon.sh
index 8f0e04957..b2b5bd669 100755
--- a/build-daemon.sh
+++ b/build-daemon.sh
@@ -181,8 +181,8 @@ STATIC_LIBS_ALL="-llog -lOpenSLES -landroid \
                 -lyaml-cpp -ljsoncpp -lhttp_parser -lfmt\
                 -luuid -lz -ldl \
                 -lvpx -lopus -lspeex -lspeexdsp -lx264 \
-                -lgit2 \
                 -largon2 \
+                -lgit2 \
                 -liconv"
 
 LIBRING_JNI_DIR=${ANDROID_APP_DIR}/app/src/main/libs/${ANDROID_ABI}
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
index 39b7e3cde..a832ac441 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/ConversationFragment.java
@@ -759,13 +759,13 @@ public class ConversationFragment extends BaseSupportFragment<ConversationPresen
             return;
         }
         requireActivity().startService(new Intent(DRingService.ACTION_FILE_ACCEPT, ConversationPath.toUri(accountId, conversationUri), requireContext(), DRingService.class)
-                .putExtra(DRingService.KEY_TRANSFER_ID, transfer.getFileId()));
+                .putExtra(DRingService.KEY_TRANSFER_ID, transfer.getDaemonId()));
     }
 
     @Override
     public void refuseFile(String accountId, Uri conversationUri, DataTransfer transfer) {
         requireActivity().startService(new Intent(DRingService.ACTION_FILE_CANCEL, ConversationPath.toUri(accountId, conversationUri), requireContext(), DRingService.class)
-                .putExtra(DRingService.KEY_TRANSFER_ID, transfer.getFileId()));
+                .putExtra(DRingService.KEY_TRANSFER_ID, transfer.getDaemonId()));
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/service/DRingService.java b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
index 47e44ef91..319115791 100644
--- a/ring-android/app/src/main/java/cx/ring/service/DRingService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/DRingService.java
@@ -651,7 +651,7 @@ public class DRingService extends Service {
     }
 
     private void handleFileAction(android.net.Uri uri, String action, Bundle extras) {
-        String id = extras.getString(KEY_TRANSFER_ID);
+        long id = extras.getLong(KEY_TRANSFER_ID);
         ConversationPath path = ConversationPath.fromUri(uri);
         if (action.equals(ACTION_FILE_ACCEPT)) {
             mNotificationService.removeTransferNotification(path.getAccountId(), path.getConversationUri(), id);
diff --git a/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
index 92fab979e..07eda44a8 100644
--- a/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.java
@@ -71,7 +71,7 @@ public class DeviceRuntimeServiceImpl extends DeviceRuntimeService {
 
     @Override
     public void loadNativeLibrary() {
-        //mExecutor.execute(() -> {
+        mExecutor.execute(() -> {
             try {
                 System.loadLibrary("ring");
             } catch (Exception e) {
@@ -79,7 +79,7 @@ public class DeviceRuntimeServiceImpl extends DeviceRuntimeService {
                 android.os.Process.killProcess(android.os.Process.myPid());
                 System.exit(0);
             }
-        //});
+        });
     }
 
     @Override
diff --git a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
index 9861ef901..fb4840dcb 100644
--- a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java
@@ -471,12 +471,12 @@ public class NotificationServiceImpl implements NotificationService {
         if (!remove) {
             showFileTransferNotification(conversation, transfer);
         } else {
-            removeTransferNotification(ConversationPath.toUri(conversation), transfer.getFileId());
+            removeTransferNotification(ConversationPath.toUri(conversation), transfer.getDaemonId());
         }
     }
 
     @Override
-    public void removeTransferNotification(String accountId, Uri conversationUri, String transferId) {
+    public void removeTransferNotification(String accountId, Uri conversationUri, long transferId) {
         removeTransferNotification(ConversationPath.toUri(accountId, conversationUri), transferId);
     }
 
@@ -485,7 +485,7 @@ public class NotificationServiceImpl implements NotificationService {
      *
      * @param transferId the transfer id which is required to generate the notification id
      */
-    public void removeTransferNotification(android.net.Uri path, String transferId) {
+    public void removeTransferNotification(android.net.Uri path, long transferId) {
         int id = getFileTransferNotificationId(path, transferId);
         dataTransferNotifications.remove(id);
         cancelFileNotification(id, false);
@@ -749,7 +749,7 @@ public class NotificationServiceImpl implements NotificationService {
         }
         android.net.Uri path = ConversationPath.toUri(conversation);
         Log.d(TAG, "showFileTransferNotification " + path);
-        String dataTransferId = info.getFileId();
+        long dataTransferId = info.getDaemonId();
         int notificationId = getFileTransferNotificationId(path, dataTransferId);
 
         Intent intentConversation = new Intent(DRingService.ACTION_CONV_ACCEPT, path, mContext, DRingService.class);
@@ -955,7 +955,7 @@ public class NotificationServiceImpl implements NotificationService {
         return (NOTIF_MSG + accountId + contact.toString()).hashCode();
     }
 
-    private int getFileTransferNotificationId(android.net.Uri path, String dataTransferId) {
+    private int getFileTransferNotificationId(android.net.Uri path, long dataTransferId) {
         return (NOTIF_FILE_TRANSFER + path.toString() + dataTransferId).hashCode();
     }
 
diff --git a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.java b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.java
index 20fc5a968..be6428a5f 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.java
@@ -632,13 +632,13 @@ public class TvConversationAdapter extends RecyclerView.Adapter<TvConversationVi
                 }
                 context.startService(new Intent(DRingService.ACTION_FILE_ACCEPT)
                         .setClass(context.getApplicationContext(), DRingService.class)
-                        .putExtra(DRingService.KEY_TRANSFER_ID, file.getFileId()));
+                        .putExtra(DRingService.KEY_TRANSFER_ID, file.getDaemonId()));
             });
             viewHolder.btnRefuse.setOnClickListener(v -> {
                 Context context = v.getContext();
                 context.startService(new Intent(DRingService.ACTION_FILE_CANCEL)
                         .setClass(context.getApplicationContext(), DRingService.class)
-                        .putExtra(DRingService.KEY_TRANSFER_ID, file.getFileId()));
+                        .putExtra(DRingService.KEY_TRANSFER_ID, file.getDaemonId()));
             });
         } else {
             viewHolder.mAnswerLayout.setVisibility(View.GONE);
diff --git a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java
index d66e81ad9..a0abdab81 100644
--- a/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.java
@@ -807,7 +807,7 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres
         requireActivity().startService(new Intent(DRingService.ACTION_FILE_ACCEPT)
                 .setClass(requireContext(), DRingService.class)
                 .setData(ConversationPath.toUri(accountId, conversationUri))
-                .putExtra(DRingService.KEY_TRANSFER_ID, transfer.getFileId()));
+                .putExtra(DRingService.KEY_TRANSFER_ID, transfer.getDaemonId()));
     }
 
     @Override
@@ -815,7 +815,7 @@ public class TvConversationFragment extends BaseSupportFragment<ConversationPres
         requireActivity().startService(new Intent(DRingService.ACTION_FILE_CANCEL)
                 .setClass(requireContext(), DRingService.class)
                 .setData(ConversationPath.toUri(accountId, conversationUri))
-                .putExtra(DRingService.KEY_TRANSFER_ID, transfer.getFileId()));
+                .putExtra(DRingService.KEY_TRANSFER_ID, transfer.getDaemonId()));
     }
 
 }
diff --git a/ring-android/libringclient/src/main/java/net/jami/facades/ConversationFacade.java b/ring-android/libringclient/src/main/java/net/jami/facades/ConversationFacade.java
index c1b42ade8..ec34df577 100644
--- a/ring-android/libringclient/src/main/java/net/jami/facades/ConversationFacade.java
+++ b/ring-android/libringclient/src/main/java/net/jami/facades/ConversationFacade.java
@@ -267,24 +267,18 @@ public class ConversationFacade {
     }
 
     public Completable sendFile(Conversation conversation, Uri to, File file) {
-        if (file == null || !file.exists() || !file.canRead()) {
-            Log.w(TAG, "sendFile: file not found or not readable: " + file);
-            return null;
-        }
-
-        if (conversation.isSwarm()) {
-            mAccountService.sendFile(conversation, file);
-            return Completable.complete();
-        }
-
         return Single.fromCallable(() -> {
-            /*if (file == null || !file.exists() || !file.canRead()) {
+            if (file == null || !file.exists() || !file.canRead()) {
                 Log.w(TAG, "sendFile: file not found or not readable: " + file);
                 return null;
-            }*/
+            }
 
-            DataTransfer transfer = new DataTransfer(conversation, to.getRawRingId(), conversation.getAccountId(), file.getName(), true, file.length(), 0, null);
-            mHistoryService.insertInteraction(conversation.getAccountId(), conversation, transfer).blockingAwait();
+            DataTransfer transfer = new DataTransfer(conversation, to.getRawRingId(), conversation.getAccountId(), file.getName(), true, file.length(), 0, 0L);
+            if (conversation.isSwarm()) {
+                transfer.setSwarmInfo(conversation.getUri().getRawRingId(), null, null);
+            } else {
+                mHistoryService.insertInteraction(conversation.getAccountId(), conversation, transfer).blockingAwait();
+            }
 
             transfer.destination = mDeviceRuntimeService.getConversationDir(conversation.getUri().getRawRingId());
             return transfer;
@@ -303,7 +297,7 @@ public class ConversationFacade {
         if (element.getType() == Interaction.InteractionType.DATA_TRANSFER) {
             DataTransfer transfer = (DataTransfer) element;
             if (transfer.getStatus() == Interaction.InteractionStatus.TRANSFER_ONGOING) {
-                mAccountService.cancelDataTransfer(conversation.getAccountId(), conversation.getUri().getRawRingId(), transfer.getFileId());
+                mAccountService.cancelDataTransfer(conversation.getAccountId(), conversation.getUri().getRawRingId(), transfer.getDaemonId());
             } else {
                 File file = mDeviceRuntimeService.getConversationPath(conversation.getUri().getRawRingId(), transfer.getStoragePath());
                 mDisposableBag.add(Completable.mergeArrayDelayError(
@@ -684,10 +678,10 @@ public class ConversationFacade {
         });
     }
 
-    public void cancelFileTransfer(String accountId, Uri conversationId, String fileId) {
-        mAccountService.cancelDataTransfer(accountId, conversationId.isSwarm() ? conversationId.getRawRingId() : "", fileId);
-        mNotificationService.removeTransferNotification(accountId, conversationId, fileId);
-        DataTransfer transfer = mAccountService.getAccount(accountId).getDataTransfer(fileId);
+    public void cancelFileTransfer(String accountId, Uri conversationId, long id) {
+        mAccountService.cancelDataTransfer(accountId, conversationId.isSwarm() ? conversationId.getRawRingId() : "", id);
+        mNotificationService.removeTransferNotification(accountId, conversationId, id);
+        DataTransfer transfer = mAccountService.getAccount(accountId).getDataTransfer(id);
         if (transfer != null)
             deleteConversationItem((Conversation) transfer.getConversation(), transfer);
     }
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/Account.java b/ring-android/libringclient/src/main/java/net/jami/model/Account.java
index 4e7cc06e7..934d36658 100644
--- a/ring-android/libringclient/src/main/java/net/jami/model/Account.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/Account.java
@@ -65,7 +65,7 @@ public class Account {
     private final Map<String, TrustRequest> mRequests = new HashMap<>();
     private final Map<String, Contact> mContactCache = new HashMap<>();
     private final Map<String, Conversation> swarmConversations = new HashMap<>();
-    private final HashMap<String, DataTransfer> mDataTransfers = new HashMap<>();
+    private final HashMap<Long, DataTransfer> mDataTransfers = new HashMap<>();
 
     private final Map<String, Conversation> conversations = new HashMap<>();
     private final Map<String, Conversation> pending = new HashMap<>();
@@ -379,7 +379,6 @@ public class Account {
     }
 
     public Conversation onDataTransferEvent(DataTransfer transfer) {
-        Log.d(TAG, "Accoount onDataTransferEvent");
         Conversation conversation = (Conversation) transfer.getConversation();
         Interaction.InteractionStatus transferEventCode = transfer.getStatus();
         if (transferEventCode == Interaction.InteractionStatus.TRANSFER_CREATED) {
@@ -1121,12 +1120,12 @@ public class Account {
         mLoadedProfile = profile;
     }
 
-    public DataTransfer getDataTransfer(String id) {
+    public DataTransfer getDataTransfer(long id) {
         return mDataTransfers.get(id);
     }
 
-    public void putDataTransfer(String fileId, DataTransfer transfer) {
-        mDataTransfers.put(fileId, transfer);
+    public void putDataTransfer(long transferId, DataTransfer transfer) {
+        mDataTransfers.put(transferId, transfer);
     }
 
     private static class ConversationComparator implements Comparator<Conversation> {
diff --git a/ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.java b/ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.java
index 06664d586..079d8793f 100644
--- a/ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.java
+++ b/ring-android/libringclient/src/main/java/net/jami/model/DataTransfer.java
@@ -32,7 +32,7 @@ public class DataTransfer extends Interaction {
     private long mBytesProgress;
     //private final String mPeerId;
     private String mExtension;
-    private String mFileId;
+    //private String mTransferId;
     public File destination;
 
     private static final Set<String> IMAGE_EXTENSIONS = HashUtils.asSet("jpg", "jpeg", "png", "gif");
@@ -41,8 +41,7 @@ public class DataTransfer extends Interaction {
     private static final int MAX_SIZE = 32 * 1024 * 1024;
     private static final int UNLIMITED_SIZE = 256 * 1024 * 1024;
 
-    /* Legacy constructor */
-    public DataTransfer(ConversationHistory conversation, String peer, String account, String displayName, boolean isOutgoing, long totalSize, long bytesProgress, String fileId) {
+    public DataTransfer(ConversationHistory conversation, String peer, String account, String displayName, boolean isOutgoing, long totalSize, long bytesProgress, long daemonId) {
         mAuthor = isOutgoing ? null : peer;
         mAccount = account;
         mConversation = conversation;
@@ -53,15 +52,8 @@ public class DataTransfer extends Interaction {
         mType = InteractionType.DATA_TRANSFER.toString();
         mTimestamp = System.currentTimeMillis();
         mIsRead = 1;
+        mDaemonId = daemonId;
         mIsIncoming = !isOutgoing;
-        if (fileId != null) {
-            mFileId = fileId;
-            try {
-                mDaemonId = Long.parseUnsignedLong(fileId);
-            } catch (Exception e) {
-
-            }
-        }
     }
 
     public DataTransfer(Interaction interaction) {
@@ -80,15 +72,18 @@ public class DataTransfer extends Interaction {
         mIsIncoming = interaction.mIsIncoming;//mAuthor != null;
     }
 
-    public DataTransfer(String fileId, String accountId, String peerUri, String displayName, boolean isOutgoing, long timestamp, long totalSize, long bytesProgress) {
+    public DataTransfer(long transferId, String accountId, String peerUri, String displayName, boolean isOutgoing, long timestamp, long totalSize, long bytesProgress) {
+        mDaemonId = transferId;
         mAccount = accountId;
-        mFileId = fileId;
+        //mTransferId = transferId;
+        //mPeerId = peerUri;
         mBody = displayName;
         mAuthor = peerUri;
         mIsIncoming = !isOutgoing;
         mTotalSize = totalSize;
         mBytesProgress = bytesProgress;
         mTimestamp = timestamp;
+        //mDaemonId = Long.parseUnsignedLong(transferId);
         mType = InteractionType.DATA_TRANSFER.toString();
     }
 
@@ -164,8 +159,5 @@ public class DataTransfer extends Interaction {
         return maxSize == UNLIMITED_SIZE || getTotalSize() <= maxSize;
     }
 
-    public String getFileId() {
-        return mFileId;
-    }
 
 }
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/AccountService.java b/ring-android/libringclient/src/main/java/net/jami/services/AccountService.java
index 3290304bc..7568ece1c 100644
--- a/ring-android/libringclient/src/main/java/net/jami/services/AccountService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/AccountService.java
@@ -29,6 +29,7 @@ import net.jami.daemon.Blob;
 import net.jami.daemon.DataTransferInfo;
 import net.jami.daemon.JamiService;
 import net.jami.daemon.StringMap;
+import net.jami.daemon.StringVect;
 import net.jami.daemon.UintVect;
 import net.jami.model.Account;
 import net.jami.model.AccountConfig;
@@ -1524,11 +1525,10 @@ public class AccountService {
                     String transferId = message.get("tid");
                     long tid = Long.parseLong(transferId);
                     String fileName = message.get("displayName");
-                    String fileId = message.get("fileId");
                     long fileSize = Long.parseLong(message.get("totalSize"));
-                    interaction = account.getDataTransfer(fileId);
+                    interaction = account.getDataTransfer(tid);
                     if (interaction == null) {
-                        interaction = new DataTransfer(account.getAccountID(), fileId, author, fileName, contact.isUser(), timestamp, fileSize, 0);
+                        interaction = new DataTransfer(tid, account.getAccountID(), author, fileName, contact.isUser(), timestamp, fileSize, 0);
                         File path = mDeviceRuntimeService.getConversationPath(conversation.getUri().getRawRingId(), ((DataTransfer) interaction).getStoragePath());
                         boolean exists = path.exists();
                         if (exists)
@@ -1690,7 +1690,7 @@ public class AccountService {
 
             Log.i(TAG, "sendFile() id=" + dataTransfer.getId() + " accountId=" + dataTransferInfo.getAccountId() + ", peer=" + dataTransferInfo.getPeer() + ", filePath=" + dataTransferInfo.getPath());
             long[] id = new long[1];
-            DataTransferError err = getDataTransferError(JamiService.sendFileLegacy(dataTransferInfo, id));
+            DataTransferError err = getDataTransferError(JamiService.sendFile(dataTransferInfo, id));
             if (err != DataTransferError.SUCCESS) {
                 throw new IOException(err.name());
             } else {
@@ -1701,10 +1701,6 @@ public class AccountService {
         }).subscribeOn(Schedulers.from(mExecutor));
     }
 
-    public void sendFile(Conversation conversation, final File file) {
-        mExecutor.execute(() -> JamiService.sendFile(conversation.getAccountId(), conversation.getUri().getRawRingId(), file.getAbsolutePath(), file.getName(), ""));
-    }
-
     public List<net.jami.daemon.Message> getLastMessages(String accountId, long baseTime) {
         try {
             return mExecutor.submit(() -> SwigNativeConverter.toJava(JamiService.getLastMessages(accountId, baseTime))).get();
@@ -1714,11 +1710,11 @@ public class AccountService {
         return new ArrayList<>();
     }
 
-    public void acceptFileTransfer(final String accountId, final Uri conversationUri, String fileId) {
+    public void acceptFileTransfer(final String accountId, final Uri conversationUri, long id) {
         Account account = getAccount(accountId);
         if (account != null) {
             Conversation conversation = account.getByUri(conversationUri);
-            acceptFileTransfer(conversation, account.getDataTransfer(fileId));
+            acceptFileTransfer(conversation, account.getDataTransfer(id));
         }
     }
 
@@ -1726,18 +1722,18 @@ public class AccountService {
         if (transfer == null)
             return;
         File path = mDeviceRuntimeService.getTemporaryPath(conversation.getUri().getRawRingId(), transfer.getStoragePath());
-        Log.i(TAG, "acceptFileTransfer() id=" + transfer.getFileId() + ", path=" + path.getAbsolutePath());
-        if (conversation.isSwarm()) {
-            String conversationId = conversation.getUri().getRawRingId();
-            JamiService.downloadFile(conversation.getAccountId(), conversationId, transfer.getFileId(), path.getAbsolutePath());
-        } else {
-            JamiService.acceptFileTransfer(conversation.getAccountId(), transfer.getFileId(), path.getAbsolutePath());
-        }
+        String conversationId = conversation.getUri().getRawRingId();
+        acceptFileTransfer(conversation.getAccountId(), conversationId, transfer.getDaemonId(), path.getAbsolutePath(), 0);
     }
 
-    public void cancelDataTransfer(final String accountId, final String conversationId, final String fileId) {
-        Log.i(TAG, "cancelDataTransfer() id=" + fileId);
-        mExecutor.execute(() -> JamiService.cancelDataTransfer(accountId, conversationId, fileId));
+    private void acceptFileTransfer(final String accountId, final String conversationId, final Long dataTransferId, final String filePath, long offset) {
+        Log.i(TAG, "acceptFileTransfer() id=" + dataTransferId + ", path=" + filePath + ", offset=" + offset);
+        mExecutor.execute(() -> JamiService.acceptFileTransfer(accountId, conversationId, dataTransferId, filePath, offset));
+    }
+
+    public void cancelDataTransfer(final String accountId, final String conversationId, long dataTransferId) {
+        Log.i(TAG, "cancelDataTransfer() id=" + dataTransferId);
+        mExecutor.execute(() -> JamiService.cancelDataTransfer(accountId, conversationId, dataTransferId));
     }
 
     private class DataTransferRefreshTask implements Runnable {
@@ -1756,7 +1752,7 @@ public class AccountService {
         public void run() {
             synchronized (mToUpdate) {
                 if (mToUpdate.getStatus() == Interaction.InteractionStatus.TRANSFER_ONGOING) {
-                    dataTransferEvent(mAccount, mConversation, mToUpdate.getFileId(), 5);
+                    dataTransferEvent(mAccount, mConversation, mToUpdate.getDaemonId(), 5);
                 } else {
                     scheduledTask.cancel(false);
                     scheduledTask = null;
@@ -1765,7 +1761,7 @@ public class AccountService {
         }
     }
 
-    void dataTransferEvent(String accountId, String conversationId, final String fileId, int eventCode) {
+    void dataTransferEvent(String accountId, String conversationId, final long transferId, int eventCode) {
         Account account = getAccount(accountId);
         if (account != null) {
             Conversation conversation = StringUtils.isEmpty(conversationId) ? null : account.getSwarm(conversationId);
@@ -1773,37 +1769,33 @@ public class AccountService {
                 conversation = account.getByUri(conversationId);
             if (conversation == null)
                 return;
-            dataTransferEvent(account, conversation, fileId, eventCode);
+            dataTransferEvent(account, conversation, transferId, eventCode);
         }
     }
-    void dataTransferEvent(Account account, Conversation conversation, final String fileId, int eventCode) {
+    void dataTransferEvent(Account account, Conversation conversation, final long transferId, int eventCode) {
         Interaction.InteractionStatus transferStatus = getDataTransferEventCode(eventCode);
         Log.d(TAG, "Data Transfer " + transferStatus);
         DataTransferInfo info = new DataTransferInfo();
-        DataTransferError err = getDataTransferError(JamiService.dataTransferInfo(account.getAccountID(), fileId, info));
-        if (err != DataTransferError.SUCCESS) {
-            Log.d(TAG, "Data Transfer error getting details " + err);
+        if (getDataTransferError(JamiService.dataTransferInfo(account.getAccountID(), conversation.getUri().getRawRingId(), transferId, info)) != DataTransferError.SUCCESS)
             return;
-        }
 
         boolean outgoing = info.getFlags() == 0;
-        DataTransfer transfer = account.getDataTransfer(fileId);
+        DataTransfer transfer = account.getDataTransfer(transferId);
         if (transfer == null) {
             if (outgoing && mStartingTransfer != null) {
-                Log.d(TAG, "Data Transfer mStartingTransfer");
                 transfer = mStartingTransfer;
                 mStartingTransfer = null;
             } else {
                 transfer = new DataTransfer(conversation, info.getPeer(), account.getAccountID(), info.getDisplayName(),
                         outgoing, info.getTotalSize(),
-                        info.getBytesProgress(), fileId);
+                        info.getBytesProgress(), transferId);
                 if (conversation.isSwarm()) {
                     transfer.setSwarmInfo(conversation.getUri().getRawRingId(), null, null);
                 } else {
                     mHistoryService.insertInteraction(account.getAccountID(), conversation, transfer).blockingAwait();
                 }
             }
-            account.putDataTransfer(fileId, transfer);
+            account.putDataTransfer(transferId, transfer);
         } else synchronized (transfer) {
             InteractionStatus oldState = transfer.getStatus();
             if (oldState != transferStatus) {
@@ -1832,7 +1824,6 @@ public class AccountService {
             }
         }
 
-        Log.d(TAG, "Data Transfer dataTransferSubject.onNext");
         dataTransferSubject.onNext(transfer);
     }
 
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/DaemonService.java b/ring-android/libringclient/src/main/java/net/jami/services/DaemonService.java
index 57ca9ec89..cd26b52b8 100644
--- a/ring-android/libringclient/src/main/java/net/jami/services/DaemonService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/DaemonService.java
@@ -380,9 +380,9 @@ public class DaemonService {
 
     class DaemonDataTransferCallback extends DataTransferCallback {
         @Override
-        public void dataTransferEvent(String accountId, String conversationId, String fileId, int eventCode) {
-            Log.d(TAG, "dataTransferEvent: conversationId=" + conversationId + ", fileId=" + fileId + ", eventCode=" + eventCode);
-            mAccountService.dataTransferEvent(accountId, conversationId, fileId, eventCode);
+        public void dataTransferEvent(String accountId, String conversationId, long transferId, int eventCode) {
+            Log.d(TAG, "dataTransferEvent: conversationId=" + conversationId + ", transferId=" + transferId + ", eventCode=" + eventCode);
+            mAccountService.dataTransferEvent(accountId, conversationId, transferId, eventCode);
         }
     }
 
diff --git a/ring-android/libringclient/src/main/java/net/jami/services/NotificationService.java b/ring-android/libringclient/src/main/java/net/jami/services/NotificationService.java
index 1229695e3..76e5f4d60 100644
--- a/ring-android/libringclient/src/main/java/net/jami/services/NotificationService.java
+++ b/ring-android/libringclient/src/main/java/net/jami/services/NotificationService.java
@@ -52,7 +52,7 @@ public interface NotificationService {
     void showFileTransferNotification(Conversation conversation, DataTransfer info);
     void cancelFileNotification(int id, boolean isMigratingToService);
     void handleDataTransferNotification(DataTransfer transfer, Conversation contact, boolean remove);
-    void removeTransferNotification(String accountId, Uri conversationUri, String fileId);
+    void removeTransferNotification(String accountId, Uri conversationUri, long transferId);
     Object getDataTransferNotification(int notificationId);
 
     void updateNotification(Object notification, int notificationId);
-- 
GitLab