void CSubtitleDlDlg::OnOK() { SetStatus(ResStr(IDS_SUBDL_DLG_DOWNLOADING)); for (int i = 0; i < m_list.GetItemCount(); ++i) { if (m_list.GetCheck(i)) { m_selsubs.AddTail(*reinterpret_cast<isdb_subtitle*>(m_list.GetItemData(i))); } } m_fReplaceSubs = IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED; CMainFrame* pMF = static_cast<CMainFrame*>(GetParentFrame()); if (m_fReplaceSubs) { pMF->m_pSubStreams.RemoveAll(); } CComPtr<ISubStream> pSubStreamToSet; POSITION pos = m_selsubs.GetHeadPosition(); while (pos) { const isdb_subtitle& sub = m_selsubs.GetNext(pos); AppSettings& s = AfxGetAppSettings(); CInternetSession is; CStringA url = "http://" + s.strISDb + "/dl.php?"; CStringA args, ticket, str; args.Format("id=%d&ticket=%s", sub.id, UrlEncode(ticket), true); url.Append(args); if (OpenUrl(is, CString(url), str)) { CAutoPtr<CRenderedTextSubtitle> pRTS(DNew CRenderedTextSubtitle(&pMF->m_csSubLock, &s.subdefstyle, s.fUseDefaultSubtitlesStyle)); if (pRTS && pRTS->Open((BYTE*)(LPCSTR)str, str.GetLength(), DEFAULT_CHARSET, CString(sub.name)) && pRTS->GetStreamCount() > 0) { CComPtr<ISubStream> pSubStream = pRTS.Detach(); pMF->m_pSubStreams.AddTail(pSubStream); if (!pSubStreamToSet) { pSubStreamToSet = pSubStream; } } } } if (pSubStreamToSet) { pMF->SetSubtitle(pSubStreamToSet); } __super::OnOK(); }
void CSubtitleDlDlg::OnOK() { SetStatus(ResStr(IDS_SUBDL_DLG_DOWNLOADING)); for (int i = 0; i < m_list.GetItemCount(); ++i) { if (m_list.GetCheck(i)) { m_selsubs.AddTail(*reinterpret_cast<isdb_subtitle*>(m_list.GetItemData(i))); } } m_fReplaceSubs = IsDlgButtonChecked(IDC_CHECK1) == BST_CHECKED; CMainFrame* pMF = static_cast<CMainFrame*>(GetParentFrame()); if (m_fReplaceSubs) { pMF->m_pSubStreams.RemoveAll(); } CComPtr<ISubStream> pSubStreamToSet; POSITION pos = m_selsubs.GetHeadPosition(); while (pos) { const isdb_subtitle& sub = m_selsubs.GetNext(pos); AppSettings& s = AfxGetAppSettings(); CInternetSession is; CStringA url = "http://" + s.strISDb + "/dl.php?"; CStringA args, ticket, str; args.Format("id=%d&ticket=%s", sub.id, UrlEncode(ticket)); url.Append(args); if (OpenUrl(is, CString(url), str)) { if (pMF->b_UseVSFilter) { if (CComQIPtr<IDirectVobSub> pDVS = pMF->GetVSFilter()) { TCHAR lpszTempPath[_MAX_PATH] = { 0 }; if (::GetTempPath(_MAX_PATH, lpszTempPath)) { CString subFileName(lpszTempPath); subFileName.Append(CString(sub.name)); if (::PathFileExists(subFileName)) { ::DeleteFile(subFileName); } CFile cf; if (cf.Open(subFileName, CFile::modeCreate|CFile::modeWrite|CFile::shareDenyNone)) { cf.Write(str.GetString(), str.GetLength()); cf.Close(); if (SUCCEEDED(pDVS->put_FileName((LPWSTR)(LPCWSTR)subFileName))) { pDVS->put_SelectedLanguage(0); pDVS->put_HideSubtitles(true); pDVS->put_HideSubtitles(false); } ::DeleteFile(subFileName); } } __super::OnOK(); return; } } CAutoPtr<CRenderedTextSubtitle> pRTS(DNew CRenderedTextSubtitle(&pMF->m_csSubLock, &s.subdefstyle, s.fUseDefaultSubtitlesStyle)); if (pRTS && pRTS->Open((BYTE*)(LPCSTR)str, str.GetLength(), DEFAULT_CHARSET, CString(sub.name)) && pRTS->GetStreamCount() > 0) { CComPtr<ISubStream> pSubStream = pRTS.Detach(); pMF->m_pSubStreams.AddTail(pSubStream); if (!pSubStreamToSet) { pSubStreamToSet = pSubStream; } } } } if (pSubStreamToSet) { pMF->SetSubtitle(pSubStreamToSet); AfxGetAppSettings().fEnableSubtitles = true; } __super::OnOK(); }