/*
* AutoAbsence.java
*
* Created on 4 Июль 2010 г., 22:42
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
// #sijapp cond.if modules_ABSENCE is "true" #
package jimm.modules;
import jimm.Jimm;
import jimm.Options;
import protocol.*;
import protocol.ui.StatusInfo;
import protocol.ui.XStatusInfo;
/**
*
* @author Vladimir Kryukov
*/
public final class AutoAbsence {
public static final AutoAbsence instance = new AutoAbsence();
public AutoAbsence() {
absence = false;
userActivity();
}
private Protocol[] protos;
private Profile[] profiles;
private long activityOutTime;
private boolean absence;
private void doAway() {
if (absence) {
return;
}
int count = Jimm.getJimm().getCL().getManager().getModel().getProtocolCount();
protos = new Protocol[count];
profiles = new Profile[count];
for (int i = 0; i < count; ++i) {
Protocol p = Jimm.getJimm().getCL().getManager().getModel().getProtocol(i);
if (isSupported(p)) {
Profile pr = new Profile();
protos[i] = p;
profiles[i] = pr;
pr.statusIndex = p.getProfile().statusIndex;
pr.statusMessage = p.getProfile().statusMessage;
pr.xstatusIndex = p.getProfile().xstatusIndex;
pr.xstatusTitle = p.getProfile().xstatusTitle;
pr.xstatusDescription = p.getProfile().xstatusDescription;
// #sijapp cond.if protocols_MRIM is "true" #
if (protos[i] instanceof protocol.mrim.Mrim) {
p.getProfile().xstatusIndex = XStatusInfo.XSTATUS_NONE;
p.getProfile().xstatusTitle = "";
p.getProfile().xstatusDescription = "";
}
// #sijapp cond.end #
p.setOnlineStatus(StatusInfo.STATUS_AWAY, pr.statusMessage);
} else {
protos[i] = null;
}
}
absence = true;
}
private boolean isSupported(Protocol p) {
return !((null == p) || !p.isConnected() || p.isAway(p.getProfile().statusIndex));
}
private void doRestore() {
if (!absence || (null == protos)) {
return;
}
absence = false;
for (int i = 0; i < protos.length; ++i) {
if (null != protos[i]) {
Profile pr = profiles[i];
// #sijapp cond.if protocols_MRIM is "true" #
if (protos[i] instanceof protocol.mrim.Mrim) {
Profile p = protos[i].getProfile();
p.xstatusIndex = pr.xstatusIndex;
p.xstatusTitle = pr.xstatusTitle;
p.xstatusDescription = pr.xstatusDescription;
}
// #sijapp cond.end #
protos[i].setOnlineStatus(pr.statusIndex, pr.statusMessage);
}
}
}
private boolean isBlockOn() {
return Options.getBoolean(Options.OPTION_AA_BLOCK);
}
public final void updateTime() {
if (!absence) {
try {
if (0 < activityOutTime) {
if (activityOutTime < Jimm.getCurrentGmtTime()) {
doAway();
activityOutTime = -1;
}
} else if (Jimm.getJimm().isPaused()) {
away();
}
} catch (Exception ignored) {
}
}
}
public final void away() {
if (isBlockOn()) {
doAway();
}
}
public final void online() {
if (isBlockOn()) {
doRestore();
}
}
public final void updateOptions() {
}
public final void userActivity() {
try {
if (!Jimm.getJimm().isLocked() && !Jimm.getJimm().isPaused()) {
int init = Options.getInt(Options.OPTION_AA_TIME) * 60; // seconds
if (0 < init) {
activityOutTime = Jimm.getCurrentGmtTime() + init;
} else {
activityOutTime = -1;
}
if (absence) {
doRestore();
}
}
} catch (Exception ignored) {
}
}
}
// #sijapp cond.end#