package com.rafali.flickruploader;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.rafali.common.AndroidRpcInterface;
import com.rafali.common.STR;
import com.rafali.common.ToolString;
public class AndroidRpcImpl implements AndroidRpcInterface {
private static final Logger logger = LoggerFactory.getLogger(AndroidRpcImpl.class.getPackage().getName());
@SuppressWarnings("unchecked")
@Deprecated
public Object[] checkPremium(List<String> emails) {
boolean premium = false;
String sku = null;
boolean purchased = false;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query query = pm.newQuery(Coupon.class);
query.setFilter(":param.contains(email)");
List<Coupon> result = (List<Coupon>) query.execute(emails);
for (Coupon coupon : result) {
premium = coupon.isPremium();
sku = coupon.getSku();
purchased = coupon.getPurchased();
}
logger.debug(emails + " : " + result);
} catch (Exception e) {
logger.error(ToolString.stack2string(e));
} finally {
pm.close();
}
logger.debug("premium:" + premium + ", sku:" + sku);
return new Object[] { premium, sku, purchased };
}
static Date releaseDate = new Date(1395129600000L);
@SuppressWarnings("unchecked")
@Override
public Object[] checkPremiumStatus(AndroidDevice androidDevice) {
if (premiumDevices.contains(androidDevice.getId())) {
return new Object[] { true, null, true };
}
boolean premium = false;
String sku = null;
boolean purchased = false;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query query = pm.newQuery(Coupon.class);
query.setFilter(":param.contains(email)");
List<Coupon> result = (List<Coupon>) query.execute(androidDevice.getEmails());
logger.debug(androidDevice.getEmails() + " : " + result.size() + " coupons");
for (Coupon coupon : result) {
logger.debug("coupon : " + coupon);
if (coupon.getPurchased() || coupon.getDateUpdated().after(releaseDate)) {
premium = coupon.isPremium();
sku = coupon.getSku();
purchased = coupon.getPurchased();
} else {
if (ToolString.isNotBlank(coupon.getSku())) {
sku = coupon.getSku();
} else {
logger.warn("cannot use old coupon here");
}
}
}
} catch (Exception e) {
logger.error(ToolString.stack2string(e));
} finally {
pm.close();
}
logger.debug("premium:" + premium + ", sku:" + sku + ", purchased:" + purchased);
return new Object[] { premium, sku, purchased };
}
static final List<String> premiumDevices = Arrays.asList("df804c819bfd2bb7");
@Override
public void sendEmail(String recipient, String subject, String bodyHtml, String fromAddress) {
logger.debug("sendMail " + recipient + ", " + subject);
ToolMail.sendEmailNow(recipient, subject, bodyHtml, fromAddress);
}
@Deprecated
public void setPremium(boolean premium, List<String> emails) {
logger.warn("setPremium deprecated call : " + emails + " : premium=" + premium);
}
@Override
public void setPremium(boolean premium, boolean purchased, List<String> emails) {
logger.debug(emails + " : premium=" + premium);
try {
for (String email : emails) {
MailHandlerServlet.setPremium(email, premium, purchased);
}
} catch (Exception e) {
logger.error(ToolString.stack2string(e));
}
}
@Deprecated
public void createOrUpdate(AndroidDevice androidDevice) {
ensureInstall(androidDevice);
}
@SuppressWarnings("unchecked")
@Override
public AppInstall ensureInstall(AndroidDevice androidDevice) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
AppInstall appInstall;
Query query = pm.newQuery(AppInstall.class);
query.setFilter("deviceId == :param");
List<AppInstall> result = (List<AppInstall>) query.execute(androidDevice.getId());
if (result.isEmpty()) {
logger.debug("New install : " + androidDevice);
String email = androidDevice.getEmails().isEmpty() ? null : androidDevice.getEmails().iterator().next();
sendEmail(STR.supportEmail, "[FlickrUploader] New install - " + androidDevice.getCountryCode() + " - " + androidDevice.getLanguage() + " - " + androidDevice.getAppVersion() + " - "
+ email, androidDevice.getEmails() + " - " + androidDevice.getAndroidVersion() + " - " + androidDevice.getAppVersion(), STR.supportEmail);
appInstall = new AppInstall(androidDevice.getId(), androidDevice, androidDevice.getEmails());
pm.makePersistent(appInstall);
} else {
logger.debug("Updating install : " + androidDevice);
appInstall = result.get(0);
appInstall.setAndroidDevice(androidDevice);
}
return pm.detachCopy(appInstall);
} catch (Exception e) {
logger.error(ToolString.stack2string(e));
} finally {
pm.close();
}
return null;
}
@Override
public Boolean confirmPaypalPayment(String paypalResultJson) {
// TODO paypal actual API check
return true;
}
}