/**********************************************************************
This script is provided as part of the Daz Script Documentation. The
contents of this script, and\or any portion thereof, may only be used
in accordance with the following license:
Creative Commons Attribution 3.0 Unported (CC BY 3.0)
- http://creativecommons.org/licenses/by/3.0
To contact Daz 3D or for more information about Daz Script visit the
Daz 3D website:
- http://www.daz3d.com
**********************************************************************/
// Source: /public/software/dazstudio/4/referenceguide/scripting/api_reference/samples/metadata/get_store_product_data/start
// Define an anonymous function;
// serves as our main loop,
// limits the scope of variables
(function(){
/*********************************************************************/
// String : A function for retrieving a translation if one exists
function text( sText )
{
// If the version of the application supports qsTr()
if( typeof( qsTr ) != "undefined" ){
// Return the translated (if any) text
return qsTr( sText );
}
// Return the original text
return sText;
};
/*********************************************************************/
// Boolean : A function for determining if an object has a named member
function hasMember( oObject, sMember, sType )
{
// Return whether or not the object has a function with the name
return typeof( oObject[ sMember ] ) == sType;
};
/*********************************************************************/
// Boolean : A function for determining if an object has a named function
function hasFunction( oObject, sFunction )
{
// Return whether or not the object has a function with the name
return hasMember( oObject, sFunction, "function" );
};
/*********************************************************************/
// Object : A function for retrieving product data for a given SKU
function getProductDataFromStore( nIdx )
{
// Create a http helper object
var oHttp = new DzHttpHelper();
// Use a secure connection for the request
oHttp.setConnectionMode( "https" );
// Set the host for the request
oHttp.setHost( "www.daz3d.com" );
// Set the path for the request
oHttp.setPath( String("/dazApi/slab/%1").argInt( nIdx ) );
// If the app version is older than 4.15.0.18
if( App.version64 < 0x0004000f00000012 ){
// Set the query string for the request to deal with
// an initialization issue in earlier builds
oHttp.setQueryString( "" );
}
// Set the content type for the request
oHttp.setContentType( "application/json" );
// Set the method for the request
oHttp.setRequestMethod( "GET" );
// Perform a syncronous request and capture the response
var bytesResponse = oHttp.doSynchronousRequest();
// Get whether or not there were errors
var sError = oHttp.getError();
// Declare working variable
var sResponse;
// If there were no errors
if( sError === "" ){
// Convert the response to a string
sResponse = hasFunction( bytesResponse, "convertToString" ) ?
bytesResponse.convertToString() : String( bytesResponse );
// If the response is not empty
if( !sResponse.isEmpty() ){
// Return the data parsed into an Object
return JSON.parse( sResponse );
}
// If there is an error
} else {
// Log it
print( sError );
}
// Return a "404" Object
return {
name: "404 - Not Found",
id: nIdx,
url: String( "/catalog/product/view/id/%1" ).argInt( nIdx )
};
};
/*********************************************************************/
// String : A function for getting a product URL for a given SKU
function getProductUrl( nIdx, bFriendly )
{
// If we want the "friendly" URL
if( bFriendly ){
// Get the product data from the store
var oProductData = getProductDataFromStore( nIdx );
// Define the property that holds the data we want
var sProperty = "url";
// If the product data contains what we want
if( oProductData.hasOwnProperty( sProperty ) ){
// Return the URL
return String( "https://www.daz3d.com%1" ).arg( oProductData[ sProperty ] );
}
}
// Return the raw product URL
return String( "https://www.daz3d.com/catalog/product/view/id/%1" ).argInt( nIdx );
};
/*********************************************************************/
// String : A function for getting and displaying product info for a given SKU
function displayProductData( nIdx )
{
// Get the product data from the store
var oProductData = getProductDataFromStore( nIdx );
// Create a basic dialog
var wDlg = new DzBasicDialog();
// Get the wrapped widget for the dialog
var oDlgWgt = wDlg.getWidget();
// Set the title of the dialog
wDlg.caption = "Product Data";
// Strip the space for a settings key
var sKey = wDlg.caption.replace( / /g, "" ) + "Dlg";
// Set an [unique] object name on the wrapped dialog widget;
// this is used for recording position and size separately
// from all other [uniquely named] DzBasicDialog instances
oDlgWgt.objectName = sKey;
// Initialize an array to collect lines
var aLines = [];
// Define the property that holds the data we want
var sProperty = "name";
// If the product data contains what we want
if( oProductData.hasOwnProperty( sProperty ) ){
// Append the information
aLines.push( String("Name: %1")
.arg( oProductData[ sProperty ] ) );
}
// Define the property that holds the data we want
sProperty = "id";
// If the product data contains what we want
if( oProductData.hasOwnProperty( sProperty ) ){
// Append the information
aLines.push( String("SKU: %1")
.arg( oProductData[ sProperty ] ) );
}
// Define the property that holds the data we want
sProperty = "url";
// If the product data contains what we want
if( oProductData.hasOwnProperty( sProperty ) ){
aLines.push( String("URL: " +
"https://www.daz3d.com%1")
.arg( oProductData[ sProperty ] ) );
}
// Define the property that holds the data we want
sProperty = "price";
// If the product data contains what we want
if( oProductData.hasOwnProperty( sProperty ) ){
// Append the information
aLines.push( String("Price: $%1")
.arg( oProductData[ sProperty ] ) );
}
// Define the property that holds the data we want
sProperty = "dazOriginal";
// If the product data contains what we want
if( oProductData.hasOwnProperty( sProperty ) ){
// Append the information
aLines.push( String("Daz Original: %1")
.arg( oProductData[ sProperty ] ? "Yes" : "No" ) );
}
// Define the property that holds the data we want
sProperty = "platClub";
// If the product data contains what we want
if( oProductData.hasOwnProperty( sProperty ) ){
// Append the information
aLines.push( String("Platinum Club: %1")
.arg( oProductData[ sProperty ] ? "Yes" : "No" ) );
}
// Initialize working variables
var bBytesBase64 = false;
var bHasImage = false;
// Define the property that holds the data we want
sProperty = "image";
// If the product data contains what we want
if( oProductData.hasOwnProperty( sProperty ) ){
// Get the base64 encoded image data
var bytesData = new ByteArray( oProductData[ sProperty ] );
// If the API for handling Base64 data in a ByteArray exists
if( typeof( bytesData.fromBase64 ) != "undefined" ){
// Update our flag
bBytesBase64 = true;
// Create a pixmap for the image
var pixProduct = new Pixmap();
// Load the image data into the pixmap
pixProduct.loadFromData( bytesData.fromBase64( bytesData ), "JPG" );
// Create a label and assign the pixmap
wLabel = new DzLabel( wDlg );
wLabel.pixmap = pixProduct;
// Add the label to the dialog
wDlg.addWidget( wLabel );
// If the API for handling Base64 data in a ByteArray does not exist
} else {
// Prepend a base64 encoded html image resource
aLines.unshift( String("" )
.arg( oProductData[ sProperty ] ) );
// Update our flag
bHasImage = true;
}
}
// If we had any of the data we were looking for
if( aLines.length > 0 ){
// Create a text browser
var wBrowser = new DzTextBrowser( wDlg );
// Set the text interaction flags
wBrowser.textInteractionFlags = DzWidget.TextBrowserInteraction;
// We want to ba able to click hyperlinks
wBrowser.openExternalLinks = true;
// Define the height of a line
var nLineHeight = 18;
// If we do not have the Base64 support on ByteArray
if( !bBytesBase64 && bHasImage ){
// Set the html contents
wBrowser.html = String("