Package freenet.node.useralerts

Source Code of freenet.node.useralerts.UpdatedVersionAvailableUserAlert$UpdateThingy

/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.node.useralerts;

import java.io.File;

import freenet.l10n.NodeL10n;
import freenet.node.Node;
import freenet.node.updater.NodeUpdateManager;
import freenet.node.updater.RevocationChecker;
import freenet.support.HTMLNode;
import freenet.support.Logger;
import freenet.support.TimeUtil;

public class UpdatedVersionAvailableUserAlert extends AbstractUserAlert {
  private final NodeUpdateManager updater;

  public UpdatedVersionAvailableUserAlert(NodeUpdateManager updater){
    super(false, null, null, null, null, (short) 0, false, NodeL10n.getBase().getString("UserAlert.hide"), false, null);
    this.updater = updater;
  }
 
  @Override
  public String getTitle() {
    return l10n("title");
  }

  private String l10n(String key) {
    return NodeL10n.getBase().getString("UpdatedVersionAvailableUserAlert."+key);
  }

  private String l10n(String key, String pattern, String value) {
    return NodeL10n.getBase().getString("UpdatedVersionAvailableUserAlert."+key, pattern, value);
  }

  private String l10n(String key, String[] patterns, String[] values) {
    return NodeL10n.getBase().getString("UpdatedVersionAvailableUserAlert."+key, patterns, values);
  }

  @Override
  public String getText() {
   
    UpdateThingy ut = createUpdateThingy();

    StringBuilder sb = new StringBuilder();
   
    sb.append(ut.firstBit);
   
    if(ut.formText != null) {
      sb.append(" <form action=\"/\" method=\"post\"><input type=\"submit\" name=\"update\" value=\"");
      sb.append(ut.formText);
      sb.append("\" /></form>");
    }
   
    return sb.toString();
  }
 
  @Override
  public String getShortText() {
    if(!updater.isArmed()) {
      if(updater.canUpdateNow()) {
        return l10n("shortReadyNotArmed");
      } else {
        return l10n("shortNotReadyNotArmed");
      }
    } else {
      return l10n("shortArmed");
    }
  }

  private static class UpdateThingy {
    public UpdateThingy(String first, String form) {
      this.firstBit = first;
      this.formText = form;
    }
    String firstBit;
    String formText;
  }
 
  @Override
  public HTMLNode getHTMLText() {
   
    UpdateThingy ut = createUpdateThingy();
   
    HTMLNode alertNode = new HTMLNode("div");
   
    alertNode.addChild("#", ut.firstBit);
   
    if(ut.formText != null) {
      alertNode.addChild("form", new String[] { "action", "method" }, new String[] { "/", "post" }).addChild("input", new String[] { "type", "name", "value" }, new String[] { "submit", "update", ut.formText });
      alertNode.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "formPassword", updater.node.clientCore.formPassword });
    }

    int version;
    if (updater.hasNewMainJar()) {
      version = updater.newMainJarVersion();
    } else if (updater.fetchingNewMainJar()) {
      version = updater.fetchingNewMainJarVersion();
    } else {
      Logger.minor(this, "Showing version available notification but not fetching or fetched.");
      // Fallback
      version = updater.getMainVersion();
    }
    updater.addChangelogLinks(version, alertNode);
   
    updater.renderProgress(alertNode);
   
    return alertNode;
  }
 
  private UpdateThingy createUpdateThingy() {
    StringBuilder sb = new StringBuilder();
    sb.append(l10n("notLatest"));
    sb.append(' ');
   
    if(updater.isArmed() && updater.inFinalCheck()) {
      sb.append(l10n("finalCheck", new String[] { "count", "max", "time" },
          new String[] { Integer.toString(updater.getRevocationDNFCounter()),
            Integer.toString(RevocationChecker.REVOCATION_DNF_MIN), TimeUtil.formatTime(updater.timeRemainingOnCheck()) }));
      sb.append(' ');
    } else if(updater.isArmed()) {
      sb.append(l10n("armed"));
    } else {
      String formText;
      if(updater.canUpdateNow()) {
        if(updater.hasNewMainJar()) {
          sb.append(l10n("downloadedNewJar", "version", Integer.toString(updater.newMainJarVersion())));
          sb.append(' ');
        }
        if(updater.canUpdateImmediately()) {
          sb.append(l10n("clickToUpdateNow"));
          formText = l10n("updateNowButton");
        } else {
          sb.append(l10n("clickToUpdateASAP"));
          formText = l10n("updateASAPButton");
        }
      } else {
        if(updater.fetchingFromUOM())
          sb.append(l10n("fetchingUOM", "updateScript", getUpdateScriptName()));
        else {
          boolean fetchingNew = updater.fetchingNewMainJar();
          if(fetchingNew) {
            sb.append(l10n("fetchingNewNode", "nodeVersion", Integer.toString(updater.fetchingNewMainJarVersion())));
          }
        }
        sb.append(" ");
        sb.append(l10n("updateASAPQuestion"));
        formText = l10n("updateASAPButton");
      }
     
      if(updater.node.updateIsUrgent()) {
        sb.append(" ");
        sb.append(l10n("updateIsUrgent"));
      }
     
      if(updater.brokenDependencies()) {
        sb.append(" ");
        sb.append(l10n("brokenDependencies", "version", Integer.toString(updater.newMainJarVersion())));
      }
     
      return new UpdateThingy(sb.toString(), formText);
    }
   
    return new UpdateThingy(sb.toString(), null);
  }

  private String getUpdateScriptName() {
    String name;
    if(File.separatorChar == '\\') {
      name = "update.cmd";
    } else {
      name = "update.sh";
    }
    File f = new File(updater.node.getNodeDir(), name);
    if(f.exists()) return f.toString();
    f = new File(new File(updater.node.getNodeDir(), "bin"), name);
    if(f.exists()) return f.toString();
    return name;
  }

  @Override
  public short getPriorityClass() {
    Node node = updater.node;
    if(node.updateIsUrgent())
      return UserAlert.CRITICAL_ERROR;
    if(updater.inFinalCheck() || updater.canUpdateNow() || !updater.isArmed())
      return UserAlert.ERROR;
    else
      return UserAlert.MINOR;
  }
 
  @Override
  public boolean isValid() {
    return updater.isEnabled() && (!updater.isBlown()) &&
      (updater.fetchingNewMainJar() || updater.hasNewMainJar() || updater.fetchingFromUOM());
  }
 
  @Override
  public void isValid(boolean b){
    // Ignore
  }
 
}
TOP

Related Classes of freenet.node.useralerts.UpdatedVersionAvailableUserAlert$UpdateThingy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.