Skip to content
This repository has been archived by the owner on Sep 2, 2021. It is now read-only.

Windows changes for File IO, File dialog and getElapsedMilliseconds. #2

Merged
merged 5 commits into from
Jun 14, 2012
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 32 additions & 24 deletions appshell/appshell_extensions_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,13 @@
#include <algorithm>
#include <CommDlg.h>
#include <ShlObj.h>
#include <Shlwapi.h>
#include <stdio.h>
#include <sys/stat.h>

// Forward declarations for functions at the bottom of this file
void FixFilename(ExtensionString& filename);
void EscapeJSONString(const std::wstring& str, std::wstring& finalResult);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This declaration can be removed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops... I missed that in cleanup.

int ConvertErrnoCode(int errorCode, bool isReading = true);
int ConvertWinErrorCode(int errorCode, bool isReading = true);

Expand Down Expand Up @@ -103,8 +107,6 @@ int32 ShowOpenDialog(bool allowMulitpleSelection,
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;

allowMulitpleSelection = false; // TODO: Raymond, please implement.

// TODO (issue #65) - Use passed in file types. Note, when fileTypesStr is null, all files should be shown
/* findAndReplaceString( fileTypesStr, std::string(" "), std::string(";*."));
LPCWSTR allFilesFilter = L"All Files\0*.*\0\0";*/
Expand All @@ -119,23 +121,19 @@ int32 ShowOpenDialog(bool allowMulitpleSelection,
if (GetOpenFileName(&ofn)) {
if (allowMulitpleSelection) {
// Multiple selection encodes the files differently
/*

// If multiple files are selected, the first null terminator
// signals end of directory that the files are all in
std::wstring dir(szFile);

// Check for two null terminators, which signal that only one file
// was selected
if (szFile[dir.length() + 1] == '\0') {
// Escape the single file path and add it to the JSON array
std::wstring escaped;
EscapeJSONString(dir, escaped);
results += L"\"" + escaped + L"\"";
selectedFiles->SetString(0, ExtensionString(dir));
} else {
// Multiple files are selected
wchar_t fullPath[MAX_PATH];
bool firstFile = true;
for (int i = dir.length() + 1;;) {
for (int i = (dir.length() + 1), fileIndex = 0; ; fileIndex++) {
// Get the next file name
std::wstring file(&szFile[i]);

Expand All @@ -146,24 +144,13 @@ int32 ShowOpenDialog(bool allowMulitpleSelection,
// The filename is relative to the directory that was specified as
// the first string
if (PathCombine(fullPath, dir.c_str(), file.c_str()) != NULL)
{
// Append a comma separator if it is not the first file in the list
if (firstFile)
firstFile = false;
else
results += L",";

// Escape the path and add it to the list
std::wstring escaped;
EscapeJSONString(std::wstring(fullPath), escaped);
results += L"\"" + escaped + L"\"";
}
selectedFiles->SetString(fileIndex, ExtensionString(fullPath));

// Go to the start of the next file name
i += file.length() + 1;
}
}
*/

} else {
// If multiple files are not allowed, add the single file
selectedFiles->SetString(0, szFile);
Expand Down Expand Up @@ -306,13 +293,34 @@ int32 WriteFile(ExtensionString filename, std::string contents, ExtensionString

int32 SetPosixPermissions(ExtensionString filename, int32 mode)
{
// TODO: Raymond, please implement
FixFilename(filename);

DWORD dwAttr = GetFileAttributes(filename.c_str());

if (dwAttr == INVALID_FILE_ATTRIBUTES)
return ERR_NOT_FOUND;

if ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) != 0)
return NO_ERROR;

bool write = (mode & 0200) != 0;
bool read = (mode & 0400) != 0;
int mask = (write ? _S_IWRITE : 0) | (read ? _S_IREAD : 0);

if (_wchmod(filename.c_str(), mask) == -1) {
return ConvertErrnoCode(errno);
}

return NO_ERROR;
}

int32 DeleteFileOrDirectory(ExtensionString filename)
{
// TODO: Raymond, please implement
FixFilename(filename);

if (!DeleteFile(filename.c_str()))
return ConvertWinErrorCode(GetLastError());

return NO_ERROR;
}

Expand Down
4 changes: 4 additions & 0 deletions appshell/cefclient_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <commdlg.h>
#include <shellapi.h>
#include <direct.h>
#include <MMSystem.h>
#include <sstream>
#include <string>
#include "include/cef_app.h"
Expand All @@ -28,6 +29,7 @@
#endif // SHOW_TOOLBAR_UI

// Global Variables:
DWORD g_appStartupTime;
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name
Expand Down Expand Up @@ -56,6 +58,8 @@ int APIENTRY wWinMain(HINSTANCE hInstance,
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

g_appStartupTime = timeGetTime();

CefMainArgs main_args(hInstance);
CefRefPtr<ClientApp> app(new ClientApp);

Expand Down
7 changes: 5 additions & 2 deletions appshell/client_app_win.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@
#include "client_app.h"
#include "resource.h"

#include <MMSystem.h>
#include <string>

extern DWORD g_appStartupTime;

std::string ClientApp::GetExtensionJSSource()
{
extern HINSTANCE hInst;
Expand Down Expand Up @@ -54,6 +57,6 @@ std::string ClientApp::GetExtensionJSSource()

double ClientApp::GetElapsedMilliseconds()
{
// TODO: Raymond, please implement
return 0;
return (timeGetTime() - g_appStartupTime);
}