Search in sources :

Example 1 with DataTransfer

use of cx.ring.model.DataTransfer in project ring-client-android by savoirfairelinux.

the class ConversationPresenter method update.

@Override
public void update(Observable observable, ServiceEvent event) {
    if (observable instanceof AccountService && event != null) {
        if (event.getEventType() == ServiceEvent.EventType.REGISTERED_NAME_FOUND) {
            final String name = event.getEventInput(ServiceEvent.EventInput.NAME, String.class);
            final String address = event.getEventInput(ServiceEvent.EventInput.ADDRESS, String.class);
            final int state = event.getEventInput(ServiceEvent.EventInput.STATE, Integer.class);
            getView().updateView(address, name, state);
        }
    } else if (observable instanceof ConversationFacade && event != null) {
        switch(event.getEventType()) {
            case DATA_TRANSFER:
                getView().refreshView(mConversation);
                getView().scrollToEnd();
                break;
            case DATA_TRANSFER_UPDATE:
                {
                    DataTransfer transfer = event.getEventInput(ServiceEvent.EventInput.TRANSFER_INFO, DataTransfer.class);
                    getView().updateTransfer(transfer);
                    break;
                }
            case INCOMING_MESSAGE:
                getView().refreshView(mConversation);
                getView().scrollToEnd();
                break;
            case CONVERSATIONS_CHANGED:
                loadHistory();
                break;
        }
    }
}
Also used : DataTransfer(cx.ring.model.DataTransfer) ConversationFacade(cx.ring.facades.ConversationFacade) AccountService(cx.ring.services.AccountService)

Example 2 with DataTransfer

use of cx.ring.model.DataTransfer in project ring-client-android by savoirfairelinux.

the class ConversationFacade method parseHistoryTransfers.

private void parseHistoryTransfers(List<DataTransfer> historyTexts, boolean acceptAllMessages) {
    for (DataTransfer htext : historyTexts) {
        CallContact contact = mContactService.findContactByNumber(htext.getPeerId());
        String key = contact.getIds().get(0);
        if (mConversationMap.containsKey(key)) {
            mConversationMap.get(key).addFileTransfer(htext);
        } else if (acceptAllMessages) {
            Conversation conversation = new Conversation(contact);
            conversation.addFileTransfer(htext);
            mConversationMap.put(key, conversation);
        }
    }
}
Also used : DataTransfer(cx.ring.model.DataTransfer) Conversation(cx.ring.model.Conversation) CallContact(cx.ring.model.CallContact)

Example 3 with DataTransfer

use of cx.ring.model.DataTransfer in project ring-client-android by savoirfairelinux.

the class ConversationFacade method sendFile.

public void sendFile(String account, Uri to, File file) {
    if (file == null) {
        return;
    }
    // check file
    if (!file.exists()) {
        Log.w(TAG, "sendFile: file not found");
        return;
    }
    if (!file.canRead()) {
        Log.w(TAG, "sendFile: file not readable");
        return;
    }
    String peerId = to.getRawRingId();
    DataTransfer transfer = new DataTransfer(0L, file.getName(), true, file.length(), 0, peerId, account);
    // get generated ID
    mHistoryService.insertDataTransfer(transfer);
    File dest = mDeviceRuntimeService.getConversationPath(peerId, transfer.getStoragePath());
    if (!FileUtils.moveFile(file, dest)) {
        Log.e(TAG, "sendFile: can't move file to " + dest);
        return;
    }
    // send file
    mAccountService.sendFile(transfer, dest);
}
Also used : DataTransfer(cx.ring.model.DataTransfer) File(java.io.File)

Example 4 with DataTransfer

use of cx.ring.model.DataTransfer in project ring-client-android by savoirfairelinux.

the class ConversationFacade method update.

@Override
public void update(Observable observable, ServiceEvent event) {
    if (event == null) {
        return;
    }
    ServiceEvent mEvent;
    if (observable instanceof HistoryService) {
        switch(event.getEventType()) {
            case INCOMING_MESSAGE:
                {
                    TextMessage txt = event.getEventInput(ServiceEvent.EventInput.MESSAGE, TextMessage.class);
                    if (txt == null) {
                        Log.d(TAG, "Received a null text message");
                        return;
                    }
                    parseNewMessage(txt);
                    updateTextNotifications();
                    setChanged();
                    mEvent = new ServiceEvent(ServiceEvent.EventType.INCOMING_MESSAGE);
                    notifyObservers(mEvent);
                    break;
                }
            case ACCOUNT_MESSAGE_STATUS_CHANGED:
                {
                    TextMessage newMsg = event.getEventInput(ServiceEvent.EventInput.MESSAGE, TextMessage.class);
                    Conversation conv = getConversationByContact(mContactService.findContactByNumber(newMsg.getNumber()));
                    if (conv != null) {
                        conv.updateTextMessage(newMsg);
                    }
                    setChanged();
                    mEvent = new ServiceEvent(ServiceEvent.EventType.INCOMING_MESSAGE);
                    notifyObservers(mEvent);
                    break;
                }
            case HISTORY_LOADED:
                Account account = mAccountService.getCurrentAccount();
                if (account != null) {
                    boolean acceptAllMessages = account.getDetailBoolean(ConfigKey.DHT_PUBLIC_IN);
                    mConversationMap.clear();
                    addContacts(acceptAllMessages);
                    List<HistoryCall> historyCalls = (List<HistoryCall>) event.getEventInput(ServiceEvent.EventInput.HISTORY_CALLS, ArrayList.class);
                    parseHistoryCalls(historyCalls, acceptAllMessages);
                    List<HistoryText> historyTexts = (List<HistoryText>) event.getEventInput(ServiceEvent.EventInput.HISTORY_TEXTS, ArrayList.class);
                    parseHistoryTexts(historyTexts, acceptAllMessages);
                    List<DataTransfer> historyTransfers = (List<DataTransfer>) event.getEventInput(ServiceEvent.EventInput.HISTORY_TRANSFERS, ArrayList.class);
                    parseHistoryTransfers(historyTransfers, acceptAllMessages);
                    aggregateHistory();
                    searchForRingIdInBlockchain();
                }
                setChanged();
                mEvent = new ServiceEvent(ServiceEvent.EventType.CONVERSATIONS_CHANGED);
                notifyObservers(mEvent);
                break;
            case HISTORY_MODIFIED:
                refreshConversations();
                break;
        }
    } else if (observable instanceof CallService) {
        Conversation conversation = null;
        Conference conference = null;
        SipCall call;
        switch(event.getEventType()) {
            case CALL_STATE_CHANGED:
                call = event.getEventInput(ServiceEvent.EventInput.CALL, SipCall.class);
                if (call == null) {
                    Log.w(TAG, "CALL_STATE_CHANGED : call is null");
                    return;
                }
                int newState = call.getCallState();
                mHardwareService.updateAudioState(newState == SipCall.State.RINGING && call.isIncoming(), call.isOnGoing() && !call.isAudioOnly());
                for (Conversation conv : mConversationMap.values()) {
                    conference = conv.getConference(call.getCallId());
                    if (conference != null) {
                        conversation = conv;
                        Log.w(TAG, "CALL_STATE_CHANGED : found conversation " + call.getCallId());
                        break;
                    }
                }
                if (conversation == null) {
                    conversation = startConversation(call.getContact());
                    conference = new Conference(call);
                    conversation.addConference(conference);
                }
                Log.w(TAG, "CALL_STATE_CHANGED : updating call state to " + newState);
                if ((call.isRinging() || newState == SipCall.State.CURRENT) && call.getTimestampStart() == 0) {
                    call.setTimestampStart(System.currentTimeMillis());
                }
                if ((newState == SipCall.State.CURRENT && call.isIncoming()) || newState == SipCall.State.RINGING && call.isOutGoing()) {
                    mAccountService.sendProfile(call.getCallId(), call.getAccount());
                } else if (newState == SipCall.State.HUNGUP || newState == SipCall.State.BUSY || newState == SipCall.State.FAILURE || newState == SipCall.State.OVER) {
                    mNotificationService.cancelCallNotification(call.getCallId().hashCode());
                    mHardwareService.closeAudioState();
                    if (newState == SipCall.State.HUNGUP) {
                        call.setTimestampEnd(System.currentTimeMillis());
                    }
                    if (call.getTimestampStart() == 0) {
                        call.setTimestampStart(System.currentTimeMillis());
                    }
                    if (call.getTimestampEnd() == 0) {
                        call.setTimestampEnd(System.currentTimeMillis());
                    }
                    mHistoryService.insertNewEntry(conference);
                    conference.removeParticipant(call);
                    conversation.addHistoryCall(new HistoryCall(call));
                    mCallService.removeCallForId(call.getCallId());
                }
                if (conference.getParticipants().isEmpty()) {
                    conversation.removeConference(conference);
                }
                setChanged();
                mEvent = new ServiceEvent(ServiceEvent.EventType.CALL_STATE_CHANGED);
                notifyObservers(mEvent);
                break;
            case INCOMING_CALL:
                call = event.getEventInput(ServiceEvent.EventInput.CALL, SipCall.class);
                conversation = startConversation(call.getContact());
                conference = new Conference(call);
                conversation.addConference(conference);
                mNotificationService.showCallNotification(conference);
                mHardwareService.setPreviewSettings();
                Conference currenConf = getCurrentCallingConf();
                mHardwareService.updateAudioState(currenConf.getState() == SipCall.State.RINGING && currenConf.isIncoming(), false);
                setChanged();
                ServiceEvent serviceEvent = new ServiceEvent(ServiceEvent.EventType.INCOMING_CALL);
                notifyObservers(serviceEvent);
                break;
        }
    } else if (observable instanceof ContactService) {
        switch(event.getEventType()) {
            case CONTACTS_CHANGED:
                refreshConversations();
                break;
        }
    } else if (observable instanceof AccountService) {
        switch(event.getEventType()) {
            case REGISTERED_NAME_FOUND:
                {
                    int state = event.getEventInput(ServiceEvent.EventInput.STATE, Integer.class);
                    if (state != 0) {
                        break;
                    }
                    String accountId = event.getEventInput(ServiceEvent.EventInput.ACCOUNT_ID, String.class);
                    String name = event.getEventInput(ServiceEvent.EventInput.NAME, String.class);
                    Uri address = new Uri(event.getEventInput(ServiceEvent.EventInput.ADDRESS, String.class));
                    if (mContactService.setRingContactName(accountId, address, name)) {
                        setChanged();
                        notifyObservers(new ServiceEvent(ServiceEvent.EventType.USERNAME_CHANGED));
                    }
                    break;
                }
            case DATA_TRANSFER:
                {
                    DataTransferEventCode transferEventCode = event.getEventInput(ServiceEvent.EventInput.TRANSFER_EVENT_CODE, DataTransferEventCode.class);
                    DataTransfer transfer = event.getEventInput(ServiceEvent.EventInput.TRANSFER_INFO, DataTransfer.class);
                    handleDataTransferEvent(transfer, transferEventCode);
                    break;
                }
        }
    }
}
Also used : Account(cx.ring.model.Account) SipCall(cx.ring.model.SipCall) SecureSipCall(cx.ring.model.SecureSipCall) HistoryText(cx.ring.model.HistoryText) ArrayList(java.util.ArrayList) HistoryService(cx.ring.services.HistoryService) Conversation(cx.ring.model.Conversation) Conference(cx.ring.model.Conference) Uri(cx.ring.model.Uri) HistoryCall(cx.ring.model.HistoryCall) ContactService(cx.ring.services.ContactService) DataTransfer(cx.ring.model.DataTransfer) ServiceEvent(cx.ring.model.ServiceEvent) ArrayList(java.util.ArrayList) List(java.util.List) AccountService(cx.ring.services.AccountService) TextMessage(cx.ring.model.TextMessage) DataTransferEventCode(cx.ring.model.DataTransferEventCode) CallService(cx.ring.services.CallService)

Example 5 with DataTransfer

use of cx.ring.model.DataTransfer in project ring-client-android by savoirfairelinux.

the class AccountService method dataTransferEvent.

public void dataTransferEvent(final long transferId, int eventCode) {
    DataTransferEventCode dataEvent = getDataTransferEventCode(eventCode);
    DataTransferInfo info = new DataTransferInfo();
    dataTransferInfo(transferId, info);
    boolean outgoing = info.getFlags() == 0;
    DataTransfer transfer = mDataTransfers.get(transferId);
    if (transfer == null && outgoing && mStartingTransfer != null) {
        transfer = mStartingTransfer;
        mStartingTransfer = null;
        transfer.setDataTransferId(transferId);
        mDataTransfers.put(transferId, transfer);
    }
    if (transfer == null) {
        transfer = new DataTransfer(transferId, info.getDisplayName(), outgoing, info.getTotalSize(), info.getBytesProgress(), info.getPeer(), info.getAccountId());
        mHistoryService.insertDataTransfer(transfer);
        mDataTransfers.put(transferId, transfer);
    } else {
        DataTransferEventCode oldState = transfer.getEventCode();
        if (oldState != dataEvent) {
            if (dataEvent == DataTransferEventCode.ONGOING) {
                if (mTransferRefreshTimer == null) {
                    mTransferRefreshTimer = new Timer();
                }
                mTransferRefreshTimer.scheduleAtFixedRate(new DataTransferRefreshTask(transfer), DATA_TRANSFER_REFRESH_PERIOD, DATA_TRANSFER_REFRESH_PERIOD);
            }
        }
        transfer.setEventCode(dataEvent);
        transfer.setBytesProgress(info.getBytesProgress());
        mHistoryService.updateDataTransfer(transfer);
    }
    setChanged();
    ServiceEvent event = new ServiceEvent(ServiceEvent.EventType.DATA_TRANSFER);
    event.addEventInput(ServiceEvent.EventInput.TRANSFER_EVENT_CODE, dataEvent);
    event.addEventInput(ServiceEvent.EventInput.TRANSFER_INFO, transfer);
    notifyObservers(event);
}
Also used : Timer(java.util.Timer) DataTransfer(cx.ring.model.DataTransfer) ServiceEvent(cx.ring.model.ServiceEvent) DataTransferInfo(cx.ring.daemon.DataTransferInfo) DataTransferEventCode(cx.ring.model.DataTransferEventCode)

Aggregations

DataTransfer (cx.ring.model.DataTransfer)10 ServiceEvent (cx.ring.model.ServiceEvent)4 File (java.io.File)4 HistoryCall (cx.ring.model.HistoryCall)3 HistoryText (cx.ring.model.HistoryText)3 Context (android.content.Context)2 Conversation (cx.ring.model.Conversation)2 DataTransferEventCode (cx.ring.model.DataTransferEventCode)2 TextMessage (cx.ring.model.TextMessage)2 AccountService (cx.ring.services.AccountService)2 SQLException (java.sql.SQLException)2 ArrayList (java.util.ArrayList)2 DownloadManager (android.app.DownloadManager)1 Intent (android.content.Intent)1 Drawable (android.graphics.drawable.Drawable)1 Uri (android.net.Uri)1 ActivityOptionsCompat (android.support.v4.app.ActivityOptionsCompat)1 RecyclerView (android.support.v7.widget.RecyclerView)1 MenuInflater (android.view.MenuInflater)1 View (android.view.View)1