mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Squashed commit of the following:
commit 4d9b072f560fa171a1390b7c74425614aa20e955
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 16:04:02 2014 +0200
Remove useless variable
commit 8e85de0307ec5f31bf3f92a7de793fed7d41c2ea
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Tue Oct 14 16:01:52 2014 +0200
Make Windows Explorer Extension build
commit 8e2942cd9fd32e3af72d60cba0d06bd9d6222a45
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Tue Oct 14 11:39:37 2014 +0200
Fix compilation
commit 0fc0c0e0e0c7e58ad97f62700256c7d1f8c0670b
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 11:48:32 2014 +0200
Windows Shell Integration: Try to let the thread notify about changes when there are changes
commit 4a1712b7c03269ca3007f167b8f313ea47655967
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Tue Oct 14 11:35:20 2014 +0200
Windows Shell Integration: Share the RemotePathChecker amongst all the OCOverlay instances
commit 2d87408e9af5a4d7ab71c460ce606ba1f367c09f
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Mon Oct 13 18:55:15 2014 +0200
Windows Shell Integration: Attempts to wait on multiple objects (WIP)
commit e448e427b6d1561ad7a40d08fc6632f4d2b4ef44
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Mon Oct 13 17:58:02 2014 +0200
Introduce a worker thread
commit 2344407ec0bc1ce173ebbacadcf3992d62d94078
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Mon Oct 13 17:03:47 2014 +0200
Windows Shell Integration: try to keep the socket open using a thread (WIP)
commit ea6d5273ed60d8bc3f1c5d5c6936364d783a1c0f
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Mon Oct 13 15:27:46 2014 +0200
Make Explorer plugin work again with named pipes
This is a temporary hack, which needs more refactoring.
commit 44a3437a44082379efa0078c9afd7b8bbde930de
Author: Daniel Molkentin <danimo@owncloud.com>
Date: Sat Oct 11 07:31:24 2014 +0200
Fix code
commit 123390a0f3516c0078309d7048c6d2acb9293676
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Fri Oct 10 16:29:35 2014 +0200
Windows shell integration: Use named pipe (WIP)
commit 9eea7e2321abeac6b8db0bd85bfce612dbf6bb20
Author: Olivier Goffart <ogoffart@woboq.com>
Date: Wed Oct 1 12:04:13 2014 +0200
Windows Shell Integration: Simplify StringUtil
This fixes a memory leak in CommunicationSocket::ReadLine
174 lines
3.6 KiB
C++
174 lines
3.6 KiB
C++
/**
|
|
* Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
|
|
*
|
|
* This library is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU Lesser General Public License as published by the Free
|
|
* Software Foundation; either version 2.1 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
|
|
* details.
|
|
*/
|
|
|
|
#include "OCOverlay.h"
|
|
|
|
#include "OCOverlayFactory.h"
|
|
#include "RegistryUtil.h"
|
|
#include "StringUtil.h"
|
|
|
|
#include "UtilConstants.h"
|
|
#include "RemotePathChecker.h"
|
|
|
|
#include "resource.h"
|
|
|
|
#include <algorithm>
|
|
#include <iostream>
|
|
#include <fstream>
|
|
|
|
using namespace std;
|
|
|
|
#pragma comment(lib, "shlwapi.lib")
|
|
|
|
extern HINSTANCE instanceHandle;
|
|
|
|
#define IDM_DISPLAY 0
|
|
#define IDB_OK 101
|
|
|
|
OCOverlay::OCOverlay(int state)
|
|
: _referenceCount(1)
|
|
, _state(state)
|
|
|
|
{
|
|
static RemotePathChecker s_remotePathChecker;
|
|
_checker = &s_remotePathChecker;
|
|
}
|
|
|
|
OCOverlay::~OCOverlay(void)
|
|
{
|
|
}
|
|
|
|
IFACEMETHODIMP_(ULONG) OCOverlay::AddRef()
|
|
{
|
|
return InterlockedIncrement(&_referenceCount);
|
|
}
|
|
|
|
IFACEMETHODIMP OCOverlay::QueryInterface(REFIID riid, void **ppv)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
if (IsEqualIID(IID_IUnknown, riid) || IsEqualIID(IID_IShellIconOverlayIdentifier, riid))
|
|
{
|
|
*ppv = static_cast<IShellIconOverlayIdentifier *>(this);
|
|
}
|
|
else
|
|
{
|
|
hr = E_NOINTERFACE;
|
|
*ppv = NULL;
|
|
}
|
|
|
|
if (*ppv)
|
|
{
|
|
AddRef();
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
IFACEMETHODIMP_(ULONG) OCOverlay::Release()
|
|
{
|
|
ULONG cRef = InterlockedDecrement(&_referenceCount);
|
|
if (0 == cRef)
|
|
{
|
|
delete this;
|
|
}
|
|
|
|
return cRef;
|
|
}
|
|
|
|
IFACEMETHODIMP OCOverlay::GetPriority(int *pPriority)
|
|
{
|
|
// this defines which handler has prededence, so
|
|
// we order this in terms of likelyhood
|
|
switch (_state) {
|
|
case State_OK:
|
|
*pPriority = 0;
|
|
case State_OKShared:
|
|
*pPriority = 1;
|
|
case State_Warning:
|
|
*pPriority = 2;
|
|
case State_WarningShared:
|
|
*pPriority = 3;
|
|
case State_Sync:
|
|
*pPriority = 4;
|
|
case State_SyncShared:
|
|
*pPriority = 5;
|
|
case State_Error:
|
|
*pPriority = 6;
|
|
case State_ErrorShared:
|
|
*pPriority = 7;
|
|
default:
|
|
*pPriority = 8;
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
IFACEMETHODIMP OCOverlay::IsMemberOf(PCWSTR pwszPath, DWORD dwAttrib)
|
|
{
|
|
auto watchedDirectories = _checker->WatchedDirectories();
|
|
|
|
wstring wpath(pwszPath);
|
|
//wpath.append(L"\\");
|
|
vector<wstring>::iterator it;
|
|
bool watched = false;
|
|
for (it = watchedDirectories.begin(); it != watchedDirectories.end(); ++it) {
|
|
if (StringUtil::begins_with(wpath, *it)) {
|
|
watched = true;
|
|
}
|
|
}
|
|
|
|
if (!watched) {
|
|
return MAKE_HRESULT(S_FALSE, 0, 0);
|
|
}
|
|
|
|
int state = 0;
|
|
if (!_checker->IsMonitoredPath(pwszPath, &state)) {
|
|
return MAKE_HRESULT(S_FALSE, 0, 0);
|
|
}
|
|
return MAKE_HRESULT(state == _state ? S_OK : S_FALSE, 0, 0);
|
|
}
|
|
|
|
IFACEMETHODIMP OCOverlay::GetOverlayInfo(PWSTR pwszIconFile, int cchMax, int *pIndex, DWORD *pdwFlags)
|
|
{
|
|
*pIndex = 0;
|
|
*pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
|
|
*pIndex = _state;
|
|
|
|
if (GetModuleFileName(instanceHandle, pwszIconFile, cchMax) == 0) {
|
|
HRESULT hResult = HRESULT_FROM_WIN32(GetLastError());
|
|
wcerr << L"IsOK? " << (hResult == S_OK) << L" with path " << pwszIconFile << L", index " << *pIndex << endl;
|
|
return hResult;
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
bool OCOverlay::_IsOverlaysEnabled()
|
|
{
|
|
//int enable;
|
|
bool success = false;
|
|
|
|
//if(RegistryUtil::ReadRegistry(REGISTRY_ROOT_KEY, REGISTRY_ENABLE_OVERLAY, &enable))
|
|
//{
|
|
// if(enable) {
|
|
// success = true;
|
|
// }
|
|
//}
|
|
|
|
return success;
|
|
}
|
|
|