Package com.aelitis.azureus.ui.swt.subscriptions

Source Code of com.aelitis.azureus.ui.swt.subscriptions.SubscriptionMDIEntry$SubsMenuItemListener

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

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;

import org.gudy.azureus2.core3.category.Category;
import org.gudy.azureus2.core3.category.CategoryManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.ui.UIInputReceiver;
import org.gudy.azureus2.plugins.ui.UIInputReceiverListener;
import org.gudy.azureus2.plugins.ui.UIManager;
import org.gudy.azureus2.plugins.ui.menus.*;
import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
import org.gudy.azureus2.ui.swt.*;
import org.gudy.azureus2.ui.swt.mainwindow.TorrentOpener;
import org.gudy.azureus2.ui.swt.plugins.UISWTInputReceiver;
import org.gudy.azureus2.ui.swt.shells.MessageBoxShell;
import org.gudy.azureus2.ui.swt.views.IView;

import com.aelitis.azureus.core.metasearch.Engine;
import com.aelitis.azureus.core.metasearch.impl.web.WebEngine;
import com.aelitis.azureus.core.subs.*;
import com.aelitis.azureus.core.vuzefile.VuzeFile;
import com.aelitis.azureus.ui.UserPrompterResultListener;
import com.aelitis.azureus.ui.common.viewtitleinfo.ViewTitleInfoManager;
import com.aelitis.azureus.ui.mdi.MdiEntry;
import com.aelitis.azureus.ui.mdi.MdiEntryVitalityImage;
import com.aelitis.azureus.ui.swt.mdi.MdiEntrySWT;

public class SubscriptionMDIEntry implements SubscriptionListener
{
  private static final String ALERT_IMAGE_ID  = "image.sidebar.vitality.alert";
  private static final String AUTH_IMAGE_ID  = "image.sidebar.vitality.auth";

  private final MdiEntry mdiEntry;

  MdiEntryVitalityImage spinnerImage;

  private MdiEntryVitalityImage warningImage;
  private final Subscription subs;
  private String key;

  public SubscriptionMDIEntry(Subscription subs, MdiEntry entry) {
    this.subs = subs;
    this.mdiEntry = entry;
    key = "Subscription_" + ByteFormatter.encodeString(subs.getPublicKey());
    setupMdiEntry();
  }
 
  private void setupMdiEntry() {
    if (mdiEntry == null) {
      return;
    }

    mdiEntry.setImageLeftID("image.sidebar.subscriptions");
   
    warningImage = mdiEntry.addVitalityImage( ALERT_IMAGE_ID );
   
    spinnerImage = mdiEntry.addVitalityImage("image.sidebar.vitality.dots");
   
    if (spinnerImage != null) {
      spinnerImage.setVisible(false);
    }
   
    setWarning();

    PluginInterface pi = PluginInitializer.getDefaultInterface();
    UIManager uim = pi.getUIManager();
   
    final MenuManager menuManager = uim.getMenuManager();
   
    MenuItem menuItem;
   
    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.forcecheck");
    menuItem.setText(MessageText.getString("Subscription.menu.forcecheck"));
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        try {
          subs.getManager().getScheduler().downloadAsync( subs, true );
        } catch (SubscriptionException e) {
          Debug.out(e);
        }
      }
    });
   
    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.clearall");
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        subs.getHistory().markAllResultsRead();
        refreshView();
      }
    });
   
    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.dirtyall");
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        subs.getHistory().markAllResultsUnread();
        refreshView();
      }
    });

    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.deleteall");
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        subs.getHistory().deleteAllResults();
        refreshView();
      }
    });
   
    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.reset");
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        subs.getHistory().reset();
        try{
          subs.getEngine().reset();
        }catch( Throwable e ){
          Debug.printStackTrace(e);
        }
        try{
          subs.getManager().getScheduler().downloadAsync(subs, true);
         
        }catch( Throwable e ){
         
          Debug.out(e);
        }
      }
    });

    try{
      Engine engine = subs.getEngine();
       
      if ( engine instanceof WebEngine ){
       
        if (((WebEngine)engine).isNeedsAuth()){
         
          menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.resetauth");
          menuItem.addListener(new SubsMenuItemListener() {
            public void selected(MdiEntry info, Subscription subs) {
              try{
                Engine engine = subs.getEngine();
               
                if ( engine instanceof WebEngine ){
                 
                  ((WebEngine)engine).setCookies( null );
                }
              }catch( Throwable e ){
               
                Debug.printStackTrace(e);
              }
             
              try{
                subs.getManager().getScheduler().downloadAsync(subs, true);
               
              }catch( Throwable e ){
               
                Debug.out(e);
              }
            }
          });
         
          menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.setcookies");
          menuItem.addListener(new SubsMenuItemListener() {
            public void selected(MdiEntry info, final Subscription subs) {
              try{
                Engine engine = subs.getEngine();
               
                if ( engine instanceof WebEngine ){
                 
                  final WebEngine we = (WebEngine)engine;
                 
                  UISWTInputReceiver entry = new SimpleTextEntryWindow();
                 
                  String[] req = we.getRequiredCookies();
                 
                  String  req_str = "";
                 
                  for ( String r:req ){
                   
                    req_str += (req_str.length()==0?"":";") + r + "=?";
                  }
                  entry.setPreenteredText( req_str, true );
                  entry.maintainWhitespace(false);
                  entry.allowEmptyInput( false );
                  entry.setTitle("general.enter.cookies");
                  entry.prompt(new UIInputReceiverListener() {
                    public void UIInputReceiverClosed(UIInputReceiver entry) {
                      if (!entry.hasSubmittedInput()){
                       
                        return;
                      }

                      try {
                        String input = entry.getSubmittedInput().trim();
                       
                        if ( input.length() > 0 ){
                         
                          we.setCookies( input );
                         
                          subs.getManager().getScheduler().downloadAsync(subs, true);
                        }
                      }catch( Throwable e ){
                       
                        Debug.printStackTrace(e);
                      }
                    }
                  });
                }
              }catch( Throwable e ){
               
                Debug.printStackTrace(e);
              }
            }
          });
        }
      }
    }catch( Throwable e ){
     
      Debug.printStackTrace(e);
    }
   
      // sep
   
    menuManager.addMenuItem("sidebar." + key,"s1").setStyle( MenuItem.STYLE_SEPARATOR );

      // category
   
    menuItem = menuManager.addMenuItem("sidebar." + key, "MyTorrentsView.menu.setCategory");
    menuItem.setStyle( MenuItem.STYLE_MENU );
   
    menuItem.addFillListener(
        new MenuItemFillListener()
        {
          public void
          menuWillBeShown(
            MenuItem   menu,
            Object     data )
          {   
            addCategorySubMenu( menuManager, menu );
          }
        });
   
   
    if ( subs.isUpdateable()){
     
      menuItem = menuManager.addMenuItem("sidebar." + key,"MyTorrentsView.menu.rename");
      menuItem.addListener(new SubsMenuItemListener() {
        public void selected(MdiEntry info, final Subscription subs) {
          UISWTInputReceiver entry = new SimpleTextEntryWindow();
          entry.setPreenteredText(subs.getName(), false );
          entry.maintainWhitespace(false);
          entry.allowEmptyInput( false );
          entry.setLocalisedTitle(MessageText.getString("label.rename",
              new String[] {
                subs.getName()
              }));
          entry.prompt(new UIInputReceiverListener() {
            public void UIInputReceiverClosed(UIInputReceiver entry) {
              if (!entry.hasSubmittedInput()){
               
                return;
              }
             
              String input = entry.getSubmittedInput().trim();
             
              if ( input.length() > 0 ){
               
                try{
                  subs.setName( input );
                 
                }catch( Throwable e ){
                 
                  Debug.printStackTrace(e);
                }
              }
            }
          });
        }
      });
    }
   
    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.upgrade");
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        subs.resetHighestVersion();
      }
    });
     
    menuItem.addFillListener(
      new MenuItemFillListener()
      {
        public void
        menuWillBeShown(
          MenuItem   menu,
          Object     data )
        {                 
          menu.setVisible( subs.getHighestVersion() > subs.getVersion());
        }
      });
   
    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.export");
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        export();
      }
    });
   
      // sep
   
    menuManager.addMenuItem("sidebar." + key,"s2").setStyle( MenuItem.STYLE_SEPARATOR );
   
    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.remove");
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        removeWithConfirm();
      }
    });
   
    menuManager.addMenuItem("sidebar." + key,"s3").setStyle( MenuItem.STYLE_SEPARATOR );

    menuItem = menuManager.addMenuItem("sidebar." + key,"Subscription.menu.properties");
    menuItem.addListener(new SubsMenuItemListener() {
      public void selected(MdiEntry info, Subscription subs) {
        showProperties();
      }
    });
   
    subs.addListener(this);
  }

  public void subscriptionDownloaded(Subscription subs, boolean auto) {
  }
 
  public void subscriptionChanged(Subscription subs) {
    mdiEntry.redraw();
    ViewTitleInfoManager.refreshTitleInfo(mdiEntry.getViewTitleInfo());
  }

  protected void refreshView() {
    if (!(mdiEntry instanceof MdiEntrySWT)) {
      return;
    }
    IView iView = ((MdiEntrySWT)mdiEntry).getIView();
    if (iView instanceof SubscriptionView) {
      SubscriptionView subsView = (SubscriptionView) iView;
      subsView.refreshView();
    }
  }

  protected void
  setWarning()
  {
      // possible during initialisation, status will be shown again on complete
   
    if ( warningImage == null ){
     
      return;
    }
   
    SubscriptionHistory history = subs.getHistory();
   
    String  last_error = history.getLastError();

    boolean  auth_fail = history.isAuthFail();
   
      // don't report problem until its happened a few times, but not for auth fails as this is a perm error
   
    if ( history.getConsecFails() < 3 && !auth_fail ){
     
      last_error = null;
    }
   
    boolean  trouble = last_error != null;
   
    if ( trouble ){
    
      warningImage.setToolTip( last_error );
     
      warningImage.setImageID( auth_fail?AUTH_IMAGE_ID:ALERT_IMAGE_ID );
     
      warningImage.setVisible( true );
     
    }else{
     
      warningImage.setVisible( false );
     
      warningImage.setToolTip( "" );
    }
  }

  private void
  addCategorySubMenu(
    MenuManager        menu_manager,
    MenuItem        menu )
  {
    menu.removeAllChildItems();

    Category[] categories = CategoryManager.getCategories();
   
    Arrays.sort( categories );

    MenuItem m;

    if ( categories.length > 0 ){
     
      String  assigned_category = subs.getCategory();
     
      final Category uncat = CategoryManager.getCategory( Category.TYPE_UNCATEGORIZED );
           
      if ( uncat != null ){
       
        m = menu_manager.addMenuItem( menu, uncat.getName());
       
        m.setStyle( MenuItem.STYLE_RADIO );
               
        m.setData( new Boolean( assigned_category == null ));
       
        m.addListener(
          new MenuItemListener()
          {
            public void
            selected(
              MenuItem      menu,
              Object         target )
            {
              assignSelectedToCategory( uncat );
            }
          });
       

        m = menu_manager.addMenuItem( menu, "sep1" );
       
        m.setStyle( MenuItem.STYLE_SEPARATOR );
      }

      for ( int i=0; i<categories.length; i++ ){
       
        final Category cat = categories[i];
       
        if ( cat.getType() == Category.TYPE_USER) {
         
          m = menu_manager.addMenuItem( menu, "!" + cat.getName() + "!" );
         
          m.setStyle( MenuItem.STYLE_RADIO );
                   
          m.setData( new Boolean( assigned_category != null && assigned_category.equals( cat.getName())));
         
          m.addListener(
            new MenuItemListener()
            {
              public void
              selected(
                MenuItem      menu,
                Object         target )
              {
                assignSelectedToCategory( cat );
              }
            });
        }
      }

      m = menu_manager.addMenuItem( menu, "sep2" );
     
      m.setStyle( MenuItem.STYLE_SEPARATOR );
    }

    m = menu_manager.addMenuItem( menu, "MyTorrentsView.menu.setCategory.add" );
   
    m.addListener(
        new MenuItemListener()
        {
          public void
          selected(
            MenuItem      menu,
            Object         target )
          {
            addCategory( );
          }
        });

  }

  private void
  addCategory() 
  {
    CategoryAdderWindow adderWindow = new CategoryAdderWindow(Display.getDefault());
   
    Category newCategory = adderWindow.getNewCategory();
   
    if ( newCategory != null ){
   
      assignSelectedToCategory( newCategory );
    }
  }

  private void
  assignSelectedToCategory(
    Category       category )
  {
    if ( category.getType() == Category.TYPE_UNCATEGORIZED ){
   
      subs.setCategory( null );
     
    }else{
     
      subs.setCategory( category.getName());
    }
  }

  protected void export() {
    Utils.execSWTThread(
      new AERunnable()
      {
        public void
        runSupport()
        {
          FileDialog dialog =
            new FileDialog( Utils.findAnyShell(), SWT.SYSTEM_MODAL | SWT.SAVE );
         
          dialog.setFilterPath( TorrentOpener.getFilterPathData() );
                     
          dialog.setText(MessageText.getString("subscript.export.select.template.file"));
         
          dialog.setFilterExtensions(new String[] {
              "*.vuze",
              "*.vuz",
              Constants.FILE_WILDCARD
            });
          dialog.setFilterNames(new String[] {
              "*.vuze",
              "*.vuz",
              Constants.FILE_WILDCARD
            });
         
          String path = TorrentOpener.setFilterPathData( dialog.open());

          if ( path != null ){
           
            String lc = path.toLowerCase();
           
            if ( !lc.endsWith( ".vuze" ) && !lc.endsWith( ".vuz" )){
             
              path += ".vuze";
            }
           
            try{
              VuzeFile vf = subs.getVuzeFile();
             
              vf.write( new File( path ));
             

            }catch( Throwable e ){
             
              Debug.out( e );
            }
          }
        }
      });
  }

  protected void
  removeWithConfirm( )
  {
    MessageBoxShell mb =
      new MessageBoxShell(
        MessageText.getString("message.confirm.delete.title"),
        MessageText.getString("message.confirm.delete.text",
            new String[] {
              subs.getName()
            }),
        new String[] {
          MessageText.getString("Button.yes"),
          MessageText.getString("Button.no")
        },
        1 );
   
    mb.open(new UserPrompterResultListener() {
      public void prompterClosed(int result) {
        if (result == 0) {
          subs.setSubscribed( false );
        }
      }
    });
  }
 
  protected void
  showProperties()
  {
    SubscriptionHistory history = subs.getHistory();
   
    SimpleDateFormat df = new SimpleDateFormat();
   
    String last_error = history.getLastError();
   
    if ( last_error == null ){
      last_error = "";
    }
   
    String  engine_str;
    String  auth_str  = String.valueOf(false);
   
    try{
      Engine engine = subs.getEngine();
     
      engine_str = engine.getNameEx();
     
      if ( engine instanceof WebEngine ){
     
        WebEngine web_engine = (WebEngine)engine;
       
        if ( web_engine.isNeedsAuth()){
         
          auth_str = String.valueOf(true) + ": cookies=" + toString( web_engine.getRequiredCookies());
        }
      }
    }catch( Throwable e ){
     
      engine_str   = "Unknown";
      auth_str  = "";
    }
   
    String[] keys = {
        "subs.prop.enabled",
        "subs.prop.is_public",
        "subs.prop.is_auto",
        "subs.prop.is_auto_ok",
        "subs.prop.update_period",
        "subs.prop.last_scan",
        "subs.prop.last_result",
        "subs.prop.next_scan",
        "subs.prop.last_error",
        "subs.prop.num_read",
        "subs.prop.num_unread",
        "subs.prop.assoc",
        "subs.prop.version",
        "subs.prop.high_version",
        "subscriptions.listwindow.popularity",
        "subs.prop.template",
        "subs.prop.auth",
        "TableColumn.header.category",
      };
   
    String  category_str;
   
    String category = subs.getCategory();
   
    if ( category == null ){
     
      category_str = MessageText.getString( "Categories.uncategorized" );
     
    }else{
     
      category_str = category;
    }
   
    int   check_freq      = history.getCheckFrequencyMins();
    long last_new_result   = history.getLastNewResultTime();
    long next_scan       = history.getNextScanTime();
   
    String[] values = {
        String.valueOf( history.isEnabled()),
        String.valueOf( subs.isPublic()),
        String.valueOf( history.isAutoDownload()),
        String.valueOf( subs.isAutoDownloadSupported()),
        (check_freq==Integer.MAX_VALUE?"":(String.valueOf( history.getCheckFrequencyMins() + " " + MessageText.getString( "ConfigView.text.minutes")))),
        df.format(new Date( history.getLastScanTime())),
        ( last_new_result==0?"":df.format(new Date( last_new_result ))),
        ( next_scan == Long.MAX_VALUE?"":df.format(new Date( next_scan ))),
        (last_error.length()==0?MessageText.getString("PeersView.uniquepiece.none"):last_error),
        String.valueOf( history.getNumRead()),
        String.valueOf( history.getNumUnread()),
        String.valueOf( subs.getAssociationCount()),
        String.valueOf( subs.getVersion()),
        subs.getHighestVersion() > subs.getVersion()?String.valueOf( subs.getHighestVersion()):null,
        subs.getCachedPopularity()<=1?null:String.valueOf( subs.getCachedPopularity()),
        engine_str,
        auth_str,
        category_str,
      };
   
    new PropertiesWindow( subs.getName(), keys, values );
  }

  private String
  toString(
    String[]  strs )
  {
    String  res = "";
   
    for(int i=0;i<strs.length;i++){
      res += (i==0?"":",") + strs[i];
    }
   
    return( res );
  }
 

  public abstract static class SubsMenuItemListener implements MenuItemListener {
    public final void selected(MenuItem menu, Object target) {
      if (target instanceof MdiEntry) {
        MdiEntry info = (MdiEntry) target;
        Subscription subs = (Subscription) info.getDatasource();
       
        try {
          selected(info, subs);
        } catch (Throwable t) {
          Debug.out(t);
        }
      }
    }

    public abstract void selected(MdiEntry info, Subscription subs);
  }
}
TOP

Related Classes of com.aelitis.azureus.ui.swt.subscriptions.SubscriptionMDIEntry$SubsMenuItemListener

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.