diff --git a/SiaDrive/Resource.h b/SiaDrive/Resource.h index 4b9965d..d1a325c 100644 Binary files a/SiaDrive/Resource.h and b/SiaDrive/Resource.h differ diff --git a/SiaDrive/SiaDrive.htm b/SiaDrive/SiaDrive.htm index e8c269a..7045e33 100644 --- a/SiaDrive/SiaDrive.htm +++ b/SiaDrive/SiaDrive.htm @@ -76,9 +76,10 @@ @@ -92,5 +93,6 @@ + diff --git a/SiaDrive/SiaDrive.rc b/SiaDrive/SiaDrive.rc index 17e2280..509a6cc 100644 Binary files a/SiaDrive/SiaDrive.rc and b/SiaDrive/SiaDrive.rc differ diff --git a/SiaDrive/SiaDrive.vcxproj b/SiaDrive/SiaDrive.vcxproj index 67647d7..35da0f2 100644 --- a/SiaDrive/SiaDrive.vcxproj +++ b/SiaDrive/SiaDrive.vcxproj @@ -210,6 +210,7 @@ + true diff --git a/SiaDrive/SiaDrive.vcxproj.filters b/SiaDrive/SiaDrive.vcxproj.filters index 8903ffe..35ca4c7 100644 --- a/SiaDrive/SiaDrive.vcxproj.filters +++ b/SiaDrive/SiaDrive.vcxproj.filters @@ -50,6 +50,9 @@ Resource Files + + Resource Files + diff --git a/SiaDrive/SiaDriveDlg.cpp b/SiaDrive/SiaDriveDlg.cpp index 60d69b4..e29582b 100644 --- a/SiaDrive/SiaDriveDlg.cpp +++ b/SiaDrive/SiaDriveDlg.cpp @@ -61,7 +61,7 @@ BEGIN_DHTML_EVENT_MAP(CSiaDriveDlg) DHTML_EVENT_ONCLICK(_T("CreateWalletButton"), OnButtonCreateWallet) DHTML_EVENT_ONCLICK(_T("ConfirmSeedButton"), OnButtonConfirmSeed) DHTML_EVENT_ONCLICK(_T("UnlockWalletButton"), OnButtonUnlockWallet) - DHTML_EVENT_ONCLICK(_T("UnlockWalletButton"), OnButtonUnlockWallet) + DHTML_EVENT_ONCLICK(_T("MountButton"), OnButtonMount) END_DHTML_EVENT_MAP() @@ -167,6 +167,62 @@ void CSiaDriveDlg::OnPaint() } } +BOOL CSiaDriveDlg::CallClientScript(LPCTSTR pStrFuncName, CStringArray* pArrFuncArgs, CComVariant* pOutVarRes) +{ + BOOL bRes = FALSE; + CComVariant vaResult; + CComPtr pIDoc2; + if (SUCCEEDED(this->GetDHtmlDocument(&pIDoc2))) //Uses CDHtmlDialog as 'this' + { + //Getting IDispatch for Java Script objects + CComPtr spScript; + if (SUCCEEDED(pIDoc2->get_Script(&spScript))) + { + //Find dispid for given function in the object + CComBSTR bstrMember(pStrFuncName); + DISPID dispid = NULL; + if (SUCCEEDED(spScript->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_USER_DEFAULT, &dispid))) + { + COleSafeArray ar; + ar.CreateOneDim(VT_VARIANT, pArrFuncArgs->GetSize()); + for (long i = 0; i < pArrFuncArgs->GetSize(); i++) + { + CComVariant v(pArrFuncArgs->GetAt(i)); + ar.PutElement(&i, &v); + } + + long l = 0; + COleSafeArray sa; + sa.CreateOneDim(VT_VARIANT, 1); + sa.PutElement(&l, ar); + + //Putting parameters + DISPPARAMS dispparams; + memset(&dispparams, 0, sizeof dispparams); + dispparams.cArgs = 1; + dispparams.rgvarg = sa; + dispparams.cNamedArgs = 0; + + EXCEPINFO excepInfo; + memset(&excepInfo, 0, sizeof excepInfo); + UINT nArgErr = (UINT)-1; // initialize to invalid arg + + //Call JavaScript function + if (SUCCEEDED(spScript->Invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dispparams, &vaResult, &excepInfo, &nArgErr))) + { + //Done! + bRes = TRUE; + } + } + } + } + + if (pOutVarRes) + *pOutVarRes = vaResult; + + return bRes; +} + // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CSiaDriveDlg::OnQueryDragIcon() @@ -217,6 +273,16 @@ HRESULT CSiaDriveDlg::OnButtonUnlockWallet(IHTMLElement* /*pElement*/) return S_OK; } +HRESULT CSiaDriveDlg::OnButtonMount(IHTMLElement* /*pElement*/) +{ + CStringArray driveList; + driveList.Add(L"S"); + driveList.Add(L"T"); + CallClientScript(L"setAvailableDrives", &driveList, nullptr); + + return S_OK; +} + bool IsRefreshKeyMessage(const MSG *message) { return message diff --git a/SiaDrive/SiaDriveDlg.h b/SiaDrive/SiaDriveDlg.h index 00914ff..6f5cce3 100644 --- a/SiaDrive/SiaDriveDlg.h +++ b/SiaDrive/SiaDriveDlg.h @@ -27,6 +27,7 @@ public: HRESULT OnButtonCreateWallet(IHTMLElement* pElement); HRESULT OnButtonConfirmSeed(IHTMLElement* pElement); HRESULT OnButtonUnlockWallet(IHTMLElement* pElement); + HRESULT OnButtonMount(IHTMLElement* pElement); // Implementation protected: @@ -56,6 +57,7 @@ private: bool UpdateUi(const bool& refresh = true); HRESULT GetDomNodeAndElementById(const String& id, CComPtr& node, CComPtr& elem); HRESULT GetDomNodeById(const String& id, CComPtr& node); + BOOL CallClientScript(LPCTSTR pStrFuncName, CStringArray* pArrFuncArgs, CComVariant* pOutVarRes); private: CSiaDriveConfig _siaConfig; diff --git a/SiaDrive/res/code.js b/SiaDrive/res/code.js new file mode 100644 index 0000000..d212550 --- /dev/null +++ b/SiaDrive/res/code.js @@ -0,0 +1,17 @@ + + +function setAvailableDrives(driveList) { + alert(driveList[0]); + var sel = document.getElementById("MountDrives"); + sel.innerHTML = ""; + + for (var i in driveList) { + if (driveList.hasOwnProperty(i)) { + var drive = driveList[i]; + var option = document.createElement("option"); + option.innerText = drive + ":"; + sel.appendChild(option); + } + } +} +
- - - + + + +