/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package neembuu.uploader.uploaders;
import shashaank.smallmodule.SmallModule;
import neembuu.uploader.interfaces.Uploader;
import neembuu.uploader.interfaces.Account;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import neembuu.uploader.accounts.GigaSizeAccount;
import neembuu.uploader.exceptions.NUException;
import neembuu.uploader.exceptions.uploaders.NUMaxFileSizeException;
import neembuu.uploader.httpclient.NUHttpClient;
import neembuu.uploader.httpclient.httprequest.NUHttpGet;
import neembuu.uploader.httpclient.httprequest.NUHttpPost;
import neembuu.uploader.interfaces.UploadStatus;
import neembuu.uploader.interfaces.abstractimpl.AbstractUploader;
import neembuu.uploader.uploaders.common.StringUtils;
import neembuu.uploader.utils.NULogger;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
/**
*
* @author dinesh
*/
@SmallModule(
exports={GigaSize.class,GigaSizeAccount.class},
interfaces={Uploader.class,Account.class},
name="GigaSize.com"
)
public class GigaSize extends AbstractUploader {
GigaSizeAccount GigaSizeAccount = (GigaSizeAccount) getAccountsProvider().getAccount("GigaSize.com");
private HttpClient httpclient = NUHttpClient.getHttpClient();
private HttpContext httpContext = new BasicHttpContext();
private HttpResponse httpResponse;
private NUHttpPost httpPost;
private NUHttpGet httpGet;
private CookieStore cookieStore;
private String stringResponse;
private Document doc;
private String downloadlink;
private String uploadid;
private String sid;
static String referer = "";
static final String UPLOAD_ID_CHARS = "1234567890abcdef";
private long fileSizeLimit = 2147483648l; //2 GB: the last letter is alphabet 'L' in small case, not numeric '1'
public GigaSize() {
downURL = UploadStatus.PLEASEWAIT.getLocaleSpecificString();
delURL = UploadStatus.NA.getLocaleSpecificString();
host = "GigaSize.com";
if (GigaSizeAccount.loginsuccessful) {
host = GigaSizeAccount.username + " | GigaSize.com";
}
}
private void initialize() throws Exception {
if(GigaSizeAccount.loginsuccessful){
httpContext = GigaSizeAccount.getHttpContext();
}
else{
cookieStore = new BasicCookieStore();
httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
}
NULogger.getLogger().info("Getting startup cookies from gigasize.com");
httpGet = new NUHttpGet("http://www.gigasize.com/");
httpResponse = httpclient.execute(httpGet, httpContext);
stringResponse = EntityUtils.toString(httpResponse.getEntity());
generateGigasizeID();
}
public void generateGigasizeID() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 32; i++) {
int idx = 1 + (int) (Math.random() * 15);
sb.append(UPLOAD_ID_CHARS.charAt(idx));
}
sid = sb.toString();
NULogger.getLogger().log(Level.INFO, "sid : {0} - {1}", new Object[]{sid, sid.length()});
uploadid = sid;
}
public String getData(String url) throws IOException {
httpGet = new NUHttpGet(url);
httpResponse = httpclient.execute(httpGet, httpContext);
return EntityUtils.toString(httpResponse.getEntity());
}
@Override
public void run() {
try {
if (GigaSizeAccount.loginsuccessful) {
host = GigaSizeAccount.username + " | GigaSize.com";
} else {
host = "GigaSize.com";
}
if (file.length() > fileSizeLimit) {
throw new NUMaxFileSizeException(fileSizeLimit, file.getName(), GigaSizeAccount.getHOSTNAME());
}
uploadInitialising();
initialize();
fileUpload();
gettingLink();
String uploadCompleteID;
long randID;
do {
randID = (long) Math.floor(Math.random() * 90000000000000000L) + 10000000000L;
uploadCompleteID = getData("http://www.gigasize.com/status.php?sid=" + sid + "&rnd=" + randID);
} while (!uploadCompleteID.contains("done"));
NULogger.getLogger().log(Level.INFO, "Response: {0}", uploadCompleteID);
uploadCompleteID = StringUtils.stringBetweenTwoStrings(uploadCompleteID, "\\/uploadcompleteie\\/", "\"");
uploadCompleteID = uploadCompleteID.replaceAll("\\\\","");
NULogger.getLogger().log(Level.INFO, "Upload Complete ID : {0}", uploadCompleteID);
//http://www.gigasize.com/uploadcomplete/MzIwMDIxMzc1NHwwNTNiMDkwNDdkMWNlMTZjNGJhMTJiMTRhNmVjZjM0MQ==
referer = "http://www.gigasize.com/uploadcompleteie/" + uploadCompleteID;
NULogger.getLogger().log(Level.INFO, "referer : {0}", referer);
downloadlink = getData("http://www.gigasize.com" + uploadCompleteID);
NULogger.getLogger().log(Level.INFO, "address : {0}", "http://www.gigasize.com" + uploadCompleteID);
//FileUtils.saveInFile("GigaSize.html", downloadlink);
//Get download link
doc = Jsoup.parse(downloadlink);
downloadlink = doc.select("div#container section#content div#uploadedList div.fileUploaded p.downloadLink a").text();
NULogger.getLogger().log(Level.INFO, "Download URL : {0}", downloadlink);
downURL = downloadlink;
uploadFinished();
} catch(NUException ex){
ex.printError();
uploadInvalid();
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
uploadFailed();
}
}
public void fileUpload() throws Exception {
httpPost = new NUHttpPost("http://www.gigasize.com/uploadie");
MultipartEntity mpEntity = new MultipartEntity();
mpEntity.addPart("UPLOAD_IDENTIFIER", new StringBody(uploadid));
mpEntity.addPart("sid", new StringBody(sid));
mpEntity.addPart("fileUpload1", createMonitoredFileBody());
httpPost.setEntity(mpEntity);
uploading();
NULogger.getLogger().info("Now uploading your file into Gigasize...........................");
HttpResponse response = httpclient.execute(httpPost, httpContext);
HttpEntity resEntity = response.getEntity();
NULogger.getLogger().info(response.getStatusLine().toString());
if (resEntity != null) {
sid = "";
sid = EntityUtils.toString(resEntity);
NULogger.getLogger().log(Level.INFO, "After upload sid value : {0}", sid);
} else {
throw new Exception("There might be a problem with your internet connection or GigaSize server problem. Please try after some time :(");
}
}
}