/*
* Copyright (C) 2015 Actor LLC. <https://actor.im>
*/
package im.actor.core.js.providers;
import com.google.gwt.media.client.Audio;
import java.util.List;
import im.actor.core.Messenger;
import im.actor.core.entity.Avatar;
import im.actor.core.entity.GroupType;
import im.actor.core.entity.Notification;
import im.actor.core.entity.Peer;
import im.actor.core.entity.PeerType;
import im.actor.core.js.entity.JsPeer;
import im.actor.core.js.JsMessenger;
import im.actor.core.js.providers.electron.JsElectronApp;
import im.actor.core.js.providers.notification.JsManagedNotification;
import im.actor.core.js.providers.notification.JsNotification;
import im.actor.core.providers.NotificationProvider;
import im.actor.core.viewmodel.GroupVM;
import im.actor.core.viewmodel.UserVM;
public class JsNotificationsProvider implements NotificationProvider {
// private JsNotification currentNotification;
private Audio inappSound;
public JsNotificationsProvider() {
inappSound = Audio.createIfSupported();
if (inappSound != null) {
inappSound.setSrc("assets/sound/notification.mp3");
}
}
@Override
public void onMessageArriveInApp(Messenger messenger) {
playSound();
}
@Override
public void onNotification(Messenger messenger, List<Notification> topNotifications, int messagesCount, int conversationsCount) {
String peerTitle;
String peerKey = null;
String peerAvatarUrl = null;
String contentMessage = "";
Notification notification = topNotifications.get(0);
// Peer info
Peer peer = notification.getPeer();
if (conversationsCount == 1) {
Avatar peerAvatar;
JsPeer jsPeer = JsPeer.create(peer);
if (peer.getPeerType() == PeerType.PRIVATE) {
UserVM userVM = messenger.getUser(peer.getPeerId());
peerTitle = userVM.getName().get();
peerAvatar = userVM.getAvatar().get();
} else {
GroupVM groupVM = messenger.getGroup(peer.getPeerId());
peerTitle = groupVM.getName().get();
peerAvatar = groupVM.getAvatar().get();
}
if (peerAvatar != null && peerAvatar.getSmallImage() != null) {
peerAvatarUrl = ((JsMessenger) messenger).getFileUrl(peerAvatar.getSmallImage().getFileReference());
}
peerKey = jsPeer.getPeerKey();
} else {
peerTitle = "New messages";
peerAvatarUrl = "assets/img/notification_icon_512.png";
}
// Notification body
int nCount = Math.min(topNotifications.size(), 5);
boolean showCounters = false;
if (topNotifications.size() > 5) {
nCount--;
showCounters = true;
}
boolean isChannel = peer.getPeerType() == PeerType.GROUP && messenger.getGroups().get(peer.getPeerId()).getGroupType() == GroupType.CHANNEL;
if (conversationsCount == 1) {
for (int i = 0; i < nCount; i++) {
Notification n = topNotifications.get(i);
if (contentMessage.length() > 0) {
contentMessage += "\n";
}
if (peer.getPeerType() == PeerType.GROUP) {
contentMessage += messenger.getUser(notification.getSender()).getName().get() + ": ";
}
contentMessage += messenger.getFormatter().formatContentText(n.getSender(),
n.getContentDescription().getContentType(),
n.getContentDescription().getText(),
n.getContentDescription().getRelatedUser(),
isChannel);
}
if (showCounters) {
contentMessage += "\n+" + (messagesCount - 4) + " new messages";
}
} else {
for (int i = 0; i < nCount; i++) {
Notification n = topNotifications.get(i);
if (contentMessage.length() > 0) {
contentMessage += "\n";
}
String senderName = messenger.getUser(n.getSender()).getName().get();
if (n.getPeer().getPeerType() == PeerType.GROUP) {
String groupName = messenger.getGroup(n.getPeer().getPeerId()).getName().get();
contentMessage += "[" + groupName + "] " + senderName + ": ";
} else {
contentMessage += senderName + ": ";
}
contentMessage += messenger.getFormatter().formatContentText(n.getSender(),
n.getContentDescription().getContentType(),
n.getContentDescription().getText(),
n.getContentDescription().getRelatedUser(),
isChannel);
}
if (showCounters) {
contentMessage += "\n+" + (messagesCount - 4) + " new messages in " + conversationsCount + " conversations";
}
}
if (!JsElectronApp.isElectron()) {
playSound();
}
if (!JsNotification.isSupported()) {
return;
}
if (!JsNotification.isGranted()) {
return;
}
JsManagedNotification.show(peerKey, peerTitle, contentMessage, peerAvatarUrl);
}
@Override
public void onUpdateNotification(Messenger messenger, List<Notification> topNotifications, int messagesCount, int conversationsCount) {
// TODO: Implement
}
@Override
public void hideAllNotifications() {
if (JsElectronApp.isElectron()) {
JsElectronApp.hideNewMessages();
}
}
private void playSound() {
if (inappSound != null) {
inappSound.pause();
inappSound.setCurrentTime(0);
inappSound.play();
}
}
}