Initial checkin for uploading via coroutine.
parent
08ef748cba
commit
ddb63e7fb7
|
|
@ -1394,6 +1394,7 @@ BOOL LLStringUtilBase<T>::containsNonprintable(const string_type& string)
|
|||
return rv;
|
||||
}
|
||||
|
||||
// *TODO: reimplement in terms of algorithm
|
||||
//static
|
||||
template<class T>
|
||||
void LLStringUtilBase<T>::stripNonprintable(string_type& string)
|
||||
|
|
@ -1427,6 +1428,7 @@ void LLStringUtilBase<T>::stripNonprintable(string_type& string)
|
|||
delete []c_string;
|
||||
}
|
||||
|
||||
// *TODO: reimplement in terms of algorithm
|
||||
template<class T>
|
||||
std::basic_string<T> LLStringUtilBase<T>::quote(const string_type& str,
|
||||
const string_type& triggers,
|
||||
|
|
|
|||
|
|
@ -603,6 +603,7 @@ set(viewer_SOURCE_FILES
|
|||
llviewerassetstats.cpp
|
||||
llviewerassetstorage.cpp
|
||||
llviewerassettype.cpp
|
||||
llviewerassetupload.cpp
|
||||
llviewerattachmenu.cpp
|
||||
llvieweraudio.cpp
|
||||
llviewercamera.cpp
|
||||
|
|
@ -1197,6 +1198,7 @@ set(viewer_HEADER_FILES
|
|||
llviewerassetstats.h
|
||||
llviewerassetstorage.h
|
||||
llviewerassettype.h
|
||||
llviewerassetupload.h
|
||||
llviewerattachmenu.h
|
||||
llvieweraudio.h
|
||||
llviewercamera.h
|
||||
|
|
|
|||
|
|
@ -25,8 +25,8 @@
|
|||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_UPLOAD_MANAGER_H
|
||||
#define LL_UPLOAD_MANAGER_H
|
||||
#ifndef LL_COPROCEDURE_MANAGER_H
|
||||
#define LL_COPROCEDURE_MANAGER_H
|
||||
|
||||
#include "lleventcoro.h"
|
||||
#include "llcoros.h"
|
||||
|
|
@ -38,6 +38,7 @@ class LLCoprocedureManager : public LLSingleton < LLCoprocedureManager >
|
|||
public:
|
||||
typedef boost::function<void(LLCoros::self &, LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &, const LLUUID &id)> CoProcedure_t;
|
||||
|
||||
LLCoprocedureManager();
|
||||
virtual ~LLCoprocedureManager();
|
||||
|
||||
/// Places the coprocedure on the queue for processing.
|
||||
|
|
@ -78,9 +79,6 @@ public:
|
|||
return countPending() + countActive();
|
||||
}
|
||||
|
||||
protected:
|
||||
LLCoprocedureManager();
|
||||
|
||||
private:
|
||||
struct QueuedCoproc
|
||||
{
|
||||
|
|
|
|||
|
|
@ -992,10 +992,20 @@ void LLFloaterBvhPreview::onBtnOK(void* userdata)
|
|||
{
|
||||
std::string name = floaterp->getChild<LLUICtrl>("name_form")->getValue().asString();
|
||||
std::string desc = floaterp->getChild<LLUICtrl>("description_form")->getValue().asString();
|
||||
LLAssetStorage::LLStoreAssetCallback callback = NULL;
|
||||
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
void *userdata = NULL;
|
||||
upload_new_resource(floaterp->mTransactionID, // tid
|
||||
#if 1
|
||||
NewResourceUploadInfo::ptr_t assetUpdloadInfo(new NewResourceUploadInfo(name, desc, 0,
|
||||
LLFolderType::FT_NONE, LLInventoryType::IT_ANIMATION,
|
||||
LLFloaterPerms::getNextOwnerPerms("Uploads"), LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),
|
||||
name, expected_upload_cost));
|
||||
|
||||
upload_new_resource(floaterp->mTransactionID, LLAssetType::AT_ANIMATION,
|
||||
assetUpdloadInfo);
|
||||
#else
|
||||
LLAssetStorage::LLStoreAssetCallback callback = NULL;
|
||||
void *userdata = NULL;
|
||||
|
||||
upload_new_resource(floaterp->mTransactionID, // tid
|
||||
LLAssetType::AT_ANIMATION,
|
||||
name,
|
||||
desc,
|
||||
|
|
@ -1005,7 +1015,7 @@ void LLFloaterBvhPreview::onBtnOK(void* userdata)
|
|||
LLFloaterPerms::getNextOwnerPerms("Uploads"), LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),
|
||||
name,
|
||||
callback, expected_upload_cost, userdata);
|
||||
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1004,9 +1004,22 @@ void LLSnapshotLivePreview::saveTexture()
|
|||
LLAgentUI::buildLocationString(pos_string, LLAgentUI::LOCATION_FORMAT_FULL);
|
||||
std::string who_took_it;
|
||||
LLAgentUI::buildFullname(who_took_it);
|
||||
LLAssetStorage::LLStoreAssetCallback callback = NULL;
|
||||
S32 expected_upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
void *userdata = NULL;
|
||||
#if 1
|
||||
std::string name = "Snapshot: " + pos_string;
|
||||
std::string desc = "Taken by " + who_took_it + " at " + pos_string;
|
||||
|
||||
NewResourceUploadInfo::ptr_t assetUploadInfo(new NewResourceUploadInfo(name, desc, 0,
|
||||
LLFolderType::FT_SNAPSHOT_CATEGORY, LLInventoryType::IT_SNAPSHOT,
|
||||
PERM_ALL, LLFloaterPerms::getGroupPerms("Uploads"), LLFloaterPerms::getEveryonePerms("Uploads"),
|
||||
name, expected_upload_cost));
|
||||
|
||||
upload_new_resource(tid, LLAssetType::AT_TEXTURE, assetUploadInfo);
|
||||
|
||||
#else
|
||||
LLAssetStorage::LLStoreAssetCallback callback = NULL;
|
||||
void *userdata = NULL;
|
||||
|
||||
upload_new_resource(tid, // tid
|
||||
LLAssetType::AT_TEXTURE,
|
||||
"Snapshot : " + pos_string,
|
||||
|
|
@ -1019,6 +1032,7 @@ void LLSnapshotLivePreview::saveTexture()
|
|||
LLFloaterPerms::getEveryonePerms("Uploads"),
|
||||
"Snapshot : " + pos_string,
|
||||
callback, expected_upload_cost, userdata);
|
||||
#endif
|
||||
gViewerWindow->playSnapshotAnimAndSound();
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -0,0 +1,138 @@
|
|||
/**
|
||||
* @file llviewerassetupload.cpp
|
||||
* @author optional
|
||||
* @brief brief description of the file
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2011, 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$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "linden_common.h"
|
||||
#include "llviewerassetupload.h"
|
||||
#include "llviewertexturelist.h"
|
||||
#include "llimage.h"
|
||||
#include "lltrans.h"
|
||||
#include "lluuid.h"
|
||||
#include "llvorbisencode.h"
|
||||
#include "lluploaddialog.h"
|
||||
#include "lleconomy.h"
|
||||
|
||||
//=========================================================================
|
||||
/*static*/
|
||||
void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoros::self &self, LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter, const LLUUID &id,
|
||||
std::string url, NewResourceUploadInfo::ptr_t uploadInfo)
|
||||
{
|
||||
LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
|
||||
|
||||
uploadInfo->prepareUpload();
|
||||
uploadInfo->logPreparedUpload();
|
||||
|
||||
std::string uploadMessage = "Uploading...\n\n";
|
||||
uploadMessage.append(uploadInfo->getDisplayName());
|
||||
LLUploadDialog::modalUploadDialog(uploadMessage);
|
||||
|
||||
LLSD body = uploadInfo->generatePostBody();
|
||||
|
||||
LLSD result = httpAdapter->postAndYield(self, httpRequest, url, body);
|
||||
|
||||
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
|
||||
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
|
||||
|
||||
if (!status)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::string uploader = result["uploader"].asString();
|
||||
|
||||
result = httpAdapter->postFileAndYield(self, httpRequest, uploader, uploadInfo->getAssetId(), uploadInfo->getAssetType());
|
||||
|
||||
if (!status)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
S32 expected_upload_cost = 0;
|
||||
|
||||
// Update L$ and ownership credit information
|
||||
// since it probably changed on the server
|
||||
if (uploadInfo->getAssetType() == LLAssetType::AT_TEXTURE ||
|
||||
uploadInfo->getAssetType() == LLAssetType::AT_SOUND ||
|
||||
uploadInfo->getAssetType() == LLAssetType::AT_ANIMATION ||
|
||||
uploadInfo->getAssetType() == LLAssetType::AT_MESH)
|
||||
{
|
||||
expected_upload_cost =
|
||||
LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
|
||||
}
|
||||
|
||||
on_new_single_inventory_upload_complete(
|
||||
uploadInfo->getAssetType(),
|
||||
uploadInfo->getInventoryType(),
|
||||
uploadInfo->getAssetTypeString(), // note the paramert calls for inv_type string...
|
||||
uploadInfo->getFolderId(),
|
||||
uploadInfo->getName(),
|
||||
uploadInfo->getDescription(),
|
||||
result,
|
||||
expected_upload_cost);
|
||||
|
||||
#if 0
|
||||
|
||||
LLSD initalBody = generate_new_resource_upload_capability_body();
|
||||
|
||||
|
||||
|
||||
LLSD result = httpAdapter->postAndYield(self, httpRequest, url, initalBody);
|
||||
|
||||
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
|
||||
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
|
||||
|
||||
if (!status)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
std::string state = result["state"].asString();
|
||||
|
||||
if (state == "upload")
|
||||
{
|
||||
// Upload the file...
|
||||
result = httpAdapter->postFileAndYield(self, httpRequest, url, initalBody);
|
||||
|
||||
httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
|
||||
status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
|
||||
|
||||
state = result["state"].asString();
|
||||
}
|
||||
|
||||
if (state == "complete")
|
||||
{
|
||||
// done with the upload.
|
||||
}
|
||||
else
|
||||
{
|
||||
// an error occurred
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//=========================================================================
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
* @file llviewerassetupload.h
|
||||
* @author optional
|
||||
* @brief brief description of the file
|
||||
*
|
||||
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2011, 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_VIEWER_ASSET_UPLOAD_H
|
||||
#define LL_VIEWER_ASSET_UPLOAD_H
|
||||
|
||||
#include "llfoldertype.h"
|
||||
#include "llassettype.h"
|
||||
#include "llinventorytype.h"
|
||||
#include "lleventcoro.h"
|
||||
#include "llcoros.h"
|
||||
#include "llcorehttputil.h"
|
||||
|
||||
#include "llviewermenufile.h"
|
||||
|
||||
class LLViewerAssetUpload
|
||||
{
|
||||
public:
|
||||
|
||||
static void AssetInventoryUploadCoproc(LLCoros::self &self, LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter, const LLUUID &id,
|
||||
std::string url, NewResourceUploadInfo::ptr_t uploadInfo);
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // !VIEWER_ASSET_UPLOAD_H
|
||||
|
|
@ -62,6 +62,8 @@
|
|||
#include "lluploaddialog.h"
|
||||
#include "lltrans.h"
|
||||
#include "llfloaterbuycurrency.h"
|
||||
#include "llcoproceduremanager.h"
|
||||
#include "llviewerassetupload.h"
|
||||
|
||||
// linden libraries
|
||||
#include "llassetuploadresponders.h"
|
||||
|
|
@ -621,6 +623,7 @@ void handle_compress_image(void*)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
LLUUID upload_new_resource(
|
||||
const std::string& src_filename,
|
||||
std::string name,
|
||||
|
|
@ -704,123 +707,6 @@ LLUUID upload_new_resource(
|
|||
return LLUUID();
|
||||
}
|
||||
}
|
||||
else if(exten == "tmp")
|
||||
{
|
||||
// This is a generic .lin resource file
|
||||
asset_type = LLAssetType::AT_OBJECT;
|
||||
LLFILE* in = LLFile::fopen(src_filename, "rb"); /* Flawfinder: ignore */
|
||||
if (in)
|
||||
{
|
||||
// read in the file header
|
||||
char buf[16384]; /* Flawfinder: ignore */
|
||||
size_t readbytes;
|
||||
S32 version;
|
||||
if (fscanf(in, "LindenResource\nversion %d\n", &version))
|
||||
{
|
||||
if (2 == version)
|
||||
{
|
||||
// *NOTE: This buffer size is hard coded into scanf() below.
|
||||
char label[MAX_STRING]; /* Flawfinder: ignore */
|
||||
char value[MAX_STRING]; /* Flawfinder: ignore */
|
||||
S32 tokens_read;
|
||||
while (fgets(buf, 1024, in))
|
||||
{
|
||||
label[0] = '\0';
|
||||
value[0] = '\0';
|
||||
tokens_read = sscanf( /* Flawfinder: ignore */
|
||||
buf,
|
||||
"%254s %254s\n",
|
||||
label, value);
|
||||
|
||||
LL_INFOS() << "got: " << label << " = " << value
|
||||
<< LL_ENDL;
|
||||
|
||||
if (EOF == tokens_read)
|
||||
{
|
||||
fclose(in);
|
||||
error_message = llformat("corrupt resource file: %s", src_filename.c_str());
|
||||
args["FILE"] = src_filename;
|
||||
upload_error(error_message, "CorruptResourceFile", filename, args);
|
||||
return LLUUID();
|
||||
}
|
||||
|
||||
if (2 == tokens_read)
|
||||
{
|
||||
if (! strcmp("type", label))
|
||||
{
|
||||
asset_type = (LLAssetType::EType)(atoi(value));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! strcmp("_DATA_", label))
|
||||
{
|
||||
// below is the data section
|
||||
break;
|
||||
}
|
||||
}
|
||||
// other values are currently discarded
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
fclose(in);
|
||||
error_message = llformat("unknown linden resource file version in file: %s", src_filename.c_str());
|
||||
args["FILE"] = src_filename;
|
||||
upload_error(error_message, "UnknownResourceFileVersion", filename, args);
|
||||
return LLUUID();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// this is an original binary formatted .lin file
|
||||
// start over at the beginning of the file
|
||||
fseek(in, 0, SEEK_SET);
|
||||
|
||||
const S32 MAX_ASSET_DESCRIPTION_LENGTH = 256;
|
||||
const S32 MAX_ASSET_NAME_LENGTH = 64;
|
||||
S32 header_size = 34 + MAX_ASSET_DESCRIPTION_LENGTH + MAX_ASSET_NAME_LENGTH;
|
||||
S16 type_num;
|
||||
|
||||
// read in and throw out most of the header except for the type
|
||||
if (fread(buf, header_size, 1, in) != 1)
|
||||
{
|
||||
LL_WARNS() << "Short read" << LL_ENDL;
|
||||
}
|
||||
memcpy(&type_num, buf + 16, sizeof(S16)); /* Flawfinder: ignore */
|
||||
asset_type = (LLAssetType::EType)type_num;
|
||||
}
|
||||
|
||||
// copy the file's data segment into another file for uploading
|
||||
LLFILE* out = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */
|
||||
if (out)
|
||||
{
|
||||
while((readbytes = fread(buf, 1, 16384, in))) /* Flawfinder: ignore */
|
||||
{
|
||||
if (fwrite(buf, 1, readbytes, out) != readbytes)
|
||||
{
|
||||
LL_WARNS() << "Short write" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
fclose(out);
|
||||
}
|
||||
else
|
||||
{
|
||||
fclose(in);
|
||||
error_message = llformat( "Unable to create output file: %s", filename.c_str());
|
||||
args["FILE"] = filename;
|
||||
upload_error(error_message, "UnableToCreateOutputFile", filename, args);
|
||||
return LLUUID();
|
||||
}
|
||||
|
||||
fclose(in);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_INFOS() << "Couldn't open .lin file " << src_filename << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else if (exten == "bvh")
|
||||
{
|
||||
error_message = llformat("We do not currently support bulk upload of animation files\n");
|
||||
|
|
@ -876,6 +762,17 @@ LLUUID upload_new_resource(
|
|||
{
|
||||
t_disp_name = src_filename;
|
||||
}
|
||||
|
||||
#if 1
|
||||
NewResourceUploadInfo::ptr_t uploadInfo(new NewResourceUploadInfo(
|
||||
name, desc, compression_info,
|
||||
destination_folder_type, inv_type,
|
||||
next_owner_perms, group_perms, everyone_perms,
|
||||
display_name, expected_upload_cost));
|
||||
|
||||
upload_new_resource(tid, asset_type, uploadInfo,
|
||||
callback, userdata);
|
||||
#else
|
||||
upload_new_resource(
|
||||
tid,
|
||||
asset_type,
|
||||
|
|
@ -891,6 +788,7 @@ LLUUID upload_new_resource(
|
|||
callback,
|
||||
expected_upload_cost,
|
||||
userdata);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1035,6 +933,7 @@ void upload_done_callback(
|
|||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
static LLAssetID upload_new_resource_prep(
|
||||
const LLTransactionID& tid,
|
||||
LLAssetType::EType asset_type,
|
||||
|
|
@ -1056,7 +955,9 @@ static LLAssetID upload_new_resource_prep(
|
|||
|
||||
return uuid;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
LLSD generate_new_resource_upload_capability_body(
|
||||
LLAssetType::EType asset_type,
|
||||
const std::string& name,
|
||||
|
|
@ -1084,140 +985,81 @@ LLSD generate_new_resource_upload_capability_body(
|
|||
|
||||
return body;
|
||||
}
|
||||
#endif
|
||||
|
||||
void upload_new_resource(
|
||||
const LLTransactionID &tid,
|
||||
LLAssetType::EType asset_type,
|
||||
std::string name,
|
||||
std::string desc,
|
||||
S32 compression_info,
|
||||
LLFolderType::EType destination_folder_type,
|
||||
LLInventoryType::EType inv_type,
|
||||
U32 next_owner_perms,
|
||||
U32 group_perms,
|
||||
U32 everyone_perms,
|
||||
const std::string& display_name,
|
||||
LLAssetStorage::LLStoreAssetCallback callback,
|
||||
S32 expected_upload_cost,
|
||||
void *userdata)
|
||||
const LLTransactionID &tid,
|
||||
LLAssetType::EType assetType,
|
||||
NewResourceUploadInfo::ptr_t &uploadInfo,
|
||||
LLAssetStorage::LLStoreAssetCallback callback,
|
||||
void *userdata)
|
||||
{
|
||||
if(gDisconnected)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
LLAssetID uuid =
|
||||
upload_new_resource_prep(
|
||||
tid,
|
||||
asset_type,
|
||||
inv_type,
|
||||
name,
|
||||
display_name,
|
||||
desc);
|
||||
|
||||
if( LLAssetType::AT_SOUND == asset_type )
|
||||
{
|
||||
add(LLStatViewer::UPLOAD_SOUND, 1);
|
||||
}
|
||||
else
|
||||
if( LLAssetType::AT_TEXTURE == asset_type )
|
||||
{
|
||||
add(LLStatViewer::UPLOAD_TEXTURE, 1);
|
||||
}
|
||||
else
|
||||
if( LLAssetType::AT_ANIMATION == asset_type)
|
||||
{
|
||||
add(LLStatViewer::ANIMATION_UPLOADS, 1);
|
||||
}
|
||||
|
||||
if(LLInventoryType::IT_NONE == inv_type)
|
||||
{
|
||||
inv_type = LLInventoryType::defaultForAssetType(asset_type);
|
||||
}
|
||||
LLStringUtil::stripNonprintable(name);
|
||||
LLStringUtil::stripNonprintable(desc);
|
||||
if(name.empty())
|
||||
{
|
||||
name = "(No Name)";
|
||||
}
|
||||
if(desc.empty())
|
||||
{
|
||||
desc = "(No Description)";
|
||||
}
|
||||
|
||||
// At this point, we're ready for the upload.
|
||||
std::string upload_message = "Uploading...\n\n";
|
||||
upload_message.append(display_name);
|
||||
LLUploadDialog::modalUploadDialog(upload_message);
|
||||
uploadInfo->setAssetType(assetType);
|
||||
uploadInfo->setTransactionId(tid);
|
||||
|
||||
LL_INFOS() << "*** Uploading: " << LL_ENDL;
|
||||
LL_INFOS() << "Type: " << LLAssetType::lookup(asset_type) << LL_ENDL;
|
||||
LL_INFOS() << "UUID: " << uuid << LL_ENDL;
|
||||
LL_INFOS() << "Name: " << name << LL_ENDL;
|
||||
LL_INFOS() << "Desc: " << desc << LL_ENDL;
|
||||
LL_INFOS() << "Expected Upload Cost: " << expected_upload_cost << LL_ENDL;
|
||||
LL_DEBUGS() << "Folder: " << gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type) << LL_ENDL;
|
||||
LL_DEBUGS() << "Asset Type: " << LLAssetType::lookup(asset_type) << LL_ENDL;
|
||||
|
||||
std::string url = gAgent.getRegion()->getCapability(
|
||||
"NewFileAgentInventory");
|
||||
std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory");
|
||||
|
||||
if ( !url.empty() )
|
||||
{
|
||||
LL_INFOS() << "New Agent Inventory via capability" << LL_ENDL;
|
||||
LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLViewerAssetUpload::AssetInventoryUploadCoproc, _1, _2, _3, url, uploadInfo);
|
||||
|
||||
LLSD body;
|
||||
body = generate_new_resource_upload_capability_body(
|
||||
asset_type,
|
||||
name,
|
||||
desc,
|
||||
destination_folder_type,
|
||||
inv_type,
|
||||
next_owner_perms,
|
||||
group_perms,
|
||||
everyone_perms);
|
||||
|
||||
LLHTTPClient::post(
|
||||
url,
|
||||
body,
|
||||
new LLNewAgentInventoryResponder(
|
||||
body,
|
||||
uuid,
|
||||
asset_type));
|
||||
LLCoprocedureManager::getInstance()->enqueueCoprocedure("LLViewerAssetUpload::AssetInventoryUploadCoproc", proc);
|
||||
// LL_INFOS() << "New Agent Inventory via capability" << LL_ENDL;
|
||||
// uploadInfo->prepareUpload();
|
||||
// uploadInfo->logPreparedUpload();
|
||||
//
|
||||
// LLSD body = uploadInfo->generatePostBody();
|
||||
//
|
||||
// LLHTTPClient::post(
|
||||
// url,
|
||||
// body,
|
||||
// new LLNewAgentInventoryResponder(
|
||||
// body,
|
||||
// uploadInfo->getAssetId(),
|
||||
// assetType));
|
||||
}
|
||||
else
|
||||
{
|
||||
uploadInfo->prepareUpload();
|
||||
uploadInfo->logPreparedUpload();
|
||||
|
||||
LL_INFOS() << "NewAgentInventory capability not found, new agent inventory via asset system." << LL_ENDL;
|
||||
// check for adequate funds
|
||||
// TODO: do this check on the sim
|
||||
if (LLAssetType::AT_SOUND == asset_type ||
|
||||
LLAssetType::AT_TEXTURE == asset_type ||
|
||||
LLAssetType::AT_ANIMATION == asset_type)
|
||||
if (LLAssetType::AT_SOUND == assetType ||
|
||||
LLAssetType::AT_TEXTURE == assetType ||
|
||||
LLAssetType::AT_ANIMATION == assetType)
|
||||
{
|
||||
S32 balance = gStatusBar->getBalance();
|
||||
if (balance < expected_upload_cost)
|
||||
if (balance < uploadInfo->getExpectedUploadCost())
|
||||
{
|
||||
// insufficient funds, bail on this upload
|
||||
LLStringUtil::format_map_t args;
|
||||
args["NAME"] = name;
|
||||
args["AMOUNT"] = llformat("%d", expected_upload_cost);
|
||||
LLBuyCurrencyHTML::openCurrencyFloater( LLTrans::getString("UploadingCosts", args), expected_upload_cost );
|
||||
args["NAME"] = uploadInfo->getName();
|
||||
args["AMOUNT"] = llformat("%d", uploadInfo->getExpectedUploadCost());
|
||||
LLBuyCurrencyHTML::openCurrencyFloater(LLTrans::getString("UploadingCosts", args), uploadInfo->getExpectedUploadCost());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
LLResourceData* data = new LLResourceData;
|
||||
data->mAssetInfo.mTransactionID = tid;
|
||||
data->mAssetInfo.mUuid = uuid;
|
||||
data->mAssetInfo.mType = asset_type;
|
||||
data->mAssetInfo.mUuid = uploadInfo->getAssetId();
|
||||
data->mAssetInfo.mType = assetType;
|
||||
data->mAssetInfo.mCreatorID = gAgentID;
|
||||
data->mInventoryType = inv_type;
|
||||
data->mNextOwnerPerm = next_owner_perms;
|
||||
data->mExpectedUploadCost = expected_upload_cost;
|
||||
data->mInventoryType = uploadInfo->getInventoryType();
|
||||
data->mNextOwnerPerm = uploadInfo->getNextOwnerPerms();
|
||||
data->mExpectedUploadCost = uploadInfo->getExpectedUploadCost();
|
||||
data->mUserData = userdata;
|
||||
data->mAssetInfo.setName(name);
|
||||
data->mAssetInfo.setDescription(desc);
|
||||
data->mPreferredLocation = destination_folder_type;
|
||||
data->mAssetInfo.setName(uploadInfo->getName());
|
||||
data->mAssetInfo.setDescription(uploadInfo->getDescription());
|
||||
data->mPreferredLocation = uploadInfo->getDestinationFolderType();
|
||||
|
||||
LLAssetStorage::LLStoreAssetCallback asset_callback = &upload_done_callback;
|
||||
if (callback)
|
||||
|
|
@ -1233,6 +1075,7 @@ void upload_new_resource(
|
|||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid)
|
||||
{
|
||||
if ( gDisconnected )
|
||||
|
|
@ -1292,6 +1135,7 @@ void assign_defaults_and_show_upload_message(
|
|||
upload_message.append(display_name);
|
||||
LLUploadDialog::modalUploadDialog(upload_message);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void init_menu_file()
|
||||
|
|
@ -1315,3 +1159,107 @@ void init_menu_file()
|
|||
|
||||
// "File.SaveTexture" moved to llpanelmaininventory so that it can be properly handled.
|
||||
}
|
||||
|
||||
LLAssetID NewResourceUploadInfo::prepareUpload()
|
||||
{
|
||||
LLAssetID uuid = generateNewAssetId();
|
||||
|
||||
incrementUploadStats();
|
||||
assignDefaults();
|
||||
|
||||
return uuid;
|
||||
}
|
||||
|
||||
std::string NewResourceUploadInfo::getAssetTypeString() const
|
||||
{
|
||||
return LLAssetType::lookup(mAssetType);
|
||||
}
|
||||
|
||||
std::string NewResourceUploadInfo::getInventoryTypeString() const
|
||||
{
|
||||
return LLInventoryType::lookup(mInventoryType);
|
||||
}
|
||||
|
||||
LLSD NewResourceUploadInfo::generatePostBody()
|
||||
{
|
||||
LLSD body;
|
||||
|
||||
body["folder_id"] = mFolderId;
|
||||
body["asset_type"] = getAssetTypeString();
|
||||
body["inventory_type"] = getInventoryTypeString();
|
||||
body["name"] = mName;
|
||||
body["description"] = mDescription;
|
||||
body["next_owner_mask"] = LLSD::Integer(mNextOwnerPerms);
|
||||
body["group_mask"] = LLSD::Integer(mGroupPerms);
|
||||
body["everyone_mask"] = LLSD::Integer(mEveryonePerms);
|
||||
|
||||
return body;
|
||||
|
||||
}
|
||||
|
||||
void NewResourceUploadInfo::logPreparedUpload()
|
||||
{
|
||||
LL_INFOS() << "*** Uploading: " << std::endl <<
|
||||
"Type: " << LLAssetType::lookup(mAssetType) << std::endl <<
|
||||
"UUID: " << mAssetId.asString() << std::endl <<
|
||||
"Name: " << mName << std::endl <<
|
||||
"Desc: " << mDescription << std::endl <<
|
||||
"Expected Upload Cost: " << mExpectedUploadCost << std::endl <<
|
||||
"Folder: " << mFolderId << std::endl <<
|
||||
"Asset Type: " << LLAssetType::lookup(mAssetType) << LL_ENDL;
|
||||
}
|
||||
|
||||
LLAssetID NewResourceUploadInfo::generateNewAssetId()
|
||||
{
|
||||
if (gDisconnected)
|
||||
{
|
||||
LLAssetID rv;
|
||||
|
||||
rv.setNull();
|
||||
return rv;
|
||||
}
|
||||
mAssetId = mTransactionId.makeAssetID(gAgent.getSecureSessionID());
|
||||
|
||||
return mAssetId;
|
||||
}
|
||||
|
||||
void NewResourceUploadInfo::incrementUploadStats() const
|
||||
{
|
||||
if (LLAssetType::AT_SOUND == mAssetType)
|
||||
{
|
||||
add(LLStatViewer::UPLOAD_SOUND, 1);
|
||||
}
|
||||
else if (LLAssetType::AT_TEXTURE == mAssetType)
|
||||
{
|
||||
add(LLStatViewer::UPLOAD_TEXTURE, 1);
|
||||
}
|
||||
else if (LLAssetType::AT_ANIMATION == mAssetType)
|
||||
{
|
||||
add(LLStatViewer::ANIMATION_UPLOADS, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void NewResourceUploadInfo::assignDefaults()
|
||||
{
|
||||
if (LLInventoryType::IT_NONE == mInventoryType)
|
||||
{
|
||||
mInventoryType = LLInventoryType::defaultForAssetType(mAssetType);
|
||||
}
|
||||
LLStringUtil::stripNonprintable(mName);
|
||||
LLStringUtil::stripNonprintable(mDescription);
|
||||
|
||||
if (mName.empty())
|
||||
{
|
||||
mName = "(No Name)";
|
||||
}
|
||||
if (mDescription.empty())
|
||||
{
|
||||
mDescription = "(No Description)";
|
||||
}
|
||||
|
||||
mFolderId = gInventory.findCategoryUUIDForType(
|
||||
(mDestinationFolderType == LLFolderType::FT_NONE) ?
|
||||
(LLFolderType::EType)mAssetType : mDestinationFolderType);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,20 +39,126 @@ class LLTransactionID;
|
|||
|
||||
void init_menu_file();
|
||||
|
||||
#if 1
|
||||
class NewResourceUploadInfo
|
||||
{
|
||||
public:
|
||||
typedef boost::shared_ptr<NewResourceUploadInfo> ptr_t;
|
||||
|
||||
NewResourceUploadInfo(std::string name,
|
||||
std::string description,
|
||||
S32 compressionInfo,
|
||||
LLFolderType::EType destinationType,
|
||||
LLInventoryType::EType inventoryType,
|
||||
U32 nextOWnerPerms,
|
||||
U32 groupPerms,
|
||||
U32 everyonePerms,
|
||||
std::string displayName,
|
||||
S32 expectedCost) :
|
||||
mName(name),
|
||||
mDescription(description),
|
||||
mDisplayName(displayName),
|
||||
mCompressionInfo(compressionInfo),
|
||||
mNextOwnerPerms(nextOWnerPerms),
|
||||
mGroupPerms(mGroupPerms),
|
||||
mEveryonePerms(mEveryonePerms),
|
||||
mExpectedUploadCost(expectedCost),
|
||||
mInventoryType(inventoryType),
|
||||
mDestinationFolderType(destinationType)
|
||||
{ }
|
||||
|
||||
virtual ~NewResourceUploadInfo()
|
||||
{ }
|
||||
|
||||
virtual LLAssetID prepareUpload();
|
||||
virtual LLSD generatePostBody();
|
||||
virtual void logPreparedUpload();
|
||||
|
||||
void setAssetType(LLAssetType::EType assetType) { mAssetType = assetType; }
|
||||
LLAssetType::EType getAssetType() const { return mAssetType; }
|
||||
std::string getAssetTypeString() const;
|
||||
void setTransactionId(LLTransactionID transactionId) { mTransactionId = transactionId; }
|
||||
LLTransactionID getTransactionId() const { return mTransactionId; }
|
||||
LLUUID getFolderId() const { return mFolderId; }
|
||||
|
||||
LLAssetID getAssetId() const { return mAssetId; }
|
||||
|
||||
std::string getName() const { return mName; };
|
||||
std::string getDescription() const { return mDescription; };
|
||||
std::string getDisplayName() const { return mDisplayName; };
|
||||
S32 getCompressionInfo() const { return mCompressionInfo; };
|
||||
U32 getNextOwnerPerms() const { return mNextOwnerPerms; };
|
||||
U32 getGroupPerms() const { return mGroupPerms; };
|
||||
U32 getEveryonePerms() const { return mEveryonePerms; };
|
||||
S32 getExpectedUploadCost() const { return mExpectedUploadCost; };
|
||||
LLInventoryType::EType getInventoryType() const { return mInventoryType; };
|
||||
std::string getInventoryTypeString() const;
|
||||
|
||||
LLFolderType::EType getDestinationFolderType() const { return mDestinationFolderType; };
|
||||
|
||||
protected:
|
||||
LLAssetID generateNewAssetId();
|
||||
void incrementUploadStats() const;
|
||||
virtual void assignDefaults();
|
||||
|
||||
private:
|
||||
LLAssetType::EType mAssetType;
|
||||
std::string mName;
|
||||
std::string mDescription;
|
||||
std::string mDisplayName;
|
||||
S32 mCompressionInfo;
|
||||
U32 mNextOwnerPerms;
|
||||
U32 mGroupPerms;
|
||||
U32 mEveryonePerms;
|
||||
S32 mExpectedUploadCost;
|
||||
LLUUID mFolderId;
|
||||
|
||||
LLInventoryType::EType mInventoryType;
|
||||
LLFolderType::EType mDestinationFolderType;
|
||||
|
||||
LLAssetID mAssetId;
|
||||
LLTransactionID mTransactionId;
|
||||
};
|
||||
|
||||
|
||||
LLUUID upload_new_resource(
|
||||
const std::string& src_filename,
|
||||
std::string name,
|
||||
std::string desc,
|
||||
S32 compression_info,
|
||||
LLFolderType::EType destination_folder_type,
|
||||
LLInventoryType::EType inv_type,
|
||||
U32 next_owner_perms,
|
||||
U32 group_perms,
|
||||
U32 everyone_perms,
|
||||
const std::string& display_name,
|
||||
LLAssetStorage::LLStoreAssetCallback callback,
|
||||
S32 expected_upload_cost,
|
||||
void *userdata);
|
||||
const std::string& src_filename,
|
||||
std::string name,
|
||||
std::string desc,
|
||||
S32 compression_info,
|
||||
LLFolderType::EType destination_folder_type,
|
||||
LLInventoryType::EType inv_type,
|
||||
U32 next_owner_perms,
|
||||
U32 group_perms,
|
||||
U32 everyone_perms,
|
||||
const std::string& display_name,
|
||||
LLAssetStorage::LLStoreAssetCallback callback,
|
||||
S32 expected_upload_cost,
|
||||
void *userdata);
|
||||
|
||||
void upload_new_resource(
|
||||
const LLTransactionID &tid,
|
||||
LLAssetType::EType type,
|
||||
NewResourceUploadInfo::ptr_t &uploadInfo,
|
||||
LLAssetStorage::LLStoreAssetCallback callback = NULL,
|
||||
void *userdata = NULL);
|
||||
|
||||
|
||||
#else
|
||||
LLUUID upload_new_resource(
|
||||
const std::string& src_filename,
|
||||
std::string name,
|
||||
std::string desc,
|
||||
S32 compression_info,
|
||||
LLFolderType::EType destination_folder_type,
|
||||
LLInventoryType::EType inv_type,
|
||||
U32 next_owner_perms,
|
||||
U32 group_perms,
|
||||
U32 everyone_perms,
|
||||
const std::string& display_name,
|
||||
LLAssetStorage::LLStoreAssetCallback callback,
|
||||
S32 expected_upload_cost,
|
||||
void *userdata);
|
||||
|
||||
void upload_new_resource(
|
||||
const LLTransactionID &tid,
|
||||
|
|
@ -70,9 +176,9 @@ void upload_new_resource(
|
|||
S32 expected_upload_cost,
|
||||
void *userdata);
|
||||
|
||||
|
||||
LLAssetID generate_asset_id_for_new_upload(const LLTransactionID& tid);
|
||||
void increase_new_upload_stats(LLAssetType::EType asset_type);
|
||||
#endif
|
||||
void assign_defaults_and_show_upload_message(
|
||||
LLAssetType::EType asset_type,
|
||||
LLInventoryType::EType& inventory_type,
|
||||
|
|
@ -80,6 +186,7 @@ void assign_defaults_and_show_upload_message(
|
|||
const std::string& display_name,
|
||||
std::string& description);
|
||||
|
||||
#if 0
|
||||
LLSD generate_new_resource_upload_capability_body(
|
||||
LLAssetType::EType asset_type,
|
||||
const std::string& name,
|
||||
|
|
@ -89,6 +196,7 @@ LLSD generate_new_resource_upload_capability_body(
|
|||
U32 next_owner_perms,
|
||||
U32 group_perms,
|
||||
U32 everyone_perms);
|
||||
#endif
|
||||
|
||||
void on_new_single_inventory_upload_complete(
|
||||
LLAssetType::EType asset_type,
|
||||
|
|
|
|||
Loading…
Reference in New Issue