mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-14 14:37:41 +00:00
Compare commits
16 Commits
OPENURU_BU
...
working_19
Author | SHA1 | Date | |
---|---|---|---|
38bf3ed1dc | |||
67a9e4a892 | |||
13e3022087 | |||
9b80ebf645 | |||
d007fac536
|
|||
099a171f85 | |||
994cee47b1 | |||
ba7b2d0caf | |||
9be38cb29b | |||
8c46126007
|
|||
bef0bfa262 | |||
3d3d70fc08 | |||
2a63116726 | |||
86d2da35b7
|
|||
1bfa806843 | |||
23126d3135 |
@ -162,6 +162,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
|
||||
#include "plTweak.h"
|
||||
|
||||
#include <ShObjIdl.h>
|
||||
|
||||
#define MSG_LOADING_BAR
|
||||
|
||||
// static hsVector3 gAbsDown(0,0,-hsScalar1);
|
||||
@ -170,6 +172,10 @@ static plDispatchBase* gDisp = nil;
|
||||
static plTimerCallbackManager* gTimerMgr = nil;
|
||||
static plAudioSystem* gAudio = nil;
|
||||
|
||||
#ifdef HS_BUILD_FOR_WIN32
|
||||
extern ITaskbarList3* gTaskbarList;
|
||||
#endif
|
||||
|
||||
hsBool plClient::fDelayMS = false;
|
||||
|
||||
plClient* plClient::fInstance=nil;
|
||||
@ -771,6 +777,12 @@ hsBool plClient::MsgReceive(plMessage* msg)
|
||||
}
|
||||
break;
|
||||
|
||||
case plClientMsg::kFlashWindow:
|
||||
{
|
||||
FlashWindow();
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -1286,6 +1298,32 @@ void plClient::IProgressMgrCallbackProc(plOperationProgress * progress)
|
||||
if(!fInstance)
|
||||
return;
|
||||
|
||||
// Increments the taskbar progress [Windows 7+]
|
||||
#ifdef HS_BUILD_FOR_WIN32
|
||||
if (gTaskbarList && fInstance->GetWindowHandle())
|
||||
{
|
||||
static TBPFLAG lastState = TBPF_NOPROGRESS;
|
||||
TBPFLAG myState;
|
||||
|
||||
// So, calling making these kernel calls is kind of SLOW. So, let's
|
||||
// hide that behind a userland check--this helps linking go faster!
|
||||
if (progress->IsLastUpdate())
|
||||
myState = TBPF_NOPROGRESS;
|
||||
else if (progress->GetMax() == 0.f)
|
||||
myState = TBPF_INDETERMINATE;
|
||||
else
|
||||
// This will set TBPF_NORMAL for us
|
||||
myState = TBPF_NORMAL;
|
||||
|
||||
if (myState == TBPF_NORMAL)
|
||||
// This sets us to TBPF_NORMAL
|
||||
gTaskbarList->SetProgressValue(fInstance->GetWindowHandle(), (ULONGLONG)progress->GetProgress(), (ULONGLONG)progress->GetMax());
|
||||
else if (myState != lastState)
|
||||
gTaskbarList->SetProgressState(fInstance->GetWindowHandle(), myState);
|
||||
lastState = myState;
|
||||
}
|
||||
#endif
|
||||
|
||||
fInstance->fMessagePumpProc();
|
||||
|
||||
// HACK HACK HACK HACK!
|
||||
@ -2426,6 +2464,17 @@ void plClient::WindowActivate(bool active)
|
||||
fWindowActive = active;
|
||||
}
|
||||
|
||||
void plClient::FlashWindow()
|
||||
{
|
||||
#ifdef HS_BUILD_FOR_WIN32
|
||||
FLASHWINFO info;
|
||||
info.cbSize = sizeof(info);
|
||||
info.dwFlags = FLASHW_TIMERNOFG | FLASHW_ALL;
|
||||
info.hwnd = fWindowHndl;
|
||||
info.uCount = -1;
|
||||
FlashWindowEx(&info);
|
||||
#endif
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void plClient::IOnAsyncInitComplete () {
|
||||
|
@ -292,6 +292,7 @@ public:
|
||||
virtual void WindowActivate(bool active);
|
||||
virtual hsBool WindowActive() const { return fWindowActive; }
|
||||
|
||||
void FlashWindow();
|
||||
void SetMessagePumpProc( plMessagePumpProc proc ) { fMessagePumpProc = proc; }
|
||||
void ResetDisplayDevice(int Width, int Height, int ColorDepth, hsBool Windowed, int NumAASamples, int MaxAnisotropicSamples, hsBool VSync = false);
|
||||
void ResizeDisplayDevice(int Width, int Height, hsBool Windowed);
|
||||
|
@ -77,6 +77,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include <shellapi.h>
|
||||
#include "WinHttp.h"
|
||||
#include "loginfix.h"
|
||||
#include <ShObjIdl.h>
|
||||
//
|
||||
// Defines
|
||||
//
|
||||
@ -99,6 +100,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
// Globals
|
||||
//
|
||||
hsBool gHasMouse = false;
|
||||
ITaskbarList3* gTaskbarList = nil; // NT 6.1+ taskbar stuff
|
||||
|
||||
extern hsBool gDataServerLocal;
|
||||
extern hsBool gUseBackgroundDownloader;
|
||||
@ -137,6 +139,7 @@ bool gPendingActivateFlag = false;
|
||||
|
||||
static bool s_loginDlgRunning = false;
|
||||
static CEvent s_statusEvent(kEventManualReset);
|
||||
static UINT s_WmTaskbarList = RegisterWindowMessage("TaskbarButtonCreated");
|
||||
|
||||
FILE *errFP = nil;
|
||||
HINSTANCE gHInst = NULL; // Instance of this app
|
||||
@ -476,10 +479,22 @@ void DebugMsgF(const char* format, ...);
|
||||
|
||||
// Handles all the windows messages we might receive
|
||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
{
|
||||
static bool gDragging = false;
|
||||
static UInt8 mouse_down = 0;
|
||||
|
||||
// Messages we registered for manually (no const value)
|
||||
if (message == s_WmTaskbarList)
|
||||
{
|
||||
// Grab the Windows 7 taskbar list stuff
|
||||
if (gTaskbarList)
|
||||
gTaskbarList->Release();
|
||||
HRESULT result = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&gTaskbarList);
|
||||
if (FAILED(result))
|
||||
gTaskbarList = nil;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Handle messages
|
||||
switch (message) {
|
||||
case WM_LBUTTONDOWN:
|
||||
@ -541,13 +556,13 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
break;
|
||||
|
||||
case WM_SYSCOMMAND:
|
||||
switch (wParam) {
|
||||
// Trap ALT so it doesn't pause the app
|
||||
case SC_KEYMENU :
|
||||
//// disable screensavers and monitor power downs too.
|
||||
case SC_SCREENSAVE:
|
||||
case SC_MONITORPOWER:
|
||||
return 0;
|
||||
switch (wParam) {
|
||||
// Trap ALT so it doesn't pause the app
|
||||
case SC_KEYMENU :
|
||||
//// disable screensavers and monitor power downs too.
|
||||
case SC_SCREENSAVE:
|
||||
case SC_MONITORPOWER:
|
||||
return 0;
|
||||
case SC_CLOSE :
|
||||
// kill game if window is closed
|
||||
gClient->SetDone(TRUE);
|
||||
@ -555,8 +570,8 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
mgr->QueueDisableNet(false, nil);
|
||||
DestroyWindow(gClient->GetWindowHandle());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_SETCURSOR:
|
||||
{
|
||||
@ -579,11 +594,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
plMouseDevice::HideCursor();
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_ACTIVATE:
|
||||
case WM_ACTIVATE:
|
||||
{
|
||||
bool active = (LOWORD(wParam) == WA_ACTIVE || LOWORD(wParam) == WA_CLICKACTIVE);
|
||||
bool minimized = (HIWORD(wParam) != 0);
|
||||
@ -668,18 +682,16 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance())
|
||||
mgr->QueueDisableNet(false, nil);
|
||||
DestroyWindow(gClient->GetWindowHandle());
|
||||
return TRUE;
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
gClient->SetDone(TRUE);
|
||||
if (plNetClientMgr * mgr = plNetClientMgr::GetInstance())
|
||||
mgr->QueueDisableNet(false, nil);
|
||||
PostQuitMessage(0);
|
||||
return TRUE;
|
||||
case WM_CREATE:
|
||||
// Create renderer
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
}
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
void PumpMessageQueueProc( void )
|
||||
|
@ -172,8 +172,8 @@ static CEvent s_statusEvent(kEventManualReset);
|
||||
|
||||
static const wchar * s_deleteFiles[] = {
|
||||
L"NetDiag.exe",
|
||||
L"UruExplorer.pdb",
|
||||
L"UruExplorer.map",
|
||||
// L"UruExplorer.pdb", // removed for OpenUru Builds
|
||||
// L"UruExplorer.map",
|
||||
};
|
||||
|
||||
#else
|
||||
|
@ -224,8 +224,9 @@ pfGUIListPicture::pfGUIListPicture( plKey mipKey, hsBool respectAlpha ) : pfGUIL
|
||||
char str[ 512 ];
|
||||
sprintf( str, "%s_uncomp", mip->GetKeyName() );
|
||||
fMipmapKey = hsgResMgr::ResMgr()->NewKey( str, uncompBuffer, fMipmapKey->GetUoid().GetLocation() );
|
||||
fMipmapKey->RefObject();
|
||||
}
|
||||
|
||||
fMipmapKey->RefObject();
|
||||
}
|
||||
|
||||
pfGUIListPicture::~pfGUIListPicture()
|
||||
|
@ -722,6 +722,13 @@ void cyMisc::ExcludeRegionSetNow(pyKey& sender, pyKey& exKey, UInt16 state)
|
||||
plgDispatch::MsgSend( msg ); // whoosh... off it goes
|
||||
}
|
||||
|
||||
void cyMisc::FlashWindow()
|
||||
{
|
||||
plKey clientKey = hsgResMgr::ResMgr()->FindKey(kClient_KEY);
|
||||
plClientMsg* pMsg = new plClientMsg(plClientMsg::kFlashWindow);
|
||||
pMsg->Send(clientKey); // whoosh... off it goes
|
||||
}
|
||||
|
||||
#include "hsTimer.h"
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
@ -244,6 +244,15 @@ public:
|
||||
//
|
||||
static hsBool WasLocallyNotified(pyKey &selfkey);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Function : FlashWindow
|
||||
// PARAMETERS :
|
||||
//
|
||||
// PURPOSE : Flashes the client window if it is not focused
|
||||
//
|
||||
static void FlashWindow();
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Function : GetClientName
|
||||
|
@ -48,6 +48,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
|
||||
#include <python.h>
|
||||
|
||||
PYTHON_BASIC_GLOBAL_METHOD_DEFINITION(PtFlashWindow, cyMisc::FlashWindow, "Flashes the client window if it is not focused");
|
||||
|
||||
PYTHON_GLOBAL_METHOD_DEFINITION_NOARGS(PtGetAgeName, "DEPRECIATED - use ptDniInfoSource instead")
|
||||
{
|
||||
return PyString_FromString(cyMisc::GetAgeName());
|
||||
@ -496,6 +498,8 @@ PYTHON_GLOBAL_METHOD_DEFINITION(PtDumpLogs, args, "Params: folder\nDumps all cur
|
||||
|
||||
void cyMisc::AddPlasmaMethods(std::vector<PyMethodDef> &methods)
|
||||
{
|
||||
PYTHON_GLOBAL_METHOD_NOARGS(methods, PtFlashWindow);
|
||||
|
||||
PYTHON_GLOBAL_METHOD_NOARGS(methods, PtGetAgeName);
|
||||
PYTHON_GLOBAL_METHOD_NOARGS(methods, PtGetAgeInfo);
|
||||
PYTHON_GLOBAL_METHOD_NOARGS(methods, PtGetAgeTime);
|
||||
|
@ -94,6 +94,8 @@ public:
|
||||
kEnableRenderScene,
|
||||
kResetGraphicsDevice,
|
||||
kSetGraphicsDefaults,
|
||||
|
||||
kFlashWindow,
|
||||
};
|
||||
|
||||
// graphics settings fields
|
||||
|
@ -385,7 +385,7 @@ bool plNCAgeJoiner::MsgReceive (plMessage * msg) {
|
||||
}
|
||||
else if (unsigned ageVaultId = NetCommGetAge()->ageVaultId) {
|
||||
// Download the age vault
|
||||
VaultDownload(
|
||||
VaultDownloadNoCallbacks(
|
||||
L"AgeJoin",
|
||||
ageVaultId,
|
||||
AgeVaultDownloadCallback,
|
||||
|
@ -318,7 +318,7 @@ static void INetCliAuthSetPlayerRequestCallback (
|
||||
else {
|
||||
s_needAvatarLoad = true;
|
||||
|
||||
VaultDownload(
|
||||
VaultDownloadNoCallbacks(
|
||||
L"SetActivePlayer",
|
||||
s_player->playerInt,
|
||||
PlayerInitCallback,
|
||||
@ -374,7 +374,7 @@ static void INetCliAuthLoginSetPlayerRequestCallback (
|
||||
msg->Send();
|
||||
}
|
||||
else {
|
||||
VaultDownload(
|
||||
VaultDownloadNoCallbacks(
|
||||
L"SetActivePlayer",
|
||||
s_player->playerInt,
|
||||
LoginPlayerInitCallback,
|
||||
|
@ -181,8 +181,24 @@ struct VaultDownloadTrans {
|
||||
unsigned vaultId;
|
||||
ENetError result;
|
||||
|
||||
VaultDownloadTrans ();
|
||||
|
||||
VaultDownloadTrans()
|
||||
: callback(), cbParam(), progressCallback(), cbProgressParam(),
|
||||
nodeCount(), nodesLeft(), vaultId(), result(kNetSuccess)
|
||||
{
|
||||
}
|
||||
|
||||
VaultDownloadTrans(const wchar_t* _tag, FVaultDownloadCallback _callback,
|
||||
void* _cbParam, FVaultProgressCallback _progressCallback,
|
||||
void* _cbProgressParam, unsigned _vaultId)
|
||||
: callback(_callback), cbParam(_cbParam), progressCallback(_progressCallback),
|
||||
cbProgressParam(_cbProgressParam), nodeCount(), nodesLeft(),
|
||||
vaultId(_vaultId), result(kNetSuccess)
|
||||
{
|
||||
StrCopy(tag, _tag, arrsize(tag));
|
||||
}
|
||||
|
||||
virtual ~VaultDownloadTrans() { }
|
||||
|
||||
static void VaultNodeFetched (
|
||||
ENetError result,
|
||||
void * param,
|
||||
@ -196,6 +212,28 @@ struct VaultDownloadTrans {
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
struct VaultDownloadNoCallbacksTrans : VaultDownloadTrans {
|
||||
VaultDownloadNoCallbacksTrans()
|
||||
: VaultDownloadTrans()
|
||||
{
|
||||
VaultSuppressCallbacks();
|
||||
}
|
||||
|
||||
VaultDownloadNoCallbacksTrans(const wchar_t* _tag, FVaultDownloadCallback _callback,
|
||||
void* _cbParam, FVaultProgressCallback _progressCallback,
|
||||
void* _cbProgressParam, unsigned _vaultId)
|
||||
: VaultDownloadTrans(_tag, _callback, _cbParam, _progressCallback, _cbProgressParam, _vaultId)
|
||||
{
|
||||
VaultSuppressCallbacks();
|
||||
}
|
||||
|
||||
~VaultDownloadNoCallbacksTrans()
|
||||
{
|
||||
VaultEnableCallbacks();
|
||||
}
|
||||
};
|
||||
|
||||
struct VaultAgeInitTrans {
|
||||
FVaultInitAgeCallback callback;
|
||||
void * cbState;
|
||||
@ -262,6 +300,8 @@ static HASHTABLEDECL(
|
||||
|
||||
static bool s_processPlayerInbox = false;
|
||||
|
||||
static long s_suppressCallbacks = 0;
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Local functions
|
||||
@ -303,8 +343,10 @@ static void VaultNodeAddedDownloadCallback(ENetError result, void * param) {
|
||||
VaultProcessUnvisitNote(childLink->node);
|
||||
}
|
||||
|
||||
for (IVaultCallback * cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->AddedChildNode(parentLink->node, childLink->node);
|
||||
if (s_suppressCallbacks == 0) {
|
||||
for (IVaultCallback* cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->AddedChildNode(parentLink->node, childLink->node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -377,9 +419,11 @@ static void BuildNodeTree (
|
||||
parentNode->state->children.Add(childLink);
|
||||
|
||||
if (notifyNow || childNode->nodeType != 0) {
|
||||
// We made a new link, so make the callbacks
|
||||
for (IVaultCallback * cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->AddedChildNode(parentNode, childNode);
|
||||
if (s_suppressCallbacks == 0) {
|
||||
// We made a new link, so make the callbacks
|
||||
for (IVaultCallback* cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->AddedChildNode(parentNode, childNode);
|
||||
}
|
||||
}
|
||||
else {
|
||||
INotifyAfterDownload* notify = NEWZERO(INotifyAfterDownload)(parentNode->nodeId, childNode->nodeId);
|
||||
@ -543,6 +587,10 @@ static void ChangedVaultNodeFetched (
|
||||
|
||||
RelVaultNodeLink* savedLink = s_nodes.Find(node->nodeId);
|
||||
|
||||
// Yeah, we are purposefully allowing this global callback to go out,
|
||||
// even if callback suppression has been enabled. The intent behind
|
||||
// that is to suppress spurious callbacks, but node changes are
|
||||
// probably not spurious.
|
||||
if (savedLink) {
|
||||
for (IVaultCallback * cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->ChangedNode(savedLink->node);
|
||||
@ -638,7 +686,7 @@ static void VaultNodeAdded (
|
||||
RelVaultNodeLink* parentLink = s_nodes.Find(parentId);
|
||||
RelVaultNodeLink* childLink = s_nodes.Find(childId);
|
||||
|
||||
if (childLink->node->nodeType != 0) {
|
||||
if (childLink->node->nodeType != 0 && s_suppressCallbacks == 0) {
|
||||
for (IVaultCallback * cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->AddedChildNode(parentLink->node, childLink->node);
|
||||
}
|
||||
@ -660,7 +708,7 @@ static void VaultNodeRemoved (
|
||||
if (!childLink)
|
||||
break;
|
||||
|
||||
if (parentLink->node->IsParentOf(childId, 1)) {
|
||||
if (parentLink->node->IsParentOf(childId, 1) && s_suppressCallbacks == 0) {
|
||||
// We have the relationship, so make the callbacks
|
||||
for (IVaultCallback * cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->RemovingChildNode(parentLink->node, childLink->node);
|
||||
@ -831,11 +879,6 @@ void VaultFindNodeTrans::VaultNodeFound (
|
||||
*
|
||||
***/
|
||||
|
||||
//============================================================================
|
||||
VaultDownloadTrans::VaultDownloadTrans () {
|
||||
ASSERT(!nodeCount); // must be alloced with
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void VaultDownloadTrans::VaultNodeFetched (
|
||||
ENetError result,
|
||||
@ -1047,8 +1090,10 @@ void IRelVaultNode::UnlinkFromRelatives () {
|
||||
next = parents.Next(link);
|
||||
|
||||
// We have the relationship, so make the callbacks
|
||||
for (IVaultCallback * cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->RemovingChildNode(link->node, this->node);
|
||||
if (s_suppressCallbacks == 0) {
|
||||
for (IVaultCallback* cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->RemovingChildNode(link->node, this->node);
|
||||
}
|
||||
|
||||
link->node->state->Unlink(node);
|
||||
}
|
||||
@ -1478,6 +1523,16 @@ void VaultUnregisterCallback (VaultCallback * cb) {
|
||||
cb->internal = nil;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void VaultSuppressCallbacks() {
|
||||
AtomicAdd(&s_suppressCallbacks, 1);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void VaultEnableCallbacks() {
|
||||
long prevValue = AtomicAdd(&s_suppressCallbacks, -1);
|
||||
hsAssert(prevValue > 0, "Hmm... A negative vault callback suppression count?");
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
@ -1772,8 +1827,10 @@ void VaultRemoveChildNode (
|
||||
|
||||
if (parentLink->node->IsParentOf(childId, 1)) {
|
||||
// We have the relationship, so make the callbacks
|
||||
for (IVaultCallback * cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->RemovingChildNode(parentLink->node, childLink->node);
|
||||
if (s_suppressCallbacks == 0) {
|
||||
for (IVaultCallback* cb = s_callbacks.Head(); cb; cb = s_callbacks.Next(cb))
|
||||
cb->cb->RemovingChildNode(parentLink->node, childLink->node);
|
||||
}
|
||||
}
|
||||
|
||||
parentLink->node->state->Unlink(childLink->node);
|
||||
@ -4945,13 +5002,27 @@ void VaultDownload (
|
||||
FVaultProgressCallback progressCallback,
|
||||
void * cbProgressParam
|
||||
) {
|
||||
VaultDownloadTrans * trans = NEWZERO(VaultDownloadTrans);
|
||||
StrCopy(trans->tag, tag, arrsize(trans->tag));
|
||||
trans->callback = callback;
|
||||
trans->cbParam = cbParam;
|
||||
trans->progressCallback = progressCallback;
|
||||
trans->cbProgressParam = cbProgressParam;
|
||||
trans->vaultId = vaultId;
|
||||
VaultDownloadTrans * trans = new VaultDownloadTrans(tag, callback, cbParam,
|
||||
progressCallback, cbProgressParam, vaultId);
|
||||
|
||||
NetCliAuthVaultFetchNodeRefs(
|
||||
vaultId,
|
||||
VaultDownloadTrans::VaultNodeRefsFetched,
|
||||
trans
|
||||
);
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
void VaultDownloadNoCallbacks (
|
||||
const wchar tag[],
|
||||
unsigned vaultId,
|
||||
FVaultDownloadCallback callback,
|
||||
void* cbParam,
|
||||
FVaultProgressCallback progressCallback,
|
||||
void* cbProgressParam
|
||||
) {
|
||||
VaultDownloadNoCallbacksTrans* trans = new VaultDownloadNoCallbacksTrans(tag, callback,
|
||||
cbParam, progressCallback, cbProgressParam, vaultId);
|
||||
|
||||
NetCliAuthVaultFetchNodeRefs(
|
||||
vaultId,
|
||||
@ -5001,6 +5072,8 @@ void VaultDownloadAndWait (
|
||||
|
||||
//============================================================================
|
||||
void VaultCull (unsigned vaultId) {
|
||||
VaultCallbackSuppressor suppress;
|
||||
|
||||
// Remove the node from the global table
|
||||
if (RelVaultNodeLink * link = s_nodes.Find(vaultId)) {
|
||||
LogMsg(kLogDebug, L"Vault: Culling node %u", link->node->nodeId);
|
||||
|
@ -82,6 +82,18 @@ struct VaultCallback {
|
||||
void VaultRegisterCallback (VaultCallback * cb);
|
||||
void VaultUnregisterCallback (VaultCallback * cb);
|
||||
|
||||
void VaultSuppressCallbacks();
|
||||
void VaultEnableCallbacks();
|
||||
|
||||
class VaultCallbackSuppressor
|
||||
{
|
||||
VaultCallbackSuppressor(const VaultCallbackSuppressor&) { }
|
||||
VaultCallbackSuppressor(VaultCallbackSuppressor&&) { }
|
||||
|
||||
public:
|
||||
VaultCallbackSuppressor() { VaultSuppressCallbacks(); }
|
||||
~VaultCallbackSuppressor() { VaultEnableCallbacks(); }
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
@ -476,6 +488,14 @@ void VaultDownload (
|
||||
FVaultProgressCallback progressCallback,
|
||||
void * cbProgressParam
|
||||
);
|
||||
void VaultDownloadNoCallbacks(
|
||||
const wchar tag[],
|
||||
unsigned vaultId,
|
||||
FVaultDownloadCallback callback,
|
||||
void* cbParam,
|
||||
FVaultProgressCallback progressCallback,
|
||||
void* cbProgressParam
|
||||
);
|
||||
void VaultDownloadAndWait (
|
||||
const wchar tag[],
|
||||
unsigned vaultId,
|
||||
|
Reference in New Issue
Block a user