CString CCommitProgressDlg::Convert2UnionCode(char *buff, int size) { CString str; CString cmd, output; int cp=CP_UTF8; cmd=_T("git.exe config i18n.logOutputEncoding"); if (m_Git->Run(cmd, &output, NULL, CP_UTF8)) cp=CP_UTF8; int start=0; output=output.Tokenize(_T("\n"),start); cp=CUnicodeUtils::GetCPCode(output); start =0; if(size == -1) size = (int)strlen(buff); for (int i = 0; i < size; ++i) { if(buff[i] == ']') start = i; if( start >0 && buff[i] =='\n' ) { start =i; break; } } str.Empty(); g_Git.StringAppend(&str, (BYTE*)buff, cp, start); g_Git.StringAppend(&str, (BYTE*)buff + start, CP_UTF8, size - start); ClearESC(str); return str; }
void CProgressDlg::ParserCmdOutput(CRichEditCtrl &log,CProgressCtrl &progressctrl,HWND m_hWnd,CComPtr<ITaskbarList3> m_pTaskbarList,CStringA &oneline, char ch, CWnd *CurrentWork) { //TRACE(_T("%c"),ch); if( ch == ('\r') || ch == ('\n')) { CString str; // TRACE(_T("End Char %s \r\n"),ch==_T('\r')?_T("lf"):_T("")); // TRACE(_T("End Char %s \r\n"),ch==_T('\n')?_T("cr"):_T("")); if(ClearESC(oneline)) { ch = ('\r'); } int lines = log.GetLineCount(); g_Git.StringAppend(&str,(BYTE*)oneline.GetBuffer(),CP_ACP); str.Trim(); // TRACE(_T("%s"), str); if(ch == ('\r')) { int start=log.LineIndex(lines-1); log.SetSel(start, log.GetTextLength()); log.ReplaceSel(str); } else { int length = log.GetWindowTextLength(); log.SetSel(length, length); if (length > 0) log.ReplaceSel(_T("\r\n") + str); else log.ReplaceSel(str); } if (lines > 500) //limited log length { int end=log.LineIndex(1); log.SetSel(0,end); log.ReplaceSel(_T("")); } log.LineScroll(log.GetLineCount() - log.GetFirstVisibleLine() - 4); int s1=oneline.ReverseFind(_T(':')); int s2=oneline.Find(_T('%')); if (s1 > 0 && s2 > 0) { if(CurrentWork) CurrentWork->SetWindowTextW(str.Left(s1)); int pos=FindPercentage(str); TRACE(_T("Pos %d\r\n"),pos); if(pos>0) { progressctrl.SetPos(pos); if (m_pTaskbarList) { m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NORMAL); m_pTaskbarList->SetProgressValue(m_hWnd, pos, 100); } } } oneline=""; } else { oneline+=ch; } }