Ticket #1464: filezilla_utf8_showstatus.patch

File filezilla_utf8_showstatus.patch, 11.5 KB (added by tommywu, 15 years ago)

avoid to show utf-8 string in status window

  • SFtpIpc.cpp

    diff -Nur source/SFtpIpc.cpp source.patch/SFtpIpc.cpp
    old new  
    327327    return 0;
    328328}
    329329
    330 BOOL CSFtpIpc::Send(const DWORD &nID, const DWORD &nDataLength, const LPVOID pData)
     330BOOL CSFtpIpc::Send(const DWORD &nID, const DWORD &nDataLength, const LPVOID pData, CString status)
    331331{
    332332    USES_CONVERSION;
    333333    ASSERT(m_hSFtpProcess);
     
    337337    ASSERT(!nDataLength || pData);
    338338
    339339    CString str;
    340     if (nID==SFTP_DATAID_STC_CONNECT)
    341         str.Format( _T("CONNECT %s@%s:%d"), A2CT((char *)pData+strlen((char *)pData)+1+4), A2CT((char *)pData), *(int *)((char *)pData+strlen((char *)pData)+1) );
     340    if (nID==SFTP_DATAID_STC_CONNECT) {
     341        if (status == "")
     342            str.Format( _T("CONNECT %s@%s:%d"), A2CT((char *)pData+strlen((char *)pData)+1+4), A2CT((char *)pData), *(int *)((char *)pData+strlen((char *)pData)+1) );
     343        else
     344            str = _T("CONNECT ") + status;
     345    }
    342346    else if (nID==SFTP_DATAID_STC_PWD)
    343347        str="PWD";
    344     else if (nID==SFTP_DATAID_STC_CD)
    345         str=(CString)"CD " + (char *)pData;
     348    else if (nID==SFTP_DATAID_STC_CD) {
     349        if (status == "")
     350            str=(CString)"CD " + (char *)pData;
     351        else
     352            str = _T("CD ") + status;
     353    }
    346354    else if (nID==SFTP_DATAID_STC_LIST)
    347355        str="LIST";
    348     else if (nID==SFTP_DATAID_STC_MKD)
    349         str=(CString)"MKD " + (char *)pData;
    350     else if (nID==SFTP_DATAID_STC_GET)
    351         str.Format( _T("GET %s %s %s"),
     356    else if (nID==SFTP_DATAID_STC_MKD) {
     357        if (status == "")
     358            str=(CString)"MKD " + (char *)pData;
     359        else
     360            str = _T("MKD ") + status;
     361    }
     362    else if (nID==SFTP_DATAID_STC_GET) {
     363        if (status == "")
     364            str.Format( _T("GET %s %s %s"),
    352365                    A2CT((char *)pData),
    353366                    A2CT((char *)pData+strlen((char *)pData)+1),
    354367                    ( *(int *)((char *)pData+strlen((char *)pData)+1+strlen((char *)pData+strlen((char *)pData)+1)+1)?_T("TRUE"):_T("FALSE") ));
    355     else if (nID==SFTP_DATAID_STC_PUT)
    356         str.Format( _T("PUT %s %s %s"),
     368        else
     369            str = _T("GET ") + status;
     370    }
     371    else if (nID==SFTP_DATAID_STC_PUT) {
     372        if (status == "")
     373            str.Format( _T("PUT %s %s %s"),
    357374                    A2CT((char *)pData),
    358375                    A2CT((char *)pData+strlen((char *)pData)+1),
    359376                    ( *(int *)((char *)pData+strlen((char *)pData)+1+strlen((char *)pData+strlen((char *)pData)+1)+1)?_T("TRUE"):_T("FALSE") ));
    360     else if (nID==SFTP_DATAID_STC_DELE)
    361         str=(CString)"DELE " + (char *)pData;
    362     else if (nID==SFTP_DATAID_STC_RMD)
    363         str=(CString)"RMD " + (char *)pData;
    364     else if (nID==SFTP_DATAID_STC_RENAME)
    365         str.Format( _T("RENAME %s %s"),
     377        else
     378            str = _T("PUT ") + status;
     379    }
     380    else if (nID==SFTP_DATAID_STC_DELE) {
     381        if (status == "")
     382            str=(CString)"DELE " + (char *)pData;
     383        else
     384            str = _T("DELE ") + status;
     385    }
     386    else if (nID==SFTP_DATAID_STC_RMD) {
     387        if (status == "")
     388            str=(CString)"RMD " + (char *)pData;
     389        else
     390            str = _T("RMD ") + status;
     391    }
     392    else if (nID==SFTP_DATAID_STC_RENAME) {
     393        if (status == "")
     394            str.Format( _T("RENAME %s %s"),
    366395                    A2CT((char *)pData),
    367396                    A2CT((char *)pData+strlen((char *)pData)+1));
    368     else if (nID==SFTP_DATAID_STC_CHMOD)
    369         str.Format( _T("CHMOD %s %s"),
     397        else
     398            str = _T("RENAME ") + status;
     399    }
     400    else if (nID==SFTP_DATAID_STC_CHMOD) {
     401        if (status == "")
     402            str.Format( _T("CHMOD %s %s"),
    370403                    A2CT((char *)pData),
    371404                    A2CT((char *)pData+strlen((char *)pData)+1));
     405        else
     406            str = _T("CHMOD ") + status;
     407    }
    372408    if (str!="")
    373409        m_pOwner->ShowStatus(str, 2);
    374410       
     
    428464            char* utf8 = new char[len + 1];
    429465            WideCharToMultiByte(CP_UTF8, 0, unicode, -1, utf8, len + 1, 0, 0);
    430466
    431             res = Send(nID, (const DWORD)strlen(utf8)+1, (LPVOID)utf8);
     467            res = Send(nID, (const DWORD)strlen(utf8)+1, (LPVOID)utf8, str);
    432468            delete [] utf8;
    433469            return res;
    434470        }
    435471        else
    436472        {
    437             return Send(nID, (const DWORD)strlen(T2CA(str))+1, (LPVOID)T2CA(str));
     473            return Send(nID, (const DWORD)strlen(T2CA(str))+1, (LPVOID)T2CA(str), str);
    438474        }
    439475    }
    440476    else
  • SFtpIpc.h

    diff -Nur source/SFtpIpc.h source.patch/SFtpIpc.h
    old new  
    3434    friend CSFtpIpcHelperWindow;
    3535public:
    3636    BOOL Send(const DWORD &nID, LPCTSTR str);
    37     BOOL Send(const DWORD &nID, const DWORD &nDataLength, const LPVOID pData);
     37    BOOL Send(const DWORD &nID, const DWORD &nDataLength, const LPVOID pData, CString status = "");
    3838    BOOL AttachProcess(HANDLE hSFtpProcess);
    3939    CString GetHandleString();
    4040    CSFtpIpc(CSFtpControlSocket *pOwner);
  • SftpControlSocket.cpp

    diff -Nur source/SftpControlSocket.cpp source.patch/SftpControlSocket.cpp
    old new  
    14681468        char *pCmd;
    14691469        int nLen1;
    14701470        int nLen2;
     1471        CString status = filename + _T(" ") + pData->transferfile.localfile;
     1472        if (pData->transferdata.bResume)
     1473            status += _T(" TRUE");
     1474        else
     1475            status += _T(" FALSE");
    14711476        if (m_bUTF8) {
    14721477#ifdef _UNICODE
    14731478            LPCWSTR unicode_remote = T2CW(filename);
     
    15261531        *pData->pStartTime = CTime::GetCurrentTime();
    15271532        if (pData->transferfile.get)
    15281533        {
    1529             if (!m_pDataChannel->Send(SFTP_DATAID_STC_GET, nLen1+nLen2+4, pCmd))
     1534            if (!m_pDataChannel->Send(SFTP_DATAID_STC_GET, nLen1+nLen2+4, pCmd, status))
    15301535                bError=TRUE;
    15311536        }
    15321537        else
    1533             if (!m_pDataChannel->Send(SFTP_DATAID_STC_PUT, nLen1+nLen2+4, pCmd))
     1538            if (!m_pDataChannel->Send(SFTP_DATAID_STC_PUT, nLen1+nLen2+4, pCmd, status))
    15341539                bError=TRUE;
    15351540
    15361541
     
    16861691        m_Operation.nOpMode = CSMODE_RENAME;
    16871692        int nLen;
    16881693        char *pData;
     1694        CString s_oldname, s_newname;
    16891695        if (newPath.IsEmpty())
    16901696        {
    1691             if (m_bUTF8) {
    1692                 LPCWSTR uni_oldname = T2CW(path.GetPath() + oldName);
    1693                 int len = WideCharToMultiByte(CP_UTF8, 0, uni_oldname, -1, 0, 0, 0, 0);
    1694                 char* utf8_oldname = new char[len + 1];
    1695                 WideCharToMultiByte(CP_UTF8, 0, uni_oldname, -1, utf8_oldname, len + 1, 0, 0);
    1696                 LPCWSTR uni_newname = T2CW(path.GetPath() + newName);
    1697                 len = WideCharToMultiByte(CP_UTF8, 0, uni_newname, -1, 0, 0, 0, 0);
    1698                 char* utf8_newname = new char[len + 1];
    1699                 WideCharToMultiByte(CP_UTF8, 0, uni_newname, -1, utf8_newname, len + 1, 0, 0);
    1700                 nLen = strlen(utf8_oldname) + strlen(utf8_newname) + 2;
    1701                 pData = new char[nLen];
    1702                 strcpy(pData, utf8_oldname);
    1703                 strcpy(pData + strlen(utf8_oldname) + 1, utf8_newname);
    1704                 delete [] utf8_oldname;
    1705                 delete [] utf8_newname;
    1706             }
    1707             else {
    1708                 nLen = _tcslen( path.GetPath() + oldName + path.GetPath() + newName) + 2;
    1709                 pData = new char[nLen];
    1710                 strcpy(pData, T2CA(path.GetPath() + oldName));
    1711                 strcpy(pData + _tcslen(path.GetPath() + oldName) + 1, T2CA(path.GetPath() + newName));
    1712             }
     1697            s_oldname = path.GetPath() + oldName;
     1698            s_newname = path.GetPath() + newName;
    17131699        }
    1714         else
    1715         {
    1716             if (m_bUTF8) {
    1717                 LPCWSTR uni_oldname = T2CW(path.GetPath() + oldName);
    1718                 int len = WideCharToMultiByte(CP_UTF8, 0, uni_oldname, -1, 0, 0, 0, 0);
    1719                 char* utf8_oldname = new char[len + 1];
    1720                 WideCharToMultiByte(CP_UTF8, 0, uni_oldname, -1, utf8_oldname, len + 1, 0, 0);
    1721                 LPCWSTR uni_newname = T2CW(newPath.GetPath() + newName);
    1722                 len = WideCharToMultiByte(CP_UTF8, 0, uni_newname, -1, 0, 0, 0, 0);
    1723                 char* utf8_newname = new char[len + 1];
    1724                 WideCharToMultiByte(CP_UTF8, 0, uni_newname, -1, utf8_newname, len + 1, 0, 0);
    1725                 nLen = strlen(utf8_oldname) + strlen(utf8_newname) + 2;
    1726                 pData = new char[nLen];
    1727                 strcpy(pData, utf8_oldname);
    1728                 strcpy(pData + strlen(utf8_oldname) + 1, utf8_newname);
    1729                 delete [] utf8_oldname;
    1730                 delete [] utf8_newname;
    1731             }
    1732             else {
    1733                 nLen = _tcslen( path.GetPath() + oldName + newPath.GetPath() + newName) + 2;
    1734                 pData = new char[nLen];
    1735                 strcpy(pData, T2CA(path.GetPath() + oldName));
    1736                 strcpy(pData + _tcslen(path.GetPath() + oldName) + 1, T2CA(newPath.GetPath() + newName));
    1737             }
     1700        else {
     1701            s_oldname = path.GetPath() + oldName;
     1702            s_newname = newPath.GetPath() + newName;
     1703        }
     1704        CString status = _T("RENAME ") + s_oldname + _T(" ") + s_newname;
     1705        if (m_bUTF8) {
     1706            LPCWSTR uni_oldname = T2CW(s_oldname);
     1707            int len = WideCharToMultiByte(CP_UTF8, 0, uni_oldname, -1, 0, 0, 0, 0);
     1708            char* utf8_oldname = new char[len + 1];
     1709            WideCharToMultiByte(CP_UTF8, 0, uni_oldname, -1, utf8_oldname, len + 1, 0, 0);
     1710            LPCWSTR uni_newname = T2CW(s_newname);
     1711            len = WideCharToMultiByte(CP_UTF8, 0, uni_newname, -1, 0, 0, 0, 0);
     1712            char* utf8_newname = new char[len + 1];
     1713            WideCharToMultiByte(CP_UTF8, 0, uni_newname, -1, utf8_newname, len + 1, 0, 0);
     1714            nLen = strlen(utf8_oldname) + strlen(utf8_newname) + 2;
     1715            pData = new char[nLen];
     1716            strcpy(pData, utf8_oldname);
     1717            strcpy(pData + strlen(utf8_oldname) + 1, utf8_newname);
     1718            delete [] utf8_oldname;
     1719            delete [] utf8_newname;
     1720        }
     1721        else {
     1722            nLen = _tcslen( s_oldname + s_newname) + 2;
     1723            pData = new char[nLen];
     1724            strcpy(pData, T2CA(s_oldname));
     1725            strcpy(pData + _tcslen(s_oldname) + 1, T2CA(s_newname));
    17381726        }
    1739         if (!m_pDataChannel->Send(SFTP_DATAID_STC_RENAME, nLen, pData))
     1727        if (!m_pDataChannel->Send(SFTP_DATAID_STC_RENAME, nLen, pData, status))
    17401728        {
    17411729            delete [] pData;
    17421730            DoClose();
     
    24102398            while (p=strstr(str, "\n"))
    24112399            {
    24122400                *p = 0;
    2413                 ShowStatus(str, 3);
     2401                if (m_bUTF8) {
     2402                    USES_CONVERSION;
     2403
     2404                    // convert from UTF-8 to ANSI
     2405                    int len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str, -1, NULL, 0);
     2406                    if (len != 0)
     2407                    {
     2408                        LPWSTR p1 = new WCHAR[len + 1];
     2409                        MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str, -1 , (LPWSTR)p1, len*2);
     2410                        CString tempstr = W2CT(p1);
     2411                        delete [] p1;
     2412                        ShowStatus(tempstr, 3);
     2413                    }
     2414                    else
     2415                        ShowStatus(str, 3);
     2416                }
     2417                else
     2418                    ShowStatus(str, 3);
    24142419                str = p+1;
    24152420            }
    2416             ShowStatus(str, 3);
     2421            if (m_bUTF8) {
     2422                USES_CONVERSION;
     2423
     2424                // convert from UTF-8 to ANSI
     2425                int len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str, -1, NULL, 0);
     2426                if (len != 0)
     2427                {
     2428                    LPWSTR p1 = new WCHAR[len + 1];
     2429                    MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)str, -1 , (LPWSTR)p1, len*2);
     2430                    CString tempstr = W2CT(p1);
     2431                    delete [] p1;
     2432                    ShowStatus(tempstr, 3);
     2433                }
     2434                else
     2435                    ShowStatus(str, 3);
     2436            }
     2437            else
     2438                ShowStatus(str, 3);
    24172439        }
    24182440        break;
    24192441    case SFTP_DATAID_CTS_CRITICALERROR:
     
    24582480            ResetOperation(FZ_REPLY_ERROR);
    24592481        else
    24602482        {
    2461             ShowStatus((char *)pData, 3);
     2483            if (m_bUTF8) {
     2484                USES_CONVERSION;
     2485
     2486                // convert from UTF-8 to ANSI
     2487                int len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)pData, -1, NULL, 0);
     2488                if (len != 0)
     2489                {
     2490                    LPWSTR p1 = new WCHAR[len + 1];
     2491                    MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)pData, -1 , (LPWSTR)p1, len*2);
     2492                    CString tempstr = W2CT(p1);
     2493                    delete [] p1;
     2494                    ShowStatus(tempstr, 3);
     2495                }
     2496                else
     2497                    ShowStatus((char *)pData, 3);
     2498            }
     2499            else
     2500                ShowStatus((char *)pData, 3);
    24622501            ProcessReply();
    24632502        }
    24642503        break;
     
    31373176    USES_CONVERSION;
    31383177    m_Operation.nOpMode=CSMODE_CHMOD;
    31393178    CString str;
     3179    CString status;
    31403180    int nLen;
    31413181    char *pData;
    31423182    str.Format( _T("%d %s%s"), nValue, path.GetPath(), filename);
     3183    status = _T("CHMOD ") + str;
    31433184    if (m_bUTF8) {
    31443185        USES_CONVERSION;
    31453186
     
    31623203        ASSERT(pos!=-1);
    31633204        pData[pos]=0;
    31643205    }
    3165     if (!m_pDataChannel->Send(SFTP_DATAID_STC_CHMOD, nLen, pData))
     3206    if (!m_pDataChannel->Send(SFTP_DATAID_STC_CHMOD, nLen, pData, status))
    31663207        DoClose();
    31673208    delete [] pData;
    31683209}