📄 librarypage.cpp
字号:
if(!TFileLauncher::LaunchFile(Path))
TFileLauncher::ShowTorrentLaunchFailedMsg(Path);
}
void __fastcall TLibraryForm::GoogleLyricsMnuClick(TObject *Sender)
{
if(!FileTree->FocusedNode)
return;
TSharedFile* File = ((TFileNodeData*)FileTree->GetNodeData(FileTree->FocusedNode))->File;
if(File->FileType != FTAudio)
return;
// google in browser page
string Query;
if(File->MetaData.Exists("artist") && File->MetaData.Exists("title"))
Query = File->MetaData.Get("artist") + " " + File->MetaData.Get("title");
else {
Query = File->FileName;
Query.erase(Query.rfind('.'));
}
Query = string("http://www.google.com/search?q=") + UrlEncode(Query + " +lyrics");
BrowserForm->NavigateTo(Query);
MainForm->SetVisiblePage(BrowserForm);
}
void __fastcall TLibraryForm::FindOnYouTubeMnuClick(TObject *Sender)
{
if(!FileTree->FocusedNode)
return;
TSharedFile* File = ((TFileNodeData*)FileTree->GetNodeData(FileTree->FocusedNode))->File;
if(File->FileType != FTAudio)
return;
string Query;
if(File->MetaData.Exists("artist") && File->MetaData.Exists("title"))
Query = File->MetaData.Get("artist") + " " + File->MetaData.Get("title");
else {
Query = File->FileName;
Query.erase(Query.rfind('.'));
}
Query = string("http://www.youtube.com/results?search=Search&search_query=") + UrlEncode(Query);
BrowserForm->NavigateTo(Query);
MainForm->SetVisiblePage(BrowserForm);
}
// also called on VK_F5
void __fastcall TLibraryForm::ResyncSharesMnuClick(TObject *Sender)
{
Engine->GetShares()->UpdateDirs();
Engine->GetShares()->Sync();
}
void __fastcall TLibraryForm::HideSharesMnuClick(TObject *Sender)
{
Engine->GetShares()->Hide(!Engine->GetShares()->IsHidden());
}
// also called on VK_CONTROL + C
void __fastcall TLibraryForm::CopyFileMnuClick(TObject *Sender)
{
if (FileTree->SelectedCount > 0)
FileTree->CopyToClipBoard();
}
// also called on VK_DELETE and FileDeleteBtn click
void __fastcall TLibraryForm::DeleteFileMnuClick(TObject *Sender)
{
list<TSharedFile*> Files;
AnsiString FilesStr;
int FilesDialogLimit = 20;
if (FileTree->SelectedCount == 0)
return;
// collect files to delete
TVirtualNode* Node = FileTree->GetFirstSelected();
for(;Node;Node = FileTree->GetNextSelected(Node)) {
TSharedFile* File = ((TFileNodeData*)FileTree->GetNodeData(Node))->File;
Files.push_front(File);
if((--FilesDialogLimit) > 0)
FilesStr += AnsiString(File->FileName.c_str()) + "\n";
else if(FilesDialogLimit == 0)
FilesStr += "...\n...\n";
}
// TRANSLATOR: Message box when user tries to delete file in library.
if(MessageDlg(_("Are you sure you want to delete the following files?\n\n") + FilesStr,
mtConfirmation,TMsgDlgButtons() <<mbYes << mbNo,0) != mrYes)
{
return;
}
// actually remove files
FilesStr = "";
FilesDialogLimit = 20;
for (list<TSharedFile*>::iterator itr = Files.begin(); itr != Files.end(); ++itr) {
string Path = (*itr)->FileDir + "/" + (*itr)->FileName;
if(PathMapper->PathUsable(Path)) {
Path = PathMapper->Map(Path);
Path.append(1,'\0');
SHFILEOPSTRUCT FileOp;
FileOp.hwnd = Application->Handle;
FileOp.wFunc = FO_DELETE;
FileOp.pFrom = Path.data();
FileOp.pTo = NULL;
FileOp.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI;
if(Config->GetValueInt("library/use_recycle_bin"))
FileOp.fFlags |= FOF_ALLOWUNDO;
if(SHFileOperation(&FileOp) == 0) {
// remove file from shares list
Engine->GetShares()->RemoveFile(*itr);
continue;
}
}
// we couldn't delete the file
if((--FilesDialogLimit) > 0)
FilesStr += AnsiString((*itr)->FileName.c_str()) + "\n";
else if(FilesDialogLimit == 0)
FilesStr += "...\n...\n";
}
// warn user if there are failed deletions
if (FilesStr != "") {
// TRANSLATOR: Message box when file deletion failed in library.
MessageDlg(_("The following files could not be deleted.\nMake sure they are not used by other applications.\n\n") + FilesStr,
mtError,TMsgDlgButtons() << mbOK,0);
return;
}
}
void __fastcall TLibraryForm::RenameFileMnuClick(TObject *Sender)
{
if(!FileTree->FocusedNode)
return;
FileTree->EditNode(FileTree->FocusedNode, 0);
}
void __fastcall TLibraryForm::ExploreFileMnuClick(TObject *Sender)
{
if(!FileTree->FocusedNode)
return;
TSharedFile* File = ((TFileNodeData*)FileTree->GetNodeData(FileTree->FocusedNode))->File;
string Path = File->FileDir + "/" + File->FileName;
if(!PathMapper->PathUsable(Path))
return;
Path = PathMapper->Map(Path);
TFileLauncher::ExploreFile(Path);
}
void __fastcall TLibraryForm::OpenFileExternallyMnuClick(TObject *Sender)
{
if(!FileTree->FocusedNode)
return;
TSharedFile* File = ((TFileNodeData*)FileTree->GetNodeData(FileTree->FocusedNode))->File;
string Path = File->FileDir + "/" + File->FileName;
if(!PathMapper->PathUsable(Path))
return;
Path = PathMapper->Map(Path);
if(TFileLauncher::IsFileTooDangerous(Path))
return;
if(TFileLauncher::IsFileDangerous(Path)) {
if(!TFileLauncher::UserWantsToLaunch(Path))
return;
}
if(!TFileLauncher::LaunchFile(Path))
TFileLauncher::ShowLaunchFailedMsg(Path);
}
void __fastcall TLibraryForm::CopyFileMagnetMnuClick(TObject *Sender)
{
string Magnets;
if (FileTree->SelectedCount == 0)
return;
// collect magnet uris
TVirtualNode* Node = FileTree->GetFirstSelected();
for(;Node;Node = FileTree->GetNextSelected(Node)) {
TSharedFile* File = ((TFileNodeData*)FileTree->GetNodeData(Node))->File;
if (!Magnets.empty())
Magnets += "\n";
Magnets += File->GetMagnetStr();
}
// copy to clipboard
Clipboard()->SetTextBuf((char*)Magnets.c_str());
}
void __fastcall TLibraryForm::GotoBitziMnuClick(TObject *Sender)
{
if(!FileTree->FocusedNode)
return;
TSharedFile* File = ((TFileNodeData*)FileTree->GetNodeData(FileTree->FocusedNode))->File;
string Url = File->GetHashes()->GetBitziUrl();
if (Url == "")
return;
BrowserForm->NavigateTo(Url);
MainForm->SetVisiblePage(BrowserForm);
}
//---------------------------------------------------------------------------
void __fastcall TLibraryForm::SelectSharesBtnClick(TObject *Sender)
{
if(!Engine->IsUsingLocalGift())
return;
Engine->GetShares()->UpdateDirs();
TShareSelectForm* ShareSelectDlg = new TShareSelectForm(MainForm,Engine->GetShares()->GetDirs());
if(ShareSelectDlg->ShowModal() == mrOk) {
Engine->GetShares()->SetDirs(ShareSelectDlg->GetFolders());
Engine->GetShares()->Sync();
}
delete ShareSelectDlg;
}
void __fastcall TLibraryForm::DownloadFolderBtnClick(TObject *Sender)
{
if(!Engine->IsUsingLocalGift())
return;
TFileLauncher::ExploreDir(Engine->GetShares()->GetCompletedDir());
}
//---------------------------------------------------------------------------
void __fastcall TLibraryForm::ShowFoldersBtnClick(TObject *Sender)
{
if (ShowFoldersBtn->Down) {
HSplitter->Visible = true;
LeftPanel->Visible = true;
Config->SetValueInt("library/show_folders",1);
} else {
LeftPanel->Visible = false;
HSplitter->Visible = false;
Config->SetValueInt("library/show_folders",0);
}
}
void __fastcall TLibraryForm::ShowDetailsBtnClick(TObject *Sender)
{
if (ShowDetailsBtn->Down) {
DetailsPanel->Visible = true;
VSplitter->Visible = true;
Config->SetValueInt("library/show_details",1);
} else {
VSplitter->Visible = false;
DetailsPanel->Visible = false;
Config->SetValueInt("library/show_details",0);
}
}
//---------------------------------------------------------------------------
void __fastcall TLibraryForm::FileShowDetails(TSharedFile* File)
{
DetailsScrollBox->VertScrollBar->Position = 0;
DetailsScrollBox->HorzScrollBar->Position = 0;
if(!File) {
InfoFileNameLabel->Caption = "";
InfoBevel->Visible = false;
InfoDetailsLabel->Visible = false;
InfoNameLabel->Caption = "";
InfoValueLabel->Caption = "";
InfoImage->Picture = NULL;
return;
}
InfoFileNameLabel->Caption = File->FileName.c_str();
InfoBevel->Visible = true;
InfoDetailsLabel->Visible = true;
// mime type and file size
// TRANSLATOR: Library file info panel.
string Names = _("Mime Type\n").c_str();
string Values = File->MimeType + "\n";
// TRANSLATOR: Library file info panel.
Names += _("Size\n").c_str();
Values += FormatNumber(File->FileSize,"Byte") + "\n";
// hashes
THashSet::Iterator itr = File->GetHashes()->Begin();
// TRANSLATOR: Library file info panel.
Names += _("Hashes\n").c_str();
Values += (*itr)->GetGiftHash() + "\n";
for(++itr; itr != File->GetHashes()->End(); ++itr) {
Names += "\n";
Values += (*itr)->GetGiftHash() + "\n";
}
Names += "\n";
Values += "\n";
// meta data
for(TMetaData::Iterator itr=File->MetaData.Begin();itr!=File->MetaData.End();++itr) {
Names += (*itr).Name + "\n";
Values += (*itr).Value + "\n";
}
InfoNameLabel->Caption = Names.c_str();
InfoValueLabel->Caption = Values.c_str();
switch(File->FileType) {
case FTAudio: InfoImageList->GetIcon(0,InfoImage->Picture->Icon); break;
case FTVideo: InfoImageList->GetIcon(1,InfoImage->Picture->Icon); break;
case FTImage: InfoImageList->GetIcon(2,InfoImage->Picture->Icon); break;
case FTDocument: InfoImageList->GetIcon(3,InfoImage->Picture->Icon); break;
case FTSoftware: InfoImageList->GetIcon(4,InfoImage->Picture->Icon); break;
case FTTorrent: InfoImageList->GetIcon(5,InfoImage->Picture->Icon); break;
default: InfoImageList->GetIcon(6,InfoImage->Picture->Icon);
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -