📄 opentorrentwindow.java
字号:
dDialog.setFilterPath(sDefPath);
dDialog.setMessage(MessageText
.getString("MainWindow.dialog.choose.savepath")
+ " (" + info.getTorrentName() + ")");
String sNewDir = dDialog.open();
if (sNewDir == null)
return;
info.sDestDir = sNewDir;
for (int j = 0; j < files.length; j++) {
TorrentFileInfo fileInfo = files[j];
File file = new File(sNewDir, fileInfo.sFileName);
fileInfo.sDestFileName = file.getAbsolutePath();
String sNewPath = file.getParent();
if (sNewPath != null)
sDefPath = sNewPath;
}
}
} // for i
updateOKButton();
}
});
tableTorrents.setMenu(menu);
Composite cTorrentListRight = new Composite(cArea, SWT.NONE);
gridData = new GridData(GridData.FILL_VERTICAL);
cTorrentListRight.setLayoutData(gridData);
RowLayout rLayout = new RowLayout(SWT.VERTICAL);
rLayout.marginBottom = 0;
rLayout.marginLeft = 0;
rLayout.marginRight = 0;
rLayout.marginTop = 0;
rLayout.spacing = 5;
rLayout.fill = true;
cTorrentListRight.setLayout(rLayout);
Button torMoveUp = new Button(cTorrentListRight, SWT.PUSH);
torMoveUp.setImage(ImageRepository.getImage("up"));
torMoveUp.setToolTipText(MessageText.getString("Button.moveUp"));
torMoveUp.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
int[] indices = tableTorrents.getSelectionIndices();
if (indices.length == 0)
return;
Arrays.sort(indices);
if (indices[0] == 0)
return;
for (int i = 0; i < indices.length; i++) {
int pos = indices[i];
Object save = torrentList.get(pos - 1);
torrentList.set(pos - 1, torrentList.get(pos));
torrentList.set(pos, save);
indices[i]--;
}
tableTorrents.setSelection(indices);
tableTorrents.clearAll();
}
});
Button torMoveDown = new Button(cTorrentListRight, SWT.PUSH);
torMoveDown.setImage(ImageRepository.getImage("down"));
torMoveDown.setToolTipText(MessageText.getString("Button.moveDown"));
torMoveDown.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
int[] indices = tableTorrents.getSelectionIndices();
if (indices.length == 0)
return;
Arrays.sort(indices);
int max = indices.length - 1;
if (indices[max] == torrentList.size() - 1)
return;
for (int i = max; i >= 0; i--) {
int pos = indices[i];
Object save = torrentList.get(pos + 1);
torrentList.set(pos + 1, torrentList.get(pos));
torrentList.set(pos, save);
indices[i]++;
}
tableTorrents.setSelection(indices);
tableTorrents.clearAll();
}
});
Button torMoveRemove = new Button(cTorrentListRight, SWT.PUSH);
torMoveRemove.setToolTipText(MessageText
.getString("OpenTorrentWindow.torrent.remove"));
torMoveRemove.setImage(ImageRepository.getImage("delete"));
torMoveRemove.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
deleteSelected(tableTorrents, torrentList);
}
});
}
/**
* @param iLocation
*/
protected void setSelectedQueueLocation(int iLocation) {
int[] indices = tableTorrents.getSelectionIndices();
for (int i = 0; i < indices.length; i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indices[i]);
info.iQueueLocation = iLocation;
}
updateQueueLocationCombo();
tableTorrents.clear(indices);
}
/**
* @param iStartID
*/
protected void setSelectedStartMode(int iStartID) {
int[] indices = tableTorrents.getSelectionIndices();
for (int i = 0; i < indices.length; i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indices[i]);
info.iStartID = iStartID;
}
updateStartModeCombo();
tableTorrents.clear(indices);
}
private void deleteSelected(Table table, ArrayList list) {
int[] indexes = table.getSelectionIndices();
Arrays.sort(indexes);
for (int i = indexes.length - 1; i >= 0; i--) {
if (list.get(indexes[i]) instanceof TorrentInfo) {
TorrentInfo info = (TorrentInfo) list.get(indexes[i]);
if (info.bDeleteFileOnCancel) {
File file = new File(info.sFileName);
if (file.exists())
file.delete();
}
}
list.remove(indexes[i]);
}
table.setItemCount(list.size());
table.clearAll();
table.notifyListeners(SWT.Selection, new Event());
}
private void createTableDataFiles(Composite cArea) {
GridData gridData;
TableColumn tc;
dataFileTable = new Table(cArea, SWT.BORDER | SWT.CHECK
| SWT.FULL_SELECTION | SWT.VIRTUAL | SWT.MULTI);
gridData = new GridData(GridData.FILL_BOTH);
gridData.heightHint = (Constants.isOSX) ? 150 : 100;
gridData.widthHint = 100;
dataFileTable.setLayoutData(gridData);
tc = new TableColumn(dataFileTable, SWT.NULL);
Messages.setLanguageText(tc, "OpenTorrentWindow.fileTable.fileName");
tc.setWidth(150);
tc = new TableColumn(dataFileTable, SWT.NULL);
Messages.setLanguageText(tc, "OpenTorrentWindow.fileTable.destinationName");
tc.setWidth(140);
tc = new TableColumn(dataFileTable, SWT.NULL);
Messages.setLanguageText(tc, "OpenTorrentWindow.fileTable.size");
tc.setAlignment(SWT.TRAIL);
tc.setWidth(90);
if (Utils.LAST_TABLECOLUMN_EXPANDS)
tc.setData("Width", new Long(90));
dataFileTable.addListener(SWT.SetData, new Listener() {
public void handleEvent(Event event) {
if (bClosed)
return;
final TableItem item = (TableItem) event.item;
int index = dataFileTable.indexOf(item);
final TorrentFileInfo file = (TorrentFileInfo) dataFiles.get(index);
item.setText(new String[] { file.sFileName, file.sDestFileName,
DisplayFormatters.formatByteCountToKiBEtc(file.lSize) });
if (!file.isValid) {
item.setForeground(Colors.red);
Font font = item.getFont();
FontData[] fd = font.getFontData();
for (int i = 0; i < fd.length; i++) {
fd[i].setStyle(SWT.ITALIC);
}
font = new Font(item.getDisplay(), fd);
disposeList.add(font);
item.setFont(font);
}
Utils.alternateRowBackground(item);
Utils.setCheckedInSetData(item, file.bDownload);
item.setGrayed(!file.okToDisable());
}
});
dataFileTable.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
if (event.detail == SWT.CHECK) {
TableItem item = (TableItem) event.item;
int index = dataFileTable.indexOf(item);
TorrentFileInfo file = (TorrentFileInfo) dataFiles.get(index);
// don't allow disabling of small files
// XXX Maybe warning prompt instead?
if (!item.getChecked() && !file.okToDisable())
item.setChecked(true);
else
file.bDownload = item.getChecked();
}
}
});
dataFileTable.setHeaderVisible(true);
Menu menu = new Menu(dataFileTable);
dataFileTable.setMenu(menu);
MenuItem item;
item = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(item,
"OpenTorrentWindow.fileList.changeDestination");
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int[] indexes = dataFileTable.getSelectionIndices();
for (int i = 0; i < indexes.length; i++) {
TorrentFileInfo fileInfo = (TorrentFileInfo) dataFiles
.get(indexes[i]);
int style = (fileInfo.parent.iStartID == STARTMODE_SEEDING)
? SWT.OPEN : SWT.SAVE;
FileDialog fDialog = new FileDialog(shellForChildren,
SWT.SYSTEM_MODAL | style);
String sFilterPath = fileInfo.getDestPath();
String sFileName = new File(fileInfo.sFileName).getName();
File f = new File(sFilterPath);
if (!f.isDirectory()) {
sFileName = new File(sFilterPath, sFileName).getAbsolutePath();
// Move up the tree until we have an existing path
while (sFilterPath != null) {
sFilterPath = f.getParent();
f = new File(sFilterPath);
if (f.isDirectory())
break;
}
}
if (sFilterPath != null)
fDialog.setFilterPath(sFilterPath);
fDialog.setFileName(sFileName);
fDialog.setText(MessageText
.getString("MainWindow.dialog.choose.savepath")
+ " (" + fileInfo.sFullFileName + ")");
String sNewName = fDialog.open();
if (sNewName == null)
return;
if (fileInfo.parent.iStartID == STARTMODE_SEEDING) {
File file = new File(sNewName);
if (file.length() == fileInfo.lSize)
fileInfo.sDestFileName = sNewName;
else {
Utils.openMessageBox(shellForChildren, SWT.OK,
"OpenTorrentWindow.mb.badSize", new String[] {
file.getName(), fileInfo.sFullFileName });
}
} else {
fileInfo.sDestFileName = sNewName;
}
} // for i
updateOKButton();
}
});
Composite cButtons = new Composite(cArea, SWT.NONE);
gridData = new GridData(GridData.FILL_HORIZONTAL);
cButtons.setLayoutData(gridData);
RowLayout rLayout = new RowLayout(SWT.HORIZONTAL);
rLayout.marginBottom = 0;
rLayout.marginLeft = 0;
rLayout.marginRight = 0;
rLayout.marginTop = 0;
cButtons.setLayout(rLayout);
Button btnSelectAll = new Button(cButtons, SWT.PUSH);
Messages.setLanguageText(btnSelectAll, "Button.selectAll");
btnSelectAll.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
dataFileTable.selectAll();
}
});
Button btnMarkSelected = new Button(cButtons, SWT.PUSH);
Messages.setLanguageText(btnMarkSelected, "Button.markSelected");
btnMarkSelected.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
int[] indexes = dataFileTable.getSelectionIndices();
for (int i = 0; i < indexes.length; i++) {
TorrentFileInfo file = (TorrentFileInfo) dataFiles.get(indexes[i]);
file.bDownload = true;
}
dataFileTable.clearAll();
}
});
Button btnUnmarkSelected = new Button(cButtons, SWT.PUSH);
Messages.setLanguageText(btnUnmarkSelected, "Button.unmarkSelected");
btnUnmarkSelected.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
int[] indexes = dataFileTable.getSelectionIndices();
for (int i = 0; i < indexes.length; i++) {
TorrentFileInfo file = (TorrentFileInfo) dataFiles.get(indexes[i]);
if (file.okToDisable())
file.bDownload = false;
}
dataFileTable.clearAll();
}
});
}
/**
* Add Torrent(s) to Window using a text list of files/urls/torrents
*
* @param sClipText Text to parse
* @param bVerifyOnly Only check if there's potential torrents in the text,
* do not try to add the torrents.
*
* @return Number of torrents added or found
*/
private int addTorrentsFromTextList(String sClipText, boolean bVerifyOnly) {
String[] lines = null;
int iNumFound = 0;
// # of consecutive non torrent lines
int iNoTorrentLines = 0;
// no use checking the whole clipboard (which may be megabytes)
final int MAX_CONSECUTIVE_NONTORRENT_LINES = 100;
final String[] splitters = { "\r\n", "\n", "\r", "\t" };
for (int i = 0; i < splitters.length; i++)
if (sClipText.indexOf(splitters[i]) >= 0) {
lines = sClipText.split(splitters[i]);
break;
}
if (lines == null)
lines = new String[] { sClipText };
// Check if URL, 20 byte hash, Dir, or file
for (int i = 0; i < lines.length; i++) {
String line = lines[i].trim();
if (line.startsWith("\"") && line.endsWith("\"")) {
line = line.substring(1, line.length() - 2);
}
boolean ok;
if (line == "") {
ok = false;
} else if (isURL(line)) {
ok = true;
} else {
File file = new File(line);
if (!file.exists()) {
ok = false;
} else if (file.isDirectory()) {
addTorrents(lines[i], null);
ok = false;
} else
ok = true;
}
if (!ok) {
iNoTorrentLines++;
lines[i] = null;
if (iNoTorrentLines > MAX_CONSECUTIVE_NONTORRENT_LINES)
break;
} else {
iNumFound++;
iNoTorrentLines = 0;
}
}
if (bVerifyOnly)
return iNumFound;
return addTorrents(null, lines);
}
/**
* Add Torrent(s) to window
*
* @param sTorrentFilePath
* @param sTorrentFilenames
* @return # torrents actually added to list (or downloading)
*/
private int addTorrents(String sTorrentFilePath, String[] sTorrentFilenames) {
sTorrentFilePath = ensureTrailingSeparator(sTorrentFilePath);
// Process Directory
if (sTorrentFilePath != null && sTorrentFilenames == null) {
File dir = new File(sTorrentFilePath);
if (!dir.isDirectory())
return 0;
final File[] files = dir.listFiles(new FileFilter() {
public boolean accept(File arg0) {
if (FileUtil.getCanonicalFileName(arg0.getName())
.endsWith(".torrent"))
return true;
if (FileUtil.getCanonicalFileName(arg0.getName()).endsWith(".tor"))
return true;
return false;
}
});
if (files.length == 0)
return 0;
sTorrentFilenames = new String[files.length];
for (int i = 0; i < files.length; i++)
sTorrentFilenames[i] = files[i].getName();
}
int numAdded = 0;
for (int i = 0; i < sTorrentFilenames.length; i++) {
if (sTorrentFilenames[i] == null || sTorrentFilenames[i] == "")
continue;
// Process URL
if (isURL(sTorrentFilenames[i])) {
if (COConfigurationManager.getBooleanParameter("Add URL Silently"))
new FileDownloadWindow(MainWindow.getWindow().getAzureusCore(),
shellForChildren, sTorrentFilenames[i], null, this);
else
new OpenUrlWindow(MainWindow.getWindow().getAzureusCore(),
shellForChildren, sTorrentFilenames[i], null, this);
numAdded++;
continue;
}
// Process File
String sFileName = ((sTorrentFilePath == null) ? "" : sTorrentFilePath)
+ sTorrentFilenames[i];
if (addTorrent(sFileName, sFileName) != null)
numAdded++;
}
if (numAdded > 0 && shell != null && tableTorrents != null
&& !shell.isDisposed()) {
int iTotal = torrentList.size();
tableTorrents.setItemCount(iTotal);
// select the ones we just added
tableTorrents.select(iTotal - numAdded, iTotal - 1);
tableTorrents.clearAll();
// select doesn't notify listeners? Do it manually.
tableTorrents.notifyListeners(SWT.Selection, new Event());
resizeTables(1);
updateOKButton();
}
return numAdded;
}
private TorrentInfo addTorrent(String sFileName,
final String sOriginatingLocation) {
TorrentInfo info = null;
TOTorrent torrent = null;
File torrentFile;
boolean bDeleteFileOnCancel = false;
// Make a copy if user wants that. We'll delete it when we cancel, if we
// actually made a copy.
try {
File fOriginal = new File(sFileName);
torrentFile = TorrentUtils.copyTorrentFileToSaveDir(fOriginal, true);
bDeleteFileOnCancel = !fOriginal.equals(torrentFile);
// TODO if the files are still equal, and it isn't in the save
// dir, we should copy it to a temp file in case something
// re-writes it. No need to copy a torrent coming from the
// downloader though..
} catch (IOException e1) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -