use of com.biglybt.core.disk.DiskManagerFileInfoSet in project BiglyBT by BiglySoftware.
the class MyTorrentsView method filterCheck.
@Override
public boolean filterCheck(DownloadManager dm, String sLastSearch, boolean bRegexSearch) {
if (dm == null) {
return (false);
}
boolean bOurs;
if (sLastSearch.length() > 0) {
try {
String comment = dm.getDownloadState().getUserComment();
if (comment == null) {
comment = "";
}
String[][] name_mapping = { { "", dm.getDisplayName() }, { "t:", // defer (index = 1)this as costly dm.getTorrent().getAnnounceURL().getHost()
"" }, { "st:", "" + dm.getState() }, { "c:", comment }, { "f:", // defer (index = 4)
"" }, { "tag:", "" } };
Object o_name = name_mapping[0][1];
String tmpSearch = sLastSearch;
for (int i = 1; i < name_mapping.length; i++) {
if (tmpSearch.startsWith(name_mapping[i][0])) {
tmpSearch = tmpSearch.substring(name_mapping[i][0].length());
if (i == 1) {
List<String> names = new ArrayList<>();
o_name = names;
TOTorrent t = dm.getTorrent();
if (t != null) {
names.add(t.getAnnounceURL().getHost());
TOTorrentAnnounceURLSet[] sets = t.getAnnounceURLGroup().getAnnounceURLSets();
for (TOTorrentAnnounceURLSet set : sets) {
URL[] urls = set.getAnnounceURLs();
for (URL u : urls) {
names.add(u.getHost());
}
}
try {
byte[] hash = t.getHash();
names.add(ByteFormatter.encodeString(hash));
names.add(Base32.encode(hash));
} catch (Throwable e) {
}
}
} else if (i == 4) {
List<String> names = new ArrayList<>();
o_name = names;
DiskManagerFileInfoSet file_set = dm.getDiskManagerFileInfoSet();
DiskManagerFileInfo[] files = file_set.getFiles();
for (DiskManagerFileInfo f : files) {
File file = f.getFile(true);
String name = tmpSearch.contains(File.separator) ? file.getAbsolutePath() : file.getName();
names.add(name);
}
} else if (i == 5) {
List<String> names = new ArrayList<String>();
o_name = names;
TagManager tagManager = TagManagerFactory.getTagManager();
List<Tag> tags = tagManager.getTagsForTaggable(TagType.TT_DOWNLOAD_MANUAL, dm);
if (tags.size() > 0) {
tags = TagUIUtils.sortTags(tags);
for (Tag t : tags) {
String str = t.getTagName(true);
names.add(str);
}
}
} else {
o_name = name_mapping[i][1];
}
}
}
String s = bRegexSearch ? tmpSearch : "\\Q" + tmpSearch.replaceAll("[|;]", "\\\\E|\\\\Q") + "\\E";
boolean match_result = true;
if (bRegexSearch && s.startsWith("!")) {
s = s.substring(1);
match_result = false;
}
Pattern pattern = RegExUtil.getCachedPattern("tv:search", s, Pattern.CASE_INSENSITIVE);
if (o_name instanceof String) {
bOurs = pattern.matcher((String) o_name).find() == match_result;
} else {
List<String> names = (List<String>) o_name;
// match_result: true -> at least one match; false -> any fail
bOurs = !match_result;
for (String name : names) {
if (pattern.matcher(name).find()) {
bOurs = match_result;
break;
}
}
}
} catch (Exception e) {
// Future: report PatternSyntaxException message to user.
bOurs = true;
}
} else {
bOurs = true;
}
return bOurs;
}
use of com.biglybt.core.disk.DiskManagerFileInfoSet in project BiglyBT by BiglySoftware.
the class TorrentMenuFancy method buildTorrentCustomMenu_Control.
public void buildTorrentCustomMenu_Control(final Composite cParent, final DownloadManager[] dms) {
final int userMode = COConfigurationManager.getIntParameter("User Mode");
boolean start = false;
boolean stop = false;
boolean pause = false;
boolean recheck = false;
boolean barsOpened = true;
boolean bChangeDir = hasSelection;
for (int i = 0; i < dms.length; i++) {
DownloadManager dm = dms[i];
if (barsOpened && !DownloadBar.getManager().isOpen(dm)) {
barsOpened = false;
}
stop = stop || ManagerUtils.isStopable(dm);
start = start || ManagerUtils.isStartable(dm);
pause = pause || ManagerUtils.isPauseable(dm);
recheck = recheck || dm.canForceRecheck();
boolean stopped = ManagerUtils.isStopped(dm);
int state = dm.getState();
bChangeDir &= (state == DownloadManager.STATE_ERROR || state == DownloadManager.STATE_STOPPED || state == DownloadManager.STATE_QUEUED);
/**
* Only perform a test on disk if:
* 1) We are currently set to allow the "Change Data Directory" option, and
* 2) We've only got one item selected - otherwise, we may potentially end up checking massive
* amounts of files across multiple torrents before we generate a menu.
*/
if (bChangeDir && dms.length == 1) {
bChangeDir = dm.isDataAlreadyAllocated();
if (bChangeDir && state == DownloadManager.STATE_ERROR) {
// filesExist is way too slow!
bChangeDir = !dm.filesExist(true);
} else {
DiskManagerFileInfo[] files = dm.getDiskManagerFileInfoSet().getFiles();
bChangeDir = false;
for (DiskManagerFileInfo info : files) {
if (info.isSkipped()) {
continue;
}
bChangeDir = !info.getFile(true).exists();
break;
}
}
}
}
Composite cQuickCommands = new Composite(cParent, SWT.NONE);
// cQuickCommands.setBackground(ColorCache.getRandomColor());
RowLayout rowLayout = new RowLayout(SWT.HORIZONTAL);
rowLayout.justify = true;
rowLayout.marginLeft = 0;
rowLayout.marginRight = 0;
cQuickCommands.setLayout(rowLayout);
GridData gd = new GridData();
gd.grabExcessHorizontalSpace = true;
gd.horizontalAlignment = SWT.FILL;
Utils.setLayoutData(cQuickCommands, gd);
// Queue
createActionButton(dms, cQuickCommands, "MyTorrentsView.menu.queue", "start", start, new ListenerGetOffSWT() {
@Override
void handleEventOffSWT(Event event) {
TorrentUtil.queueDataSources(dms, true);
}
});
// Force Start
if (userMode > 0) {
boolean forceStart = false;
boolean forceStartEnabled = false;
for (int i = 0; i < dms.length; i++) {
DownloadManager dm = dms[i];
forceStartEnabled = forceStartEnabled || ManagerUtils.isForceStartable(dm);
forceStart = forceStart || dm.isForceStart();
}
final boolean newForceStart = !forceStart;
createActionButton(dms, cQuickCommands, "MyTorrentsView.menu.forceStart", "forcestart", forceStartEnabled, forceStart ? SWT.BORDER : SWT.PUSH, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
if (ManagerUtils.isForceStartable(dm)) {
dm.setForceStart(newForceStart);
}
}
});
}
// Pause
if (userMode > 0) {
createActionButton(dms, cQuickCommands, "v3.MainWindow.button.pause", "pause", pause, new ListenerGetOffSWT() {
@Override
public void handleEventOffSWT(Event event) {
TorrentUtil.pauseDataSources(dms);
}
});
}
// Stop
createActionButton(dms, cQuickCommands, "MyTorrentsView.menu.stop", "stop", stop, new ListenerGetOffSWT() {
@Override
public void handleEventOffSWT(Event event) {
TorrentUtil.stopDataSources(dms);
}
});
// Force Recheck
createActionButton(dms, cQuickCommands, "MyTorrentsView.menu.recheck", "recheck", recheck, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
if (dm.canForceRecheck()) {
dm.forceRecheck();
}
}
});
// Delete
createActionButton(dms, cQuickCommands, "menu.delete.options", "delete", hasSelection, new Listener() {
@Override
public void handleEvent(Event event) {
TorrentUtil.removeDownloads(dms, null, true);
}
});
if (bChangeDir) {
createRow(cParent, "MyTorrentsView.menu.changeDirectory", null, new Listener() {
@Override
public void handleEvent(Event e) {
TorrentUtil.changeDirSelectedTorrents(dms, parentShell);
}
});
}
// Open Details
if (hasSelection) {
createRow(cParent, "MyTorrentsView.menu.showdetails", "details", new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
if (uiFunctions != null) {
uiFunctions.getMDI().showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_TORRENT_DETAILS, dm);
}
}
});
}
// Open Bar
if (hasSelection) {
FancyRowInfo row = createRow(cParent, "MyTorrentsView.menu.showdownloadbar", "downloadBar", new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
if (DownloadBar.getManager().isOpen(dm)) {
DownloadBar.close(dm);
} else {
DownloadBar.open(dm, parentShell);
}
}
});
row.setSelection(barsOpened);
}
if (hasSelection) {
FancyRowInfo rowSpeedDL = createRow(cParent, "MyTorrentsView.menu.downSpeedLimit", "image.torrentspeed.down", false, new Listener() {
@Override
public void handleEvent(Event e) {
Event event = new Event();
event.type = SWT.MouseUp;
event.widget = e.widget;
event.stateMask = e.stateMask;
event.button = e.button;
e.display.post(event);
Core core = CoreFactory.getSingleton();
SelectableSpeedMenu.invokeSlider((Control) event.widget, core, dms, false, shell);
if (e.display.getActiveShell() != shell) {
if (!shell.isDisposed()) {
shell.dispose();
}
return;
}
FancyRowInfo rowInfo = findRowInfo(event.widget);
if (rowInfo != null) {
updateRowSpeed(rowInfo, false);
}
}
});
rowSpeedDL.keepMenu = true;
updateRowSpeed(rowSpeedDL, false);
}
if (hasSelection) {
FancyRowInfo rowSpeedUL = createRow(cParent, "MyTorrentsView.menu.upSpeedLimit", "image.torrentspeed.up", false, new Listener() {
@Override
public void handleEvent(Event e) {
Event event = new Event();
event.type = SWT.MouseUp;
event.widget = e.widget;
event.stateMask = e.stateMask;
event.button = e.button;
e.display.post(event);
Core core = CoreFactory.getSingleton();
SelectableSpeedMenu.invokeSlider((Control) e.widget, core, dms, true, shell);
if (e.display.getActiveShell() != shell) {
if (!shell.isDisposed()) {
shell.dispose();
}
return;
}
FancyRowInfo rowInfo = findRowInfo(event.widget);
if (rowInfo != null) {
updateRowSpeed(rowInfo, true);
}
}
});
rowSpeedUL.keepMenu = true;
updateRowSpeed(rowSpeedUL, true);
}
if (hasSelection && userMode > 0) {
createMenuRow(cParent, "MyTorrentsView.menu.tracker", null, new FancyMenuRowInfoListener() {
@Override
public void buildMenu(Menu menu) {
boolean changeUrl = hasSelection;
boolean manualUpdate = true;
boolean allStopped = true;
boolean canMove = true;
int userMode = COConfigurationManager.getIntParameter("User Mode");
final boolean use_open_containing_folder = COConfigurationManager.getBooleanParameter("MyTorrentsView.menu.show_parent_folder_enabled");
for (DownloadManager dm : dms) {
boolean stopped = ManagerUtils.isStopped(dm);
allStopped &= stopped;
canMove = canMove && dm.canMoveDataFiles();
if (userMode < 2) {
TRTrackerAnnouncer trackerClient = dm.getTrackerClient();
if (trackerClient != null) {
boolean update_state = ((SystemTime.getCurrentTime() / 1000 - trackerClient.getLastUpdateTime() >= TRTrackerAnnouncer.REFRESH_MINIMUM_SECS));
manualUpdate = manualUpdate & update_state;
}
}
}
TorrentUtil.addTrackerTorrentMenu(menu, dms, changeUrl, manualUpdate, allStopped, use_open_containing_folder, canMove);
}
});
}
if (hasSelection) {
Core core = CoreFactory.getSingleton();
SpeedLimitHandler slh = SpeedLimitHandler.getSingleton(core);
if (slh.hasAnyProfiles()) {
createMenuRow(cParent, IMenuConstants.MENU_ID_SPEED_LIMITS, null, new FancyMenuRowInfoListener() {
@Override
public void buildMenu(Menu menu) {
TorrentUtil.addSpeedLimitsMenu(dms, menu);
}
});
}
}
if (userMode > 0 && hasSelection) {
boolean can_pause = false;
for (int i = 0; i < dms.length; i++) {
DownloadManager dm = dms[i];
if (ManagerUtils.isPauseable(dm)) {
can_pause = true;
break;
}
}
if (can_pause) {
createRow(detailArea, "MainWindow.menu.transfers.pausetransfersfor", null, new Listener() {
@Override
public void handleEvent(Event event) {
TorrentUtil.pauseDownloadsFor(dms);
}
});
}
}
if (userMode > 0 && dms.length > 1) {
createRow(cParent, "label.options.and.info", null, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager[] dms) {
UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
if (uiFunctions != null) {
uiFunctions.getMDI().showEntryByID(MultipleDocumentInterface.SIDEBAR_SECTION_TORRENT_OPTIONS, dms);
}
}
});
}
if (userMode > 0) {
createMenuRow(cParent, "MyTorrentsView.menu.peersource", null, new FancyMenuRowInfoListener() {
@Override
public void buildMenu(Menu menu) {
TorrentUtil.addPeerSourceSubMenu(dms, menu);
}
});
}
// Sequential download
{
boolean allSeq = true;
boolean AllNonSeq = true;
for (int j = 0; j < dms.length; j++) {
DownloadManager dm = dms[j];
boolean seq = dm.getDownloadState().getFlag(DownloadManagerState.FLAG_SEQUENTIAL_DOWNLOAD);
if (seq) {
AllNonSeq = false;
} else {
allSeq = false;
}
}
boolean bChecked;
if (allSeq) {
bChecked = true;
} else if (AllNonSeq) {
bChecked = false;
} else {
bChecked = false;
}
final boolean newSeq = !bChecked;
FancyRowInfo row = createRow(cParent, "menu.sequential.download", null, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
dm.getDownloadState().setFlag(DownloadManagerState.FLAG_SEQUENTIAL_DOWNLOAD, newSeq);
}
});
row.setSelection(bChecked);
}
// IP Filter Enable
if (userMode > 0 && IpFilterManagerFactory.getSingleton().getIPFilter().isEnabled()) {
boolean allEnabled = true;
boolean allDisabled = true;
for (int j = 0; j < dms.length; j++) {
DownloadManager dm = dms[j];
boolean filterDisabled = dm.getDownloadState().getFlag(DownloadManagerState.FLAG_DISABLE_IP_FILTER);
if (filterDisabled) {
allEnabled = false;
} else {
allDisabled = false;
}
}
boolean bChecked;
if (allEnabled) {
bChecked = true;
} else if (allDisabled) {
bChecked = false;
} else {
bChecked = false;
}
final boolean newDisable = bChecked;
FancyRowInfo row = createRow(cParent, "MyTorrentsView.menu.ipf_enable", null, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
dm.getDownloadState().setFlag(DownloadManagerState.FLAG_DISABLE_IP_FILTER, newDisable);
}
});
row.setSelection(bChecked);
}
if (userMode > 1) {
createMenuRow(cParent, "MyTorrentsView.menu.networks", null, new FancyMenuRowInfoListener() {
@Override
public void buildMenu(Menu menu) {
TorrentUtil.addNetworksSubMenu(dms, menu);
}
});
}
// Advanced menu with stuff I don't know where to put
if (userMode > 0) {
createMenuRow(cParent, "MyTorrentsView.menu.advancedmenu", null, new FancyMenuRowInfoListener() {
@Override
public void buildMenu(Menu menu) {
boolean allStopped = true;
boolean allScanSelected = true;
boolean allScanNotSelected = true;
boolean fileMove = true;
boolean allResumeIncomplete = true;
boolean hasClearableLinks = false;
boolean hasRevertableFiles = false;
for (DownloadManager dm : dms) {
boolean stopped = ManagerUtils.isStopped(dm);
allStopped &= stopped;
fileMove = fileMove && dm.canMoveDataFiles();
boolean scan = dm.getDownloadState().getFlag(DownloadManagerState.FLAG_SCAN_INCOMPLETE_PIECES);
// include DND files in incomplete stat, since a recheck may
// find those files have been completed
boolean incomplete = !dm.isDownloadComplete(true);
allScanSelected = incomplete && allScanSelected && scan;
allScanNotSelected = incomplete && allScanNotSelected && !scan;
DownloadManagerState dms = dm.getDownloadState();
if (dms.isResumeDataComplete()) {
allResumeIncomplete = false;
}
if (stopped && !hasClearableLinks) {
if (dm.getDiskManagerFileInfoSet().nbFiles() > 1) {
if (dms.getFileLinks().hasLinks()) {
hasClearableLinks = true;
}
}
}
if (dm.getDownloadState().getFileLinks().size() > 0) {
hasRevertableFiles = true;
}
}
boolean fileRescan = allScanSelected || allScanNotSelected;
final MenuItem itemFileRescan = new MenuItem(menu, SWT.CHECK);
Messages.setLanguageText(itemFileRescan, "MyTorrentsView.menu.rescanfile");
itemFileRescan.addListener(SWT.Selection, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
dm.getDownloadState().setFlag(DownloadManagerState.FLAG_SCAN_INCOMPLETE_PIECES, itemFileRescan.getSelection());
}
});
itemFileRescan.setSelection(allScanSelected);
itemFileRescan.setEnabled(fileRescan);
// revert
final MenuItem itemRevertFiles = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemRevertFiles, "MyTorrentsView.menu.revertfiles");
itemRevertFiles.addListener(SWT.Selection, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager[] dms) {
FilesViewMenuUtil.revertFiles(tv, dms);
}
});
itemRevertFiles.setEnabled(hasRevertableFiles);
// clear links
final MenuItem itemClearLinks = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemClearLinks, "FilesView.menu.clear.links");
itemClearLinks.addListener(SWT.Selection, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
if (ManagerUtils.isStopped(dm) && dm.getDownloadState().getFileLinks().hasLinks()) {
DiskManagerFileInfoSet fis = dm.getDiskManagerFileInfoSet();
if (fis.nbFiles() > 1) {
DiskManagerFileInfo[] files = fis.getFiles();
for (DiskManagerFileInfo file_info : files) {
File file_link = file_info.getFile(true);
File file_nolink = file_info.getFile(false);
if (!file_nolink.getAbsolutePath().equals(file_link.getAbsolutePath())) {
file_info.setLink(null);
}
}
}
}
}
});
itemClearLinks.setEnabled(hasClearableLinks);
// clear allocation
MenuItem itemFileClearAlloc = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemFileClearAlloc, "MyTorrentsView.menu.clear_alloc_data");
itemFileClearAlloc.addListener(SWT.Selection, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
dm.setDataAlreadyAllocated(false);
}
});
itemFileClearAlloc.setEnabled(allStopped);
// clear resume
MenuItem itemFileClearResume = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemFileClearResume, "MyTorrentsView.menu.clear_resume_data");
itemFileClearResume.addListener(SWT.Selection, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
dm.getDownloadState().clearResumeData();
}
});
itemFileClearResume.setEnabled(allStopped);
// set resume complete
MenuItem itemFileSetResumeComplete = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemFileSetResumeComplete, "MyTorrentsView.menu.set.resume.complete");
itemFileSetResumeComplete.addListener(SWT.Selection, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
TorrentUtils.setResumeDataCompletelyValid(dm.getDownloadState());
}
});
itemFileSetResumeComplete.setEnabled(allStopped && allResumeIncomplete);
if (userMode > 1 && isSeedingView) {
boolean canSetSuperSeed = false;
boolean superSeedAllYes = true;
boolean superSeedAllNo = true;
for (DownloadManager dm : dms) {
PEPeerManager pm = dm.getPeerManager();
if (pm != null) {
if (pm.canToggleSuperSeedMode()) {
canSetSuperSeed = true;
}
if (pm.isSuperSeedMode()) {
superSeedAllYes = false;
} else {
superSeedAllNo = false;
}
} else {
superSeedAllYes = false;
superSeedAllNo = false;
}
}
final MenuItem itemSuperSeed = new MenuItem(menu, SWT.CHECK);
Messages.setLanguageText(itemSuperSeed, "ManagerItem.superseeding");
boolean enabled = canSetSuperSeed && (superSeedAllNo || superSeedAllYes);
itemSuperSeed.setEnabled(enabled);
final boolean selected = superSeedAllNo;
if (enabled) {
itemSuperSeed.setSelection(selected);
itemSuperSeed.addListener(SWT.Selection, new ListenerDMTask(dms) {
@Override
public void run(DownloadManager dm) {
PEPeerManager pm = dm.getPeerManager();
if (pm != null) {
if (pm.isSuperSeedMode() == selected && pm.canToggleSuperSeedMode()) {
pm.setSuperSeedMode(!selected);
}
}
}
});
}
}
}
});
}
}
Aggregations