/*
* Copyright 2015 Shashank Tulsyan <shashaank at neembuu.com>.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package neembuu.uploader.external;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Date;
import java.util.logging.Level;
import javax.swing.SwingUtilities;
import neembuu.rus.Rusila;
import neembuu.uploader.utils.NULogger;
import neembuu.uploader.versioning.ShowUpdateNotification;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
/** This thread checks for new updates at every launch.
*
* @author vigneshwaran
*/
public class CheckMajorUpdate /*extends Thread*/ {
private final String local_version_xml;
private final ShowUpdateNotification showUpdateNotification;
public CheckMajorUpdate(Path external,ShowUpdateNotification showUpdateNotification) {
currentver = showUpdateNotification.pvp().getVersion();
this.local_version_xml = Rusila.get(Rusila.create(external), "version.xml").s(
"<version>"+currentver+ "</version>"
); this.showUpdateNotification = showUpdateNotification;
}
//variables to store current and available version
private float availablever;
private final float currentver;
private long notificationdate;
/**
*
* @return whether the NeembuuUploader is uptodate or not. If not, launch Update Notification window..
*/
public boolean isCurrentVersion() {
//Get the version.xml and read the version value.
try {
String respxml = local_version_xml;
availablever = getVersionFromXML(respxml);
notificationdate = notificationDate(respxml);
NULogger.getLogger().log(Level.INFO, "Available version: {0}", availablever);
NULogger.getLogger().log(Level.INFO, "Notification date : {0}", new Date(notificationdate));
NULogger.getLogger().log(Level.INFO, "Current version: {0}", currentver);
NULogger.getLogger().log(Level.INFO, "Current date : {0}", new Date(System.currentTimeMillis()));
//Compare both
if (availablever > currentver) {
return false;
}
} catch (Exception ex) {
NULogger.getLogger().log(Level.INFO, "Exception while checking update\n{0}", ex);
}
return true;
}
/**
* @deprecated version.xml is located in update.zip which is used to get list
* of latest plugins
*/
@Deprecated
private static String getVersionXmlOnline()throws IOException{
HttpParams params = new BasicHttpParams();
params.setParameter(
"http.useragent",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2) Gecko/20100115 Firefox/3.6");
DefaultHttpClient httpclient = new DefaultHttpClient(params);
HttpGet httpget = new HttpGet("http://neembuuuploader.sourceforge.net/version.xml");
NULogger.getLogger().info("Checking for new version...");
HttpResponse response = httpclient.execute(httpget);
return EntityUtils.toString(response.getEntity());
}
/**
*
* @param str
* @return the value between <version> and </version> tags from the specified string.
*/
public static float getVersionFromXML(String str) {
float ver = 0;
try {
String start = "<version>";
String end = "</version>";
str = str.substring(str.indexOf(start) + start.length());
str = str.substring(0, str.indexOf(end));
ver = Float.parseFloat(str);
} catch (Exception any) {
NULogger.getLogger().severe(any.toString());
}
return ver;
}
/**
*
* @param str
* @return the value between <version> and </version> tags from the specified string.
*/
public static long notificationDate(String str) {
long time = 0;
try {
String start = "<notificationdate>";
String end = "</notificationdate>";
str = str.substring(str.indexOf(start) + start.length());
str = str.substring(0, str.indexOf(end));
time = Long.parseLong(str);
} catch (Exception any) {
NULogger.getLogger().severe(any.toString());
}
return time;
}
//@Override
public void check() {
if (!isCurrentVersion()) {
NULogger.getLogger().info("New version found..");
showUpdateNotification.showUpdate(availablever);
}
if(showNotification()){
showUpdateNotification.showNotification(notificationdate);
}
}
private boolean showNotification(){
Date notificationDate = new Date(notificationdate);
Date today = new Date(System.currentTimeMillis());
long diff = System.currentTimeMillis() - notificationdate;
if(diff<0)diff = Long.MAX_VALUE;
double diff_in_hrs = (diff*1d/(1000*60*60d));
NULogger.getLogger().log(Level.INFO, "Time difference (in hours): {0}",
diff_in_hrs );
if(diff_in_hrs < 24){
return true;
}
return false;
}
}