@Override
  public void run() {
    try {
      if (file.length() > fileSizeLimit) {
        throw new NUMaxFileSizeException(fileSizeLimit, file.getName(), this.getHost());
      }

      if (solidfilesAccount.loginsuccessful) {
        httpContext = solidfilesAccount.getHttpContext();
      } else {
        cookieStore = new BasicCookieStore();
        httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
      }

      uploadInitialising();
      fileupload();
    } catch (NUException ex) {
      ex.printError();
      uploadInvalid();
    } catch (Exception e) {
      Logger.getLogger(Solidfiles.class.getName()).log(Level.SEVERE, null, e);

      uploadFailed();
    }
  }
  @Override
  public void login() {
    loginsuccessful = false;
    try {
      initialize();

      NULogger.getLogger().info("Trying to log in to FileHoot.com");
      httpPost = new NUHttpPost("http://filehoot.com/");

      List<NameValuePair> formparams = new ArrayList<NameValuePair>();
      formparams.add(new BasicNameValuePair("op", "login"));
      formparams.add(new BasicNameValuePair("redirect", ""));
      formparams.add(new BasicNameValuePair("login", getUsername()));
      formparams.add(new BasicNameValuePair("password", getPassword()));

      UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
      httpPost.setEntity(entity);
      httpResponse = httpclient.execute(httpPost, httpContext);
      NULogger.getLogger().info(httpResponse.getStatusLine().toString());
      Header lastHeader = httpResponse.getLastHeader("Location");

      if (httpResponse != null && httpResponse.toString().contains("xfss=")) {
        EntityUtils.consume(httpResponse.getEntity());
        loginsuccessful = true;
        username = getUsername();
        password = getPassword();
        NULogger.getLogger().info("FileHoot.com login successful!");

      } else {
        // Get error message
        responseString = EntityUtils.toString(httpResponse.getEntity());
        // FileUtils.saveInFile("FileHootAccount.html", responseString);
        Document doc = Jsoup.parse(responseString);
        String error = doc.select("div.alert-danger").first().text();

        if ("Incorrect Login or Password".equals(error)) {
          throw new NUInvalidLoginException(getUsername(), HOSTNAME);
        }

        // Generic exception
        throw new Exception("Login error: " + "Login Failed");
      }
    } catch (NUException ex) {
      resetLogin();
      ex.printError();
      accountUIShow().setVisible(true);
    } catch (Exception e) {
      resetLogin();
      NULogger.getLogger().log(Level.SEVERE, "{0}: {1}", new Object[] {getClass().getName(), e});
      showWarningMessage(Translation.T().loginerror(), HOSTNAME);
      accountUIShow().setVisible(true);
    }
  }
  @Override
  public void login() {
    loginsuccessful = false;
    try {
      initialize();

      NULogger.getLogger().info("Trying to log in to OpenLoad.co");
      httpPost = new NUHttpPost("https://openload.co/login");

      List<NameValuePair> formparams = new ArrayList<NameValuePair>();
      formparams.add(new BasicNameValuePair("_csrf", csrfToken));
      formparams.add(new BasicNameValuePair("LoginForm[rememberMe]", "1"));
      formparams.add(new BasicNameValuePair("LoginForm[email]", getUsername()));
      formparams.add(new BasicNameValuePair("LoginForm[password]", getPassword()));

      UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
      httpPost.setEntity(entity);
      httpResponse = httpclient.execute(httpPost, httpContext);
      NULogger.getLogger().info(httpResponse.getStatusLine().toString());

      responseString = NUHttpClientUtils.getData("https://openload.co/upload", httpContext);

      if (responseString.contains("logout")) {
        EntityUtils.consume(httpResponse.getEntity());
        loginsuccessful = true;
        username = getUsername();
        password = getPassword();
        NULogger.getLogger().info("OpenLoad.co login successful!");

      } else {
        // Get error message
        responseString = EntityUtils.toString(httpResponse.getEntity());
        Document doc = Jsoup.parse(responseString);
        String error = doc.select(".err").first().text();

        if ("Incorrect Login or Password".equals(error)) {
          throw new NUInvalidLoginException(getUsername(), HOSTNAME);
        }

        // Generic exception
        throw new Exception("Login error: " + error);
      }
    } catch (NUException ex) {
      resetLogin();
      ex.printError();
      accountUIShow().setVisible(true);
    } catch (Exception e) {
      resetLogin();
      NULogger.getLogger().log(Level.SEVERE, "{0}: {1}", new Object[] {getClass().getName(), e});
      showWarningMessage(Translation.T().loginerror(), HOSTNAME);
      accountUIShow().setVisible(true);
    }
  }
  @Override
  public void login() {
    loginsuccessful = false;
    try {
      initialize();

      NULogger.getLogger().info("Trying to log in to TopUpload1.com");
      httpPost = new NUHttpPost("http://topupload1.com/ajax/_account_login.ajax.php");

      List<NameValuePair> formparams = new ArrayList<NameValuePair>();
      formparams.add(new BasicNameValuePair("username", getUsername()));
      formparams.add(new BasicNameValuePair("password", getPassword()));

      UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
      httpPost.setEntity(entity);
      httpResponse = httpclient.execute(httpPost, httpContext);
      NULogger.getLogger().info(httpResponse.getStatusLine().toString());
      responseString = EntityUtils.toString(httpResponse.getEntity());

      if (StringUtils.stringBetweenTwoStrings(responseString, "\"login_status\":\"", "\"")
          .equals("success")) {
        EntityUtils.consume(httpResponse.getEntity());
        loginsuccessful = true;
        username = getUsername();
        password = getPassword();
        NULogger.getLogger().info("TopUpload1.com login successful!");

      } else {
        // Get error message
        responseString = EntityUtils.toString(httpResponse.getEntity());
        // FileUtils.saveInFile("TopUploadOneAccount.html", responseString);
        Document doc = Jsoup.parse(responseString);
        String error = doc.select(".err").first().text();

        if ("Incorrect Login or Password".equals(error)) {
          throw new NUInvalidLoginException(getUsername(), HOSTNAME);
        }

        // Generic exception
        throw new Exception("Login error: " + error);
      }
    } catch (NUException ex) {
      resetLogin();
      ex.printError();
      accountUIShow().setVisible(true);
    } catch (Exception e) {
      resetLogin();
      NULogger.getLogger().log(Level.SEVERE, "{0}: {1}", new Object[] {getClass().getName(), e});
      showWarningMessage(Translation.T().loginerror(), HOSTNAME);
      accountUIShow().setVisible(true);
    }
  }
  @Override
  public void run() {
    try {
      if (streaminAccount.loginsuccessful) {
        userType = "reg";
        httpContext = streaminAccount.getHttpContext();
        sessionID = CookieUtils.getCookieValue(httpContext, "xfsts");
        maxFileSizeLimit = 2147483648l; // 2048MB (2GB)
      } else {
        host = "streamin.to";
        uploadInvalid();
        return;
      }

      addExtensions();

      // Check extension
      if (!FileUtils.checkFileExtension(allowedVideoExtensions, file)) {
        throw new NUFileExtensionException(file.getName(), host);
      }

      if (file.length() > maxFileSizeLimit) {
        throw new NUMaxFileSizeException(maxFileSizeLimit, file.getName(), host);
      }
      uploadInitialising();
      initialize();

      httpPost = new NUHttpPost(uploadURL);
      MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
      mpEntity.addPart("upload_type", new StringBody("file"));
      mpEntity.addPart("sess_id", new StringBody(sessionID));
      mpEntity.addPart("srv_tmp_url", new StringBody("http://5.79.69.179:8777/tmp"));
      mpEntity.addPart("srv_id", new StringBody(sv_id));
      mpEntity.addPart("disk_id", new StringBody(disk_id));
      mpEntity.addPart("file_public", new StringBody("0"));
      mpEntity.addPart("tos", new StringBody("1"));
      mpEntity.addPart("file", createMonitoredFileBody());
      mpEntity.addPart("submit_btn", new StringBody("Upload!"));
      httpPost.setEntity(mpEntity);

      NULogger.getLogger().log(Level.INFO, "executing request {0}", httpPost.getRequestLine());
      NULogger.getLogger().info("Now uploading your file into Streamin.to");
      uploading();
      httpResponse = httpclient.execute(httpPost, httpContext);
      responseString = EntityUtils.toString(httpResponse.getEntity());

      doc = Jsoup.parse(responseString);
      final String fn = doc.select("textarea[name=fn]").first().text();
      // Read the links
      gettingLink();
      httpPost = new NUHttpPost("http://streamin.to");
      List<NameValuePair> formparams = new ArrayList<NameValuePair>();
      formparams.add(new BasicNameValuePair("fn", fn));
      formparams.add(new BasicNameValuePair("op", "upload_result"));
      formparams.add(new BasicNameValuePair("st", "OK"));

      UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
      httpPost.setEntity(entity);
      httpResponse = httpclient.execute(httpPost, httpContext);
      responseString = EntityUtils.toString(httpResponse.getEntity());

      // FileUtils.saveInFile("Streamin.html", responseString);

      doc = Jsoup.parse(responseString);
      downloadlink = doc.select("textarea").first().val();
      // Streamin.to don't provide the delete link
      deletelink = UploadStatus.NA.getLocaleSpecificString();

      NULogger.getLogger().log(Level.INFO, "Delete link : {0}", deletelink);
      NULogger.getLogger().log(Level.INFO, "Download link : {0}", downloadlink);
      downURL = downloadlink;
      delURL = deletelink;

      uploadFinished();
    } catch (NUException ex) {
      ex.printError();
      uploadInvalid();
    } catch (Exception e) {
      Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);

      uploadFailed();
    }
  }
  @Override
  public void login() {
    loginsuccessful = false;
    try {
      initialize();

      NULogger.getLogger().info("Trying to log in to Ex-Load.com");
      httpPost = new NUHttpPost("http://ex-load.com/");
      httpPost.setHeader("Referer", "http://ex-load.com/login.html");
      httpPost.setHeader("Host", "ex-load.com");
      httpPost.setHeader(
          "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0");
      httpPost.setHeader("DNT", "1");

      List<NameValuePair> formparams = new ArrayList<NameValuePair>();
      formparams.add(new BasicNameValuePair("code", captcha));
      formparams.add(new BasicNameValuePair("op", "login"));
      formparams.add(new BasicNameValuePair("login", getUsername()));
      formparams.add(new BasicNameValuePair("password", getPassword()));
      formparams.add(new BasicNameValuePair("rand", rand));
      formparams.add(new BasicNameValuePair("redirect", "http://ex-load.com/"));

      UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
      httpPost.setEntity(entity);
      httpResponse = httpclient.execute(httpPost, httpContext);
      NULogger.getLogger().info(httpResponse.getStatusLine().toString());

      responseString = EntityUtils.toString(httpResponse.getEntity());
      if (responseString.contains("Wrong captcha code")) {
        NULogger.getLogger().info("** Ex-Load.com ** => Server reports the captcha as incorrect");
        throw new Exception("Server reports incorrect captcha");
      }

      if (!CookieUtils.getCookieValue(httpContext, "xfss").isEmpty()
          && !CookieUtils.getCookieValue(httpContext, "login").isEmpty()) {
        EntityUtils.consume(httpResponse.getEntity());
        loginsuccessful = true;
        username = getUsername();
        password = getPassword();
        hostsAccountUI().hostUI(HOSTNAME).setEnabled(true);
        NULogger.getLogger().info("Ex-Load.com login successful!");

      } else {
        // Get error message
        responseString = EntityUtils.toString(httpResponse.getEntity());
        // FileUtils.saveInFile("ExLoadAccount.html", responseString);
        Document doc = Jsoup.parse(responseString);
        String error = doc.select(".err").first().text();

        if ("Incorrect Login or Password".equals(error)) {
          throw new NUInvalidLoginException(getUsername(), HOSTNAME);
        }

        // Generic exception
        throw new Exception("Login error: " + error);
      }
    } catch (NUException ex) {
      resetLogin();
      ex.printError();
      accountUIShow().setVisible(true);
    } catch (Exception e) {
      resetLogin();
      NULogger.getLogger().log(Level.SEVERE, "{0}: {1}", new Object[] {getClass().getName(), e});
      showWarningMessage(Translation.T().loginerror(), HOSTNAME);
      accountUIShow().setVisible(true);
    }
  }
  @Override
  public void run() {
    try {
      if (depositFilesAccount.loginsuccessful) {
        httpContext = depositFilesAccount.getHttpContext();
        host = depositFilesAccount.username + " | DepositFiles.com";
      } else {
        host = "DepositFiles.com";
        CookieStore cookieStore = new BasicCookieStore();
        httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
      }

      if (!depositFilesAccount.loginsuccessful) {
        if (file.length() > notLogMaxFileSizeLimit) {
          throw new NUMaxFileSizeException(
              notLogMaxFileSizeLimit, file.getName(), depositFilesAccount.getHOSTNAME());
        }
      } else {
        if (file.length() > logMaxFileSizeLimit) {
          throw new NUMaxFileSizeException(
              logMaxFileSizeLimit, file.getName(), depositFilesAccount.getHOSTNAME());
        }
      }

      if (file.length() == 0) {
        throw new NUMinFileSizeException(
            minFileSizeLimit, file.getName(), depositFilesAccount.getHOSTNAME());
      }

      uploadInitialising();
      NULogger.getLogger().info("Now getting deposifiles page post action value........");
      if (depositFilesAccount.loginsuccessful) {
        uploadresponse = NUHttpClientUtils.getData("http://depositfiles.com/en/", httpContext);
        doc = Jsoup.parse(uploadresponse);
        postURL = doc.select("form[id=upload_form]").first().attr("action");
        MAX_FILE_SIZE =
            doc.select("form[id=upload_form]")
                .first()
                .select("input[name=MAX_FILE_SIZE]")
                .attr("value");
        UPLOAD_IDENTIFIER =
            doc.select("form[id=upload_form]")
                .first()
                .select("input[name=UPLOAD_IDENTIFIER]")
                .attr("value");
        go = doc.select("form[id=upload_form]").first().select("input[name=go]").attr("value");
      } else {
        postURL =
            NUHttpClientUtils.getData(
                "http://depositfiles.com/api/get_upload_info.php", httpContext);
        postURL = Jsoup.parse(postURL, "", Parser.xmlParser()).select("http_upload_path").text();
      }

      NULogger.getLogger().log(Level.INFO, "Post URL  : {0}", postURL);
      fileUpload();

      uploadFinished();
    } catch (NUException ex) {
      ex.printError();

      uploadInvalid();
    } catch (Exception ex) {
      NULogger.getLogger().severe(ex.toString());

      uploadFailed();
    } finally {
      postURL = null;
      uploadresponse = null;
      downloadlink = null;
      deletelink = null;
    }
  }
  @Override
  public void run() {
    try {
      if (privateFilesAccount.loginsuccessful) {
        userType = "reg";
        httpContext = privateFilesAccount.getHttpContext();
        sessionID = CookieUtils.getCookieValue(httpContext, "xfss");
        maxFileSizeLimit = 2147483648L; // 2 GB
      } else {
        host = "PrivateFiles.com";
        uploadInvalid();
        return;
      }

      if (file.length() > maxFileSizeLimit) {
        throw new NUMaxFileSizeException(maxFileSizeLimit, file.getName(), host);
      }
      uploadInitialising();
      initialize();

      long uploadID;
      Random random = new Random();
      uploadID = Math.round(random.nextFloat() * Math.pow(10, 12));
      uploadid_s = String.valueOf(uploadID);

      sess_id =
          StringUtils.stringBetweenTwoStrings(responseString, "name=\"sess_id\" value=\"", "\"");

      srv_tmp_url = uploadURL;

      uploadURL =
          StringUtils.removeLastChars(uploadURL, 3)
              + "cgi-bin/upload.cgi?upload_id="
              + uploadid_s
              + "&js_on=1&utype="
              + userType
              + "&upload_type=file";
      httpPost = new NUHttpPost(uploadURL);
      MultipartEntity mpEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
      mpEntity.addPart("js_on", new StringBody("1"));
      mpEntity.addPart("upload_id", new StringBody(uploadid_s));
      mpEntity.addPart("upload_type", new StringBody("file"));
      mpEntity.addPart("utype", new StringBody(userType));
      mpEntity.addPart("sess_id", new StringBody(sess_id));
      mpEntity.addPart("srv_tmp_url", new StringBody(srv_tmp_url));
      mpEntity.addPart("file_0", createMonitoredFileBody());
      mpEntity.addPart("file_0_descr", new StringBody(""));
      mpEntity.addPart("link_rcpt", new StringBody(""));
      mpEntity.addPart("link_pass", new StringBody(""));
      mpEntity.addPart("to_folder", new StringBody(""));
      mpEntity.addPart("file_1", new StringBody(""));
      mpEntity.addPart("file_0_descr", new StringBody(""));
      httpPost.setEntity(mpEntity);

      NULogger.getLogger().log(Level.INFO, "executing request {0}", httpPost.getRequestLine());
      NULogger.getLogger().info("Now uploading your file into PrivateFiles.com");
      uploading();
      httpResponse = httpclient.execute(httpPost, httpContext);
      responseString = EntityUtils.toString(httpResponse.getEntity());
      doc = Jsoup.parse(responseString);

      // Read the links
      gettingLink();
      upload_fn = doc.select("textarea[name=fn]").val();

      if (upload_fn != null) {
        httpPost = new NUHttpPost("https://www.privatefiles.com/");
        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
        formparams.add(new BasicNameValuePair("fn", upload_fn));
        formparams.add(new BasicNameValuePair("op", "upload_result"));
        formparams.add(new BasicNameValuePair("st", "OK"));

        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
        httpPost.setEntity(entity);
        httpResponse = httpclient.execute(httpPost, httpContext);
        responseString = EntityUtils.toString(httpResponse.getEntity());

        doc = Jsoup.parse(responseString);
        downloadlink = doc.select("textarea").first().val();
        deletelink = doc.select("textarea").eq(3).val();

        NULogger.getLogger().log(Level.INFO, "Delete link : {0}", deletelink);
        NULogger.getLogger().log(Level.INFO, "Download link : {0}", downloadlink);
        downURL = downloadlink;
        delURL = deletelink;

        uploadFinished();
      }
    } catch (NUException ex) {
      ex.printError();
      uploadInvalid();
    } catch (Exception e) {
      Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);

      uploadFailed();
    }
  }
  private void uploadLogin() {
    try {
      uploadInitialising();
      // -------------------------------------------------------------
      if (file.length() > hotFileAccount.getMaxFileSizeLimit()) {
        throw new NUMaxFileSizeException(
            hotFileAccount.getMaxFileSizeLimit(), file.getName(), hotFileAccount.getHOSTNAME());
      }

      httpContext = hotFileAccount.getHttpContext();

      status = UploadStatus.GETTINGCOOKIE;
      httpget = new NUHttpGet("http://hotfile.com/?cookiecheck=1");
      httpresponse = httpclient.execute(httpget, httpContext);

      strResponse = EntityUtils.toString(httpresponse.getEntity());
      start = "<form action=\"";
      link = strResponse.substring(strResponse.indexOf(start + "http://") + start.length());
      link = link.substring(0, link.indexOf("\""));
      NULogger.getLogger().info(link);
      // ------------------------------------------------------------

      httppost = new NUHttpPost(link);
      MultipartEntity requestEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

      requestEntity.addPart("uploads[]", createMonitoredFileBody());
      requestEntity.addPart("iagree", new StringBody("on"));
      requestEntity.addPart("", new StringBody("Upload"));

      httppost.setEntity(requestEntity);
      // -------------------------------------------------------------
      uploading();
      // -------------------------------------------------------------
      httpresponse = httpclient.execute(httppost, httpContext);
      manageURL = httpresponse.getHeaders("Location")[0].getValue();
      strResponse = EntityUtils.toString(httpresponse.getEntity());
      NULogger.getLogger().log(Level.INFO, "HotFile Manage URL{0}", manageURL);

      NULogger.getLogger().info("Getting links from Manage URL");

      gettingLink();

      // -------------------------------------------------------------
      httpget = new NUHttpGet(manageURL);
      httpresponse = httpclient.execute(httpget, httpContext);
      strResponse = EntityUtils.toString(httpresponse.getEntity());

      start = "<input type=\"text\" name=\"url\" id=\"url\" class=\"textfield\" value=\"";
      downURL = strResponse.substring(strResponse.indexOf(start) + start.length());
      downURL = downURL.substring(0, downURL.indexOf("\""));

      start = "<input type=\"text\" name=\"delete\" id=\"delete\" class=\"textfield\" value=\"";
      delURL = strResponse.substring(strResponse.indexOf(start) + start.length());
      delURL = delURL.substring(0, delURL.indexOf("\""));
      // --------------------------------------------------------------

      NULogger.getLogger().log(Level.INFO, "Download Link: {0}", downURL);
      NULogger.getLogger().log(Level.INFO, "Delete link: {0}", delURL);

      uploadFinished();
    } catch (NUException ex) {
      ex.printError();
      uploadInvalid();
    } catch (Exception ex) {
      Logger.getLogger(HotFile.class.getName()).log(Level.SEVERE, null, ex);
      uploadFailed();
    }
  }