Package com.aelitis.azureus.ui.swt.feature

Source Code of com.aelitis.azureus.ui.swt.feature.FeatureManagerUIListener

package com.aelitis.azureus.ui.swt.feature;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.swt.SWT;

import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.plugins.PluginException;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.ui.UIInstance;
import org.gudy.azureus2.plugins.ui.UIManager;
import org.gudy.azureus2.plugins.ui.UIManagerListener;
import org.gudy.azureus2.plugins.utils.*;
import org.gudy.azureus2.plugins.utils.FeatureManager.FeatureManagerListener;
import org.gudy.azureus2.plugins.utils.FeatureManager.Licence;
import org.gudy.azureus2.plugins.utils.FeatureManager.Licence.LicenceInstallationListener;
import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;
import org.gudy.azureus2.ui.swt.shells.MessageBoxShell;

import com.aelitis.azureus.activities.*;
import com.aelitis.azureus.ui.UIFunctions;
import com.aelitis.azureus.ui.UIFunctionsManager;
import com.aelitis.azureus.ui.UserPrompterResultListener;
import com.aelitis.azureus.ui.mdi.MdiEntry;
import com.aelitis.azureus.ui.mdi.MultipleDocumentInterface;
import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
import com.aelitis.azureus.ui.swt.UIFunctionsSWT;
import com.aelitis.azureus.ui.swt.skin.SWTSkin;
import com.aelitis.azureus.ui.swt.skin.SWTSkinFactory;
import com.aelitis.azureus.ui.swt.skin.SWTSkinObject;
import com.aelitis.azureus.ui.swt.views.skin.*;

public class FeatureManagerUIListener
  implements FeatureManagerListener
{
  private final static boolean DEBUG = Constants.IS_CVS_VERSION;

  private static final String ID_ACTIVITY_EXPIRING = "ExpiringEntry";
  private static final String ID_ACTIVITY_OFFLINE = "OfflineExpiredEntry";
  private static final String ID_ACTIVITY_EXPIRED = "ExpiredEntry";

  private final FeatureManager featman;

  private String pendingAuthForKey;
 
  private Map<String, Object[]> licence_map = new HashMap<String, Object[]>();

  public FeatureManagerUIListener(FeatureManager featman) {
    if (DEBUG) {
      System.out.println("FEAT:");
    }
    this.featman = featman;
  }

  public void licenceAdded(Licence licence) {
    updateUI();
   
    mapLicence( licence );
   
    if (DEBUG) {
      System.out.println("FEAT: Licence " + licence.getKey() + " Added with state " + licence.getState());
    }

    if (licence.getState() == Licence.LS_PENDING_AUTHENTICATION) {
      pendingAuthForKey = licence.getKey();
      FeatureManagerUI.openLicenceValidatingWindow();
    }

    if (licence.isFullyInstalled()) {
      return;
    }else{
      licence.retryInstallation();
    }
  }

  public void licenceChanged(Licence licence) {
    int state = licence.getState();

    boolean stateChanged = true;

    Licence lastLicence = mapLicence( licence );
     
    if (lastLicence != null) {
      stateChanged = lastLicence.getState() != licence.getState();
     
      if (   ( !stateChanged ) &&
          licence.getState() == Licence.LS_AUTHENTICATED &&
          lastLicence.isFullyInstalled() != licence.isFullyInstalled()){
         
          stateChanged = true;
        }
    } else {
      // licenceChanged gets fired for all licences after listener is added
      // (via code in FeatureManagerUI)
      // skip case where licence is already cancelled
      if (state == Licence.LS_CANCELLED || state == Licence.LS_REVOKED
          || state == Licence.LS_ACTIVATION_DENIED) {
        stateChanged = false;
      }
    }

    updateUI();
    if (DEBUG) {
      System.out.println("FEAT: License " + licence.getKey()
          + " State Changed: " + state + "; changed? " + stateChanged);
    }
   
    if (!stateChanged) {
      return;
    }
 
    if (state == Licence.LS_PENDING_AUTHENTICATION) {
      pendingAuthForKey = licence.getKey();
      FeatureManagerUI.openLicenceValidatingWindow();
    } else {
      FeatureManagerUI.closeLicenceValidatingWindow();
      if (state == Licence.LS_AUTHENTICATED) {
        if (licence.getKey().equals(pendingAuthForKey)) {
          if (licence.isFullyInstalled()) {
            pendingAuthForKey = null;
            FeatureManagerUI.openLicenceSuccessWindow();
          } // else assumed install process is taking place
        }
      } else if (state == Licence.LS_INVALID_KEY) {
        FeatureManagerUI.openLicenceFailedWindow(state, licence.getKey());
        if (licence.getKey().equals(pendingAuthForKey)) {
          pendingAuthForKey = null;
        }
      } else if (state == Licence.LS_REVOKED) {
        FeatureManagerUI.openLicenceRevokedWindow(licence);
      } else if (state == Licence.LS_ACTIVATION_DENIED) {
        FeatureManagerUI.openLicenceActivationDeniedWindow(licence);
      }
    }
  }

  private Licence
  mapLicence(
    Licence    licence )
  {
    Licence existing_licence;
   
    LicenceInstallationListener  new_listener = null;
   
    synchronized ( licence_map ){
     
      String key = licence.getKey();
     
      Object[] entry = licence_map.get( key );
         
      if ( entry == null ){
       
        existing_licence = null;
       
        new_listener =
          new LicenceInstallationListener()
          {
            FeatureManagerInstallWindow install_window = null;
 
            public void start(String licence_key) {
              if (DEBUG) {
                System.out.println("FEATINST: START! " + licence_key);
              }
              try {
                Licence licence = featman.addLicence(licence_key);
 
                install_window = new FeatureManagerInstallWindow(licence);
   
                install_window.open();
 
              } catch (PluginException e) {
                Debug.out(e);
              }
            }
 
            public void reportProgress(String licenceKey, String install, int percent) {
              if (DEBUG) {
                System.out.println("FEATINST: " + install + ": " + percent);
              }
            }
 
            public void reportActivity(String licenceKey, String install,
                String activity) {
              if (DEBUG) {
                System.out.println("FEAT: ACTIVITY: " + install + ": " + activity);
              }
            }
 
            public boolean alreadyFailing = false;
            public void failed(String licenceKey, PluginException error) {
              if (DEBUG) {
                System.out.println("FEAT: FAIL: " + licenceKey + ": " + error.toString());
              }
   
              if ( install_window != null ){
               
                install_window.close();
              }
             
              if ( licenceKey.equals(pendingAuthForKey)){
               
                pendingAuthForKey = null;
              }

              if (alreadyFailing) {
                return;
              }
              alreadyFailing = true;

              String s = Debug.getNestedExceptionMessage(error);
             
              MessageBoxShell mb = new MessageBoxShell(
                  SWT.ICON_ERROR | SWT.OK,
                  "License Addition Error for " + licenceKey,
                  s );

              mb.open( new UserPrompterResultListener() {
                public void prompterClosed(int result) {
                  alreadyFailing = false;
                }
              } );
            }
 
            public void complete(String licenceKey) {
   
              if ( licenceKey.equals(pendingAuthForKey)){
 
                pendingAuthForKey = null;
               
                FeatureManagerUI.openLicenceSuccessWindow();
              }
            }
          };
         
       
        licence_map.put( key, new Object[]{ licence, new_listener });
       
      }else{
       
        existing_licence = (Licence)entry[0];
       
        entry[0] = licence;
      }
    }

    if ( new_listener != null ){
     
      licence.addInstallationListener( new_listener );
   
   
    return( existing_licence );
  }
 
  private void updateUI() {
    PluginInterface plugin_interface = PluginInitializer.getDefaultInterface();

    UIManager ui_manager = plugin_interface.getUIManager();

    ui_manager.addUIListener(new UIManagerListener() {

      public void UIDetached(UIInstance instance) {
      }

      public void UIAttached(UIInstance instance) {
        if (instance instanceof UISWTInstance) {
          _updateUI();
        }
      }
    });
  }

  private void _updateUI() {
    final boolean hasFullLicence = FeatureManagerUI.hasFullLicence();

    try {
      buildNotifications();
    } catch (Exception e) {
      Debug.out(e);
    }
   
    final SWTSkin skin = SWTSkinFactory.getInstance();
    if (skin != null) {
      SWTSkinObject soHeader = skin.getSkinObject("plus-header");
      if (soHeader != null) {
        soHeader.setVisible(hasFullLicence);
      }
      Utils.execSWTThread(new AERunnable() {
        public void runSupport() {
          UIFunctionsSWT uif = UIFunctionsManagerSWT.getUIFunctionsSWT();
          uif.getMainShell().setText(hasFullLicence ? "Vuze Plus" : "Vuze");
        }
      });
    }

    UIFunctions uif = UIFunctionsManager.getUIFunctions();
    MultipleDocumentInterface mdi = uif.getMDI();
    if (mdi != null) {
      MdiEntry entry = mdi.getEntry(MultipleDocumentInterface.SIDEBAR_SECTION_PLUS);
      if (entry != null) {
        entry.setTitleID(hasFullLicence ? "mdi.entry.plus.full"
            : "mdi.entry.plus.free");
        SBC_PlusFTUX view = (SBC_PlusFTUX) SkinViewManager.getByClass(SBC_PlusFTUX.class);
        if (view != null) {
          view.updateLicenceInfo();
        }
        SkinView[] views = SkinViewManager.getMultiByClass(SBC_BurnFTUX.class);
        if (views != null) {
          for (SkinView bview : views) {
            ((SBC_BurnFTUX) bview).updateLicenceInfo();
          }
        }
      }
    }
  }

  public static void buildNotifications() {
    VuzeActivitiesManager.addListener(new VuzeActivitiesLoadedListener() {
      public void vuzeActivitiesLoaded() {
        _buildNotifications();
      }
    });
  }

  private static void _buildNotifications() {
    long plusDisplayExpiryTimeStamp = FeatureManagerUI.getPlusExpiryDisplayTimeStamp();
    long plusExpiryTimeStamp = FeatureManagerUI.getPlusExpiryTimeStamp();
   
    if (plusExpiryTimeStamp <= 0) {
      return;
    }
   
    long msDisplayLeft = plusDisplayExpiryTimeStamp - SystemTime.getCurrentTime();
    long daysDisplayLeft = (long) Math.ceil(msDisplayLeft / 86400000.0);
    long msLeft = plusExpiryTimeStamp - SystemTime.getCurrentTime();
    long daysLeft = (long) Math.ceil(msLeft / 86400000.0);

    if (daysLeft > 30 || daysDisplayLeft > 30) {
      VuzeActivitiesEntry entry1 = VuzeActivitiesManager.getEntryByID(ID_ACTIVITY_EXPIRED);
      VuzeActivitiesEntry entry2 = VuzeActivitiesManager.getEntryByID(ID_ACTIVITY_EXPIRING);
      VuzeActivitiesEntry entry3 = VuzeActivitiesManager.getEntryByID(ID_ACTIVITY_OFFLINE);
      if (entry1 != null || entry2 != null || entry3 != null) {
        VuzeActivitiesManager.removeEntries(new VuzeActivitiesEntry[] {
          entry1,
          entry2,
          entry3,
        }, true);
      }

      return;
    }
   
   
    String s;
    String id;
    String ref = "plus_note_" + (daysDisplayLeft >= 0 ? "expiring_" : "expired_")
        + Math.abs(daysDisplayLeft);
    String strA = "TARGET=\"" + MultipleDocumentInterface.SIDEBAR_SECTION_PLUS
        + "\" HREF=\"#" + ref + "\"";

    if (daysLeft < 0 && daysDisplayLeft > 0) {
      // if no days left but our display days > 0, that means we ran out
      // of offline time and daysDisplayLeft is when the real license expires
      VuzeActivitiesEntry entry1 = VuzeActivitiesManager.getEntryByID(ID_ACTIVITY_EXPIRED);
      VuzeActivitiesEntry entry2 = VuzeActivitiesManager.getEntryByID(ID_ACTIVITY_EXPIRING);
      if (entry1 != null || entry2 != null) {
        VuzeActivitiesManager.removeEntries(new VuzeActivitiesEntry[] {
          entry1,
          entry2
        }, true);
      }

      String msgID = "plus.notificaiton." + ID_ACTIVITY_OFFLINE;
      s = MessageText.getString(msgID, new String[] {
        "" + daysDisplayLeft,
      });
      id = ID_ACTIVITY_OFFLINE;

    } else {
      VuzeActivitiesEntry entry3 = VuzeActivitiesManager.getEntryByID(ID_ACTIVITY_OFFLINE);
      if (entry3 != null) {
        VuzeActivitiesManager.removeEntries(new VuzeActivitiesEntry[] {
          entry3,
        }, true);
      }

      if (daysDisplayLeft > 0) {
        String msgID = "plus.notificaiton." + ID_ACTIVITY_EXPIRING
            + (daysDisplayLeft == 1 ? ".s" : ".p");
        s = MessageText.getString(msgID, new String[] {
          "" + daysDisplayLeft,
          strA
        });
        id = ID_ACTIVITY_EXPIRING;
      } else {
        String msgID = "plus.notificaiton." + ID_ACTIVITY_EXPIRED
            + (daysDisplayLeft == -1 ? ".s" : ".p");
        s = MessageText.getString(msgID, new String[] {
          "" + -daysDisplayLeft,
          strA
        });
        id = ID_ACTIVITY_EXPIRED;
      }
    }
    VuzeActivitiesEntry entry = VuzeActivitiesManager.getEntryByID(id);
    if (entry == null) {
      boolean existed = VuzeActivitiesManager.isEntryIdRemoved(id);
      if (existed) {
        return;
      }

      entry = new VuzeActivitiesEntry(SystemTime.getCurrentTime(), s,
          VuzeActivitiesConstants.TYPEID_VUZENEWS);
      entry.setID(id);
      entry.setIconID("image.sidebar.plus");

      if (daysLeft < 0 && daysDisplayLeft < 0) {
        UIFunctionsManager.getUIFunctions().getMDI().showEntryByID(
            MultipleDocumentInterface.SIDEBAR_SECTION_PLUS);
      }
    } else {
      entry.setText(s);
      entry.setTimestamp(SystemTime.getCurrentTime());
    }
    VuzeActivitiesManager.addEntries(new VuzeActivitiesEntry[] {
      entry
    });
  }

  public void licenceRemoved(Licence licence) {
    Object[] entry;
   
    synchronized( licence_map ){
     
      entry = licence_map.remove(licence.getKey());
    }

    if ( entry != null ){
     
      licence.removeInstallationListener( (LicenceInstallationListener)entry[1] );
    }
   
    updateUI();
  }

}
TOP

Related Classes of com.aelitis.azureus.ui.swt.feature.FeatureManagerUIListener

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.