⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 librarypage.cpp

📁 Last change: 2008-02-03 This is the source code of KCeasy。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    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 + -