Package org.gudy.azureus2.ui.swt.views

Source Code of org.gudy.azureus2.ui.swt.views.ScrapeInfoView

package org.gudy.azureus2.ui.swt.views;

import java.net.URL;
import java.util.Iterator;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.torrent.TOTorrentException;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
import org.gudy.azureus2.core3.tracker.client.TRTrackerScraper;
import org.gudy.azureus2.core3.tracker.client.TRTrackerScraperResponse;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.BufferedLabel;
import org.gudy.azureus2.ui.swt.components.BufferedTruncatedLabel;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
import org.gudy.azureus2.ui.swt.maketorrent.MultiTrackerEditor;
import org.gudy.azureus2.ui.swt.maketorrent.TrackerEditorListener;

public class ScrapeInfoView
  extends AbstractIView
  implements IViewExtension
{
  private DownloadManager manager;

  private Composite  cParent;
  private Composite   cScrapeInfoView;

  private BufferedTruncatedLabel tracker_status;

  private Button updateButton;

  private BufferedLabel trackerUpdateIn;

  private Menu menuTracker;

  private MenuItem itemSelect;

  private BufferedTruncatedLabel trackerUrlValue;

  private long lastRefreshSecs;

  public ScrapeInfoView(DownloadManager dm) {
    this.manager = dm;
  }

  public String getData() {
    return "ScrapeInfoView.title";
  }

  public void initialize(Composite parent) {
    cParent = parent;
    Label label;
    GridData gridData;
    final Display display = parent.getDisplay();

    if (cScrapeInfoView == null || cScrapeInfoView.isDisposed()) {
      cScrapeInfoView = new Composite(parent, SWT.NONE);
    }

    gridData = new GridData(GridData.FILL_BOTH);
    cScrapeInfoView.setLayoutData(gridData);

    GridLayout layoutInfo = new GridLayout();
    layoutInfo.numColumns = 4;
    cScrapeInfoView.setLayout(layoutInfo);

    label = new Label(cScrapeInfoView, SWT.LEFT);
    Messages.setLanguageText(label, "GeneralView.label.trackerurl"); //$NON-NLS-1$
    label.setCursor(display.getSystemCursor(SWT.CURSOR_HAND));
    label.setForeground(Colors.blue);
    label.addMouseListener(new MouseAdapter() {
      public void mouseDoubleClick(MouseEvent arg0) {
        String announce = trackerUrlValue.getText();
        if (announce != null && announce.length() != 0) {
          new Clipboard(display).setContents(new Object[] {
            announce
          }, new Transfer[] {
            TextTransfer.getInstance()
          });
        }
      }

      public void mouseDown(MouseEvent arg0) {
        String announce = trackerUrlValue.getText();
        if (announce != null && announce.length() != 0) {
          new Clipboard(display).setContents(new Object[] {
            announce
          }, new Transfer[] {
            TextTransfer.getInstance()
          });
        }
      }
    });

    menuTracker = new Menu(parent.getShell(), SWT.POP_UP);
    itemSelect = new MenuItem(menuTracker, SWT.CASCADE);
    Messages.setLanguageText(itemSelect, "GeneralView.menu.selectTracker");
    MenuItem itemEdit = new MenuItem(menuTracker, SWT.NULL);
    Messages.setLanguageText(itemEdit, "MyTorrentsView.menu.editTracker");

    cScrapeInfoView.addDisposeListener(new DisposeListener() {
      public void widgetDisposed(DisposeEvent e) {
        menuTracker.dispose();
      }
    });

    itemEdit.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event e) {
        final TOTorrent torrent = manager.getTorrent();

        if (torrent == null) {
          return;
        }

        List group = TorrentUtils.announceGroupsToList(torrent);

        new MultiTrackerEditor(null, group, new TrackerEditorListener() {
          public void trackersChanged(String str, String str2, List _group) {
            TorrentUtils.listToAnnounceGroups(_group, torrent);

            try {
              TorrentUtils.writeToFile(torrent);
            } catch (Throwable e2) {

              Debug.printStackTrace(e2);
            }

            TRTrackerAnnouncer tc = manager.getTrackerClient();

            if (tc != null) {

              tc.resetTrackerUrl(true);
            }
          }
        }, true);
      }
    });

    final Listener menuListener = new Listener() {
      public void handleEvent(Event e) {
        if (e.widget instanceof MenuItem) {

          String text = ((MenuItem) e.widget).getText();

          TOTorrent torrent = manager.getTorrent();

          TorrentUtils.announceGroupsSetFirst(torrent, text);

          try {
            TorrentUtils.writeToFile(torrent);

          } catch (TOTorrentException f) {

            Debug.printStackTrace(f);
          }

          TRTrackerAnnouncer tc = manager.getTrackerClient();

          if (tc != null) {

            tc.resetTrackerUrl(false);
          }
        }
      }
    };

    menuTracker.addListener(SWT.Show, new Listener() {
      public void handleEvent(Event e) {
        Menu menuSelect = itemSelect.getMenu();
        if (menuSelect != null && !menuSelect.isDisposed()) {
          menuSelect.dispose();
        }
        if (manager == null || cScrapeInfoView == null
            || cScrapeInfoView.isDisposed()) {
          return;
        }
        List groups = TorrentUtils.announceGroupsToList(manager.getTorrent());
        menuSelect = new Menu(cScrapeInfoView.getShell(), SWT.DROP_DOWN);
        itemSelect.setMenu(menuSelect);
        Iterator iterGroups = groups.iterator();
        while (iterGroups.hasNext()) {
          List trackers = (List) iterGroups.next();
          MenuItem menuItem = new MenuItem(menuSelect, SWT.CASCADE);
          Messages.setLanguageText(menuItem, "wizard.multitracker.group");
          Menu menu = new Menu(cScrapeInfoView.getShell(), SWT.DROP_DOWN);
          menuItem.setMenu(menu);
          Iterator iterTrackers = trackers.iterator();
          while (iterTrackers.hasNext()) {
            String url = (String) iterTrackers.next();
            MenuItem menuItemTracker = new MenuItem(menu, SWT.CASCADE);
            menuItemTracker.setText(url);
            menuItemTracker.addListener(SWT.Selection, menuListener);
          }
        }
      }
    });

    trackerUrlValue = new BufferedTruncatedLabel(cScrapeInfoView, SWT.LEFT, 70);

    trackerUrlValue.addMouseListener(new MouseAdapter() {
      public void mouseDown(MouseEvent event) {
        if (event.button == 3
            || (event.button == 1 && event.stateMask == SWT.CONTROL)) {
          menuTracker.setVisible(true);
        } else if (event.button == 1) {
          String url = trackerUrlValue.getText();
          if (url.startsWith("http://") || url.startsWith("https://")) {
            int pos = -1;
            if ((pos = url.indexOf("/announce")) != -1) {
              url = url.substring(0, pos + 1);
            }
            Utils.launch(url);
          }
        }
      }
    });

    gridData = new GridData(GridData.FILL_HORIZONTAL);
    gridData.horizontalSpan = 3;
    trackerUrlValue.setLayoutData(gridData);

    ////////////////////////

    label = new Label(cScrapeInfoView, SWT.LEFT);
    Messages.setLanguageText(label, "GeneralView.label.tracker");
    tracker_status = new BufferedTruncatedLabel(cScrapeInfoView, SWT.LEFT, 150);
    gridData = new GridData(GridData.FILL_HORIZONTAL);
    gridData.horizontalSpan = 3;
    tracker_status.setLayoutData(gridData);

    label = new Label(cScrapeInfoView, SWT.LEFT);
    Messages.setLanguageText(label, "GeneralView.label.updatein");
    trackerUpdateIn = new BufferedLabel(cScrapeInfoView, SWT.LEFT);
    gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
    trackerUpdateIn.setLayoutData(gridData);

    updateButton = new Button(cScrapeInfoView, SWT.PUSH);
    Messages.setLanguageText(updateButton, "GeneralView.label.trackerurlupdate");
    updateButton.setLayoutData(new GridData());
    updateButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        new AEThread2( "SIV:async" )
        {
          public void
          run()
          {
            if ( manager.getTrackerClient() != null ){
           
              manager.requestTrackerAnnounce( false );
             
            }else{
             
              manager.requestTrackerScrape( true );
            }
          }
        }.start();
      }
    });

    cScrapeInfoView.layout(true);

  }

  public void refresh() {
    super.refresh();

    long thisRefreshSecs = SystemTime.getCurrentTime() / 1000;
    if (lastRefreshSecs != thisRefreshSecs) {
      lastRefreshSecs = thisRefreshSecs;
      setTracker();
    }
  }

  public Composite getComposite() {
    return cScrapeInfoView;
  }

  public Menu getPrivateMenu() {
    return null;
  }

  public void viewActivated() {
  }

  public void viewDeactivated() {
  }

  private void setTracker() {
    if (cScrapeInfoView == null || cScrapeInfoView.isDisposed()) {
      return;
    }

    Display display = cScrapeInfoView.getDisplay();

    String status   = manager.getTrackerStatus();
    int time     = manager.getTrackerTime();

    TRTrackerAnnouncer trackerClient = manager.getTrackerClient();

    if ( trackerClient != null ){
     
      tracker_status.setText( trackerClient.getStatusString());
     
      time = trackerClient.getTimeUntilNextUpdate();
     
    }else{
     
      tracker_status.setText( status );
    }

    if (time < 0) {

      trackerUpdateIn.setText(MessageText.getString("GeneralView.label.updatein.querying"));

    } else {

      trackerUpdateIn.setText(TimeFormatter.formatColon(time));
    }

    boolean update_state;

    String trackerURL = null;

    if (trackerClient != null) {

      URL temp = trackerClient.getTrackerURL();

      if (temp != null) {

        trackerURL = temp.toString();
      }
    }

    if (trackerURL == null) {

      TOTorrent torrent = manager.getTorrent();

      if (torrent != null) {

        trackerURL = torrent.getAnnounceURL().toString();
      }
    }

    if (trackerURL != null) {

      trackerUrlValue.setText(trackerURL);

      if ((trackerURL.startsWith("http://") || trackerURL.startsWith("https://"))) {
        trackerUrlValue.setForeground(Colors.blue);
        trackerUrlValue.setCursor(display.getSystemCursor(SWT.CURSOR_HAND));
        Messages.setLanguageText(trackerUrlValue.getWidget(),
            "GeneralView.label.trackerurlopen.tooltip", true);
      } else {
        trackerUrlValue.setForeground(null);
        trackerUrlValue.setCursor(null);
        Messages.setLanguageText(trackerUrlValue.getWidget(), null);
        trackerUrlValue.setToolTipText(null);
      }
    }

    if (trackerClient != null) {

      update_state = ((SystemTime.getCurrentTime() / 1000
          - trackerClient.getLastUpdateTime() >= TRTrackerAnnouncer.REFRESH_MINIMUM_SECS));

    } else {
      TRTrackerScraperResponse sr = manager.getTrackerScrapeResponse();
     
      if ( sr == null ){
       
        update_state = true;
       
      }else{
       
        update_state = ((SystemTime.getCurrentTime()
            - sr.getScrapeStartTime() >= TRTrackerScraper.REFRESH_MINIMUM_SECS * 1000));
      }
    }

    if (updateButton.getEnabled() != update_state) {

      updateButton.setEnabled(update_state);
    }
    cScrapeInfoView.layout();
  }

  public void setDownlaodManager(DownloadManager dm) {
    manager = dm;
    Utils.execSWTThread(new AERunnable() {
      public void runSupport() {
        if ( cScrapeInfoView != null ){
          Utils.disposeComposite(cScrapeInfoView, false);
        }
        if ( cParent != null ){
         
          initialize( cParent );
        }
      }
    });
  }

}
TOP

Related Classes of org.gudy.azureus2.ui.swt.views.ScrapeInfoView

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.