/*
* Created by Angel Leon (@gubatron), Alden Torres (aldenml)
* Copyright (c) 2011-2014, FrostWire(R). All rights reserved.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.bt.download.android.gui;
import java.util.Arrays;
import java.util.List;
import com.bt.download.android.core.ConfigurationManager;
import com.bt.download.android.core.Constants;
import com.bt.download.android.gui.util.OSUtils;
import com.frostwire.logging.Logger;
import com.frostwire.search.SearchPerformer;
import com.frostwire.search.appia.AppiaSearchPerformer;
import com.frostwire.search.appia.AppiaSearchPerformer.AppiaSearchThrottle;
import com.frostwire.search.archiveorg.ArchiveorgSearchPerformer;
import com.frostwire.search.bitsnoop.BitSnoopSearchPerformer;
import com.frostwire.search.domainalias.DomainAliasManager;
import com.frostwire.search.extratorrent.ExtratorrentSearchPerformer;
import com.frostwire.search.eztv.EztvSearchPerformer;
import com.frostwire.search.frostclick.FrostClickSearchPerformer;
import com.frostwire.search.frostclick.UserAgent;
import com.frostwire.search.mininova.MininovaSearchPerformer;
import com.frostwire.search.monova.MonovaSearchPerformer;
import com.frostwire.search.soundcloud.SoundcloudSearchPerformer;
import com.frostwire.search.tbp.TPBSearchPerformer;
import com.frostwire.search.torlock.TorLockSearchPerformer;
import com.frostwire.search.torrentsfm.TorrentsfmSearchPerformer;
import com.frostwire.search.yify.YifySearchPerformer;
import com.frostwire.search.youtube.YouTubeSearchPerformer;
/**
*
* @author gubatron
* @author aldenml
*
*/
public abstract class SearchEngine {
private static final Logger LOG = Logger.getLogger(SearchEngine.class);
public static final UserAgent FROSTWIRE_ANDROID_USER_AGENT = new UserAgent(OSUtils.getOSVersionString(), Constants.FROSTWIRE_VERSION_STRING, Constants.FROSTWIRE_BUILD);
private static final int DEFAULT_TIMEOUT = 10000;
private final String name;
private final String preferenceKey;
private boolean active;
private SearchEngine(String name, String preferenceKey) {
this.name = name;
this.preferenceKey = preferenceKey;
this.active = true;
}
public String getName() {
return name;
}
public abstract SearchPerformer getPerformer(long token, String keywords);
public String getPreferenceKey() {
return preferenceKey;
}
public boolean isEnabled() {
return isActive() && ConfigurationManager.instance().getBoolean(preferenceKey);
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
@Override
public String toString() {
return name;
}
public static List<SearchEngine> getEngines() {
return ALL_ENGINES;
}
public static SearchEngine forName(String name) {
for (SearchEngine engine : getEngines()) {
if (engine.getName().equals(name)) {
return engine;
}
}
return null;
}
public static final SearchEngine EXTRATORRENT = new SearchEngine("Extratorrent", Constants.PREF_KEY_SEARCH_USE_EXTRATORRENT) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new ExtratorrentSearchPerformer(new DomainAliasManager("extratorrent.cc"), token, keywords, DEFAULT_TIMEOUT);
}
};
public static final SearchEngine MININOVA = new SearchEngine("Mininova", Constants.PREF_KEY_SEARCH_USE_MININOVA) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new MininovaSearchPerformer(new DomainAliasManager("www.mininova.org"), token, keywords, DEFAULT_TIMEOUT);
}
};
public static final SearchEngine YOUTUBE = new SearchEngine("YouTube", Constants.PREF_KEY_SEARCH_USE_YOUTUBE) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new YouTubeSearchPerformer(new DomainAliasManager("gdata.youtube.com"), token, keywords, DEFAULT_TIMEOUT);
}
};
public static final SearchEngine SOUNCLOUD = new SearchEngine("Soundcloud", Constants.PREF_KEY_SEARCH_USE_SOUNDCLOUD) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new SoundcloudSearchPerformer(new DomainAliasManager("api.sndcdn.com"), token, keywords, DEFAULT_TIMEOUT);
}
};
public static final SearchEngine ARCHIVE = new SearchEngine("Archive.org", Constants.PREF_KEY_SEARCH_USE_ARCHIVEORG) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new ArchiveorgSearchPerformer(new DomainAliasManager("archive.org"), token, keywords, DEFAULT_TIMEOUT);
}
};
public static final SearchEngine FROSTCLICK = new SearchEngine("FrostClick", Constants.PREF_KEY_SEARCH_USE_FROSTCLICK) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new FrostClickSearchPerformer(new DomainAliasManager("api.frostclick.com"), token, keywords, DEFAULT_TIMEOUT, FROSTWIRE_ANDROID_USER_AGENT);
}
};
public static final SearchEngine BITSNOOP = new SearchEngine("BitSnoop", Constants.PREF_KEY_SEARCH_USE_BITSNOOP) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new BitSnoopSearchPerformer(new DomainAliasManager("bitsnoop.com"), token, keywords, DEFAULT_TIMEOUT);
}
};
public static final SearchEngine TORLOCK = new SearchEngine("TorLock", Constants.PREF_KEY_SEARCH_USE_TORLOCK) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new TorLockSearchPerformer(new DomainAliasManager("www.torlock.com"), token, keywords, DEFAULT_TIMEOUT);
}
};
public static final SearchEngine EZTV = new SearchEngine("Eztv", Constants.PREF_KEY_SEARCH_USE_EZTV) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new EztvSearchPerformer(new DomainAliasManager("eztv.it"), token, keywords, DEFAULT_TIMEOUT);
}
};
public static final SearchEngine APPIA = new SearchEngine("Appia", Constants.PREF_KEY_SEARCH_USE_APPIA) {
private AppiaSearchThrottle throttle = new AppiaSearchThrottle();
@Override
public SearchPerformer getPerformer(long token, String keywords) {
return new AppiaSearchPerformer(new DomainAliasManager(AppiaSearchPerformer.HTTP_SERVER_NAME), token, keywords, DEFAULT_TIMEOUT, FROSTWIRE_ANDROID_USER_AGENT, LocalSearchEngine.instance().getAndroidId(), throttle);
}
};
public static final SearchEngine TPB = new SearchEngine("TPB", Constants.PREF_KEY_SEARCH_USE_TPB) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
TPBSearchPerformer performer = null;
if (NetworkManager.instance().isDataWIFIUp()) {
performer = new TPBSearchPerformer(new DomainAliasManager("thepiratebay.se"), token, keywords, DEFAULT_TIMEOUT);
} else {
LOG.info("No TPBSearchPerformer, WiFi not up");
}
return performer;
}
};
public static final SearchEngine MONOVA = new SearchEngine("Monova", Constants.PREF_KEY_SEARCH_USE_MONOVA) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
MonovaSearchPerformer performer = null;
if (NetworkManager.instance().isDataWIFIUp()) {
performer = new MonovaSearchPerformer(new DomainAliasManager("www.monova.org"), token, keywords, DEFAULT_TIMEOUT);
} else {
LOG.info("No MonovaSearchPerformer, WiFi not up");
}
return performer;
}
};
public static final SearchEngine YIFY = new SearchEngine("Yify", Constants.PREF_KEY_SEARCH_USE_YIFY) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
YifySearchPerformer performer = null;
if (NetworkManager.instance().isDataWIFIUp()) {
performer = new YifySearchPerformer(new DomainAliasManager("www.yify-torrent.org"), token, keywords, DEFAULT_TIMEOUT);
} else {
LOG.info("No YifySearchPerformer, WiFi not up");
}
return performer;
}
};
public static final SearchEngine TORRENTSFM = new SearchEngine("Torrents.fm", Constants.PREF_KEY_SEARCH_USE_TORRENTSFM) {
@Override
public SearchPerformer getPerformer(long token, String keywords) {
TorrentsfmSearchPerformer performer = null;
if (NetworkManager.instance().isDataWIFIUp()) {
performer = new TorrentsfmSearchPerformer(new DomainAliasManager("torrents.fm"), token, keywords, DEFAULT_TIMEOUT);
} else {
LOG.info("No TorrentsfmSearchPerformer, WiFi not up");
}
return performer;
}
};
private static final List<SearchEngine> ALL_ENGINES = Arrays.asList(TPB, YIFY, YOUTUBE, FROSTCLICK, MONOVA, MININOVA, BITSNOOP, EXTRATORRENT, SOUNCLOUD, ARCHIVE, TORLOCK, EZTV, TORRENTSFM, APPIA);
}