195 lines
5.8 KiB
C++
195 lines
5.8 KiB
C++
/**
|
|
* @file llaisapi.h
|
|
* @brief classes and functions for interfacing with the v3+ ais inventory service.
|
|
*
|
|
* $LicenseInfo:firstyear=2013&license=viewerlgpl$
|
|
* Second Life Viewer Source Code
|
|
* Copyright (C) 2013, Linden Research, Inc.
|
|
*
|
|
* 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;
|
|
* version 2.1 of the License only.
|
|
*
|
|
* 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.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#ifndef LL_LLAISAPI_H
|
|
#define LL_LLAISAPI_H
|
|
|
|
#include "lluuid.h"
|
|
#include <map>
|
|
#include <set>
|
|
#include <string>
|
|
#include "llcurl.h"
|
|
#include "llhttpclient.h"
|
|
#include "llhttpretrypolicy.h"
|
|
#include "llviewerinventory.h"
|
|
|
|
class AISCommand: public LLHTTPClient::ResponderWithResult
|
|
{
|
|
public:
|
|
typedef boost::function<void()> command_func_type;
|
|
|
|
AISCommand(LLPointer<LLInventoryCallback> callback);
|
|
|
|
virtual ~AISCommand() {}
|
|
|
|
bool run_command();
|
|
|
|
void setCommandFunc(command_func_type command_func);
|
|
|
|
// Need to do command-specific parsing to get an id here, for
|
|
// LLInventoryCallback::fire(). May or may not need to bother,
|
|
// since most LLInventoryCallbacks do their work in the
|
|
// destructor.
|
|
|
|
/* virtual */ void httpSuccess();
|
|
/* virtual */ void httpFailure();
|
|
|
|
static bool isAPIAvailable();
|
|
static bool getInvCap(std::string& cap);
|
|
static bool getLibCap(std::string& cap);
|
|
static void getCapabilityNames(LLSD& capabilityNames);
|
|
|
|
protected:
|
|
virtual bool getResponseUUID(const LLSD& content, LLUUID& id);
|
|
|
|
private:
|
|
command_func_type mCommandFunc;
|
|
LLPointer<LLHTTPRetryPolicy> mRetryPolicy;
|
|
LLPointer<LLInventoryCallback> mCallback;
|
|
};
|
|
|
|
class RemoveItemCommand: public AISCommand
|
|
{
|
|
public:
|
|
RemoveItemCommand(const LLUUID& item_id,
|
|
LLPointer<LLInventoryCallback> callback);
|
|
/* virtual */ const char* getName() const { return "RemoveItemCommand"; }
|
|
};
|
|
|
|
class RemoveCategoryCommand: public AISCommand
|
|
{
|
|
public:
|
|
RemoveCategoryCommand(const LLUUID& item_id,
|
|
LLPointer<LLInventoryCallback> callback);
|
|
/* virtual */ const char* getName() const { return "RemoveCategoryCommand"; }
|
|
};
|
|
|
|
class PurgeDescendentsCommand: public AISCommand
|
|
{
|
|
public:
|
|
PurgeDescendentsCommand(const LLUUID& item_id,
|
|
LLPointer<LLInventoryCallback> callback);
|
|
/* virtual */ const char* getName() const { return "PurgeDescendentsCommand"; }
|
|
|
|
};
|
|
|
|
class UpdateItemCommand: public AISCommand
|
|
{
|
|
public:
|
|
UpdateItemCommand(const LLUUID& item_id,
|
|
const LLSD& updates,
|
|
LLPointer<LLInventoryCallback> callback);
|
|
/* virtual */ const char* getName() const { return "UpdateItemCommand"; }
|
|
|
|
private:
|
|
LLSD mUpdates;
|
|
};
|
|
|
|
class UpdateCategoryCommand: public AISCommand
|
|
{
|
|
public:
|
|
UpdateCategoryCommand(const LLUUID& cat_id,
|
|
const LLSD& updates,
|
|
LLPointer<LLInventoryCallback> callback);
|
|
/* virtual */ const char* getName() const { return "UpdateCategoryCommand"; }
|
|
|
|
private:
|
|
LLSD mUpdates;
|
|
};
|
|
|
|
class SlamFolderCommand: public AISCommand
|
|
{
|
|
public:
|
|
SlamFolderCommand(const LLUUID& folder_id, const LLSD& contents, LLPointer<LLInventoryCallback> callback);
|
|
/* virtual */ const char* getName() const { return "SlamFolderCommand"; }
|
|
|
|
private:
|
|
LLSD mContents;
|
|
};
|
|
|
|
class CopyLibraryCategoryCommand: public AISCommand
|
|
{
|
|
public:
|
|
CopyLibraryCategoryCommand(const LLUUID& source_id, const LLUUID& dest_id, LLPointer<LLInventoryCallback> callback);
|
|
/* virtual */ const char* getName() const { return "CopyLibraryCategoryCommand"; }
|
|
|
|
protected:
|
|
/* virtual */ bool getResponseUUID(const LLSD& content, LLUUID& id);
|
|
};
|
|
|
|
class CreateInventoryCommand: public AISCommand
|
|
{
|
|
public:
|
|
CreateInventoryCommand(const LLUUID& parent_id, const LLSD& new_inventory, LLPointer<LLInventoryCallback> callback);
|
|
/* virtual */ const char* getName() const { return "CreateInventoryCommand"; }
|
|
|
|
private:
|
|
LLSD mNewInventory;
|
|
};
|
|
|
|
class AISUpdate
|
|
{
|
|
public:
|
|
AISUpdate(const LLSD& update);
|
|
void parseUpdate(const LLSD& update);
|
|
void parseMeta(const LLSD& update);
|
|
void parseContent(const LLSD& update);
|
|
void parseUUIDArray(const LLSD& content, const std::string& name, uuid_list_t& ids);
|
|
void parseLink(const LLSD& link_map);
|
|
void parseItem(const LLSD& link_map);
|
|
void parseCategory(const LLSD& link_map);
|
|
void parseDescendentCount(const LLUUID& category_id, const LLSD& embedded);
|
|
void parseEmbedded(const LLSD& embedded);
|
|
void parseEmbeddedLinks(const LLSD& links);
|
|
void parseEmbeddedItems(const LLSD& items);
|
|
void parseEmbeddedCategories(const LLSD& categories);
|
|
void parseEmbeddedItem(const LLSD& item);
|
|
void parseEmbeddedCategory(const LLSD& category);
|
|
void doUpdate();
|
|
private:
|
|
void clearParseResults();
|
|
|
|
typedef std::map<LLUUID,S32> uuid_int_map_t;
|
|
uuid_int_map_t mCatDescendentDeltas;
|
|
uuid_int_map_t mCatDescendentsKnown;
|
|
uuid_int_map_t mCatVersionsUpdated;
|
|
|
|
typedef std::map<LLUUID,LLPointer<LLViewerInventoryItem> > deferred_item_map_t;
|
|
deferred_item_map_t mItemsCreated;
|
|
deferred_item_map_t mItemsUpdated;
|
|
typedef std::map<LLUUID,LLPointer<LLViewerInventoryCategory> > deferred_category_map_t;
|
|
deferred_category_map_t mCategoriesCreated;
|
|
deferred_category_map_t mCategoriesUpdated;
|
|
|
|
// These keep track of uuid's mentioned in meta values.
|
|
// Useful for filtering out which content we are interested in.
|
|
uuid_list_t mObjectsDeletedIds;
|
|
uuid_list_t mItemIds;
|
|
uuid_list_t mCategoryIds;
|
|
};
|
|
|
|
#endif
|