mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 21:17:03 +00:00
165 lines
4.7 KiB
JavaScript
165 lines
4.7 KiB
JavaScript
/*
|
|
* CFError.js
|
|
* Objective-J
|
|
*
|
|
* Created by Andrew Hankinson.
|
|
* Copyright 2014, Andrew Hankinson.
|
|
*
|
|
* 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.
|
|
*
|
|
* 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
|
|
*/
|
|
|
|
GLOBAL(kCFErrorLocalizedDescriptionKey) = "CPLocalizedDescription";
|
|
GLOBAL(kCFErrorLocalizedFailureReasonKey) = "CPLocalizedFailureReason";
|
|
GLOBAL(kCFErrorLocalizedRecoverySuggestionKey) = "CPLocalizedRecoverySuggestion";
|
|
GLOBAL(kCFErrorDescriptionKey) = "CPDescription";
|
|
GLOBAL(kCFErrorUnderlyingErrorKey) = "CPUnderlyingError";
|
|
|
|
GLOBAL(kCFErrorURLKey) = "CPURL";
|
|
GLOBAL(kCFErrorFilePathKey) = "CPFilePath";
|
|
|
|
// GLOBAL(kCFErrorDomainPOSIX) = "";
|
|
// GLOBAL(kCFErrorDomainOSStatus) = "";
|
|
// GLOBAL(kCFErrorDomainMach) = "";
|
|
GLOBAL(kCFErrorDomainCappuccino) = "CPCappuccinoErrorDomain";
|
|
GLOBAL(kCFErrorDomainCocoa) = kCFErrorDomainCappuccino;
|
|
|
|
|
|
GLOBAL(CFError) = function(/* CFString */ domain, /* int */ code, /* CFDictionary */ userInfo)
|
|
{
|
|
this._domain = domain || NULL;
|
|
this._code = code || 0;
|
|
this._userInfo = userInfo || new CFDictionary();
|
|
this._UID = objj_generateObjectUID();
|
|
};
|
|
|
|
CFError.prototype.domain = function()
|
|
{
|
|
return this._domain;
|
|
};
|
|
|
|
DISPLAY_NAME(CFError.prototype.domain);
|
|
|
|
CFError.prototype.code = function()
|
|
{
|
|
return this._code;
|
|
};
|
|
|
|
DISPLAY_NAME(CFError.prototype.code);
|
|
|
|
/*
|
|
This follows the same logic to generate a description as the "real" CFError.
|
|
*/
|
|
CFError.prototype.description = function()
|
|
{
|
|
var localizedDesc = this._userInfo.valueForKey(kCFErrorLocalizedDescriptionKey);
|
|
if (localizedDesc)
|
|
return localizedDesc;
|
|
|
|
var reason = this._userInfo.valueForKey(kCFErrorLocalizedFailureReasonKey);
|
|
if (reason)
|
|
{
|
|
var operationFailedStr = "The operation couldn\u2019t be completed. " + reason;
|
|
return operationFailedStr;
|
|
}
|
|
|
|
// @TODO Add the bundle localized domain handler.
|
|
var result = "",
|
|
desc = this._userInfo.valueForKey(kCFErrorDescriptionKey);
|
|
if (desc)
|
|
{
|
|
// we have a description key.
|
|
var result = "The operation couldn\u2019t be completed. (error " + this._code + " - " + desc + ")";
|
|
}
|
|
else
|
|
{
|
|
// just use error and code;
|
|
var result = "The operation couldn\u2019t be completed. (error " + this._code + ")";
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
DISPLAY_NAME(CFError.prototype.description);
|
|
|
|
CFError.prototype.failureReason = function()
|
|
{
|
|
return this._userInfo.valueForKey(kCFErrorLocalizedFailureReasonKey);
|
|
};
|
|
|
|
DISPLAY_NAME(CFError.prototype.failureReason);
|
|
|
|
CFError.prototype.recoverySuggestion = function()
|
|
{
|
|
return this._userInfo.valueForKey(kCFErrorLocalizedRecoverySuggestionKey);
|
|
};
|
|
|
|
DISPLAY_NAME(CFError.prototype.recoverySuggestion);
|
|
|
|
CFError.prototype.userInfo = function ()
|
|
{
|
|
return this._userInfo;
|
|
};
|
|
|
|
DISPLAY_NAME(CFError.prototype.userInfo);
|
|
|
|
/*
|
|
CFError Bridge Functions
|
|
The "Create" and "Copy" in the function names do not have any meaning
|
|
in Cappuccino; they are bridged here for compatibility reasons only.
|
|
*/
|
|
GLOBAL(CFErrorCreate) = function(/* String */ domain, /*int */ code, /* CFDictionary */ userInfo)
|
|
{
|
|
return new CFError(domain, code, userInfo);
|
|
};
|
|
|
|
GLOBAL(CFErrorCreateWithUserInfoKeysAndValues) = function(/* String */ domain, /* int */ code, /* array */ userInfoKeys, /* array */ userInfoValues, /* int */ numUserInfoValues)
|
|
{
|
|
var userInfo = new CFMutableDictionary();
|
|
while (numUserInfoValues--)
|
|
userInfo.setValueForKey(userInfoKeys[numUserInfoValues], userInfoValues[numUserInfoValues]);
|
|
|
|
return new CFError(domain, code, userInfo);
|
|
};
|
|
|
|
GLOBAL(CFErrorGetCode) = function(/* CFError */ err)
|
|
{
|
|
return err.code();
|
|
};
|
|
|
|
GLOBAL(CFErrorGetDomain) = function(/* CFError */ err)
|
|
{
|
|
return err.domain();
|
|
};
|
|
|
|
GLOBAL(CFErrorCopyDescription) = function(/* CFError */ err)
|
|
{
|
|
return err.description();
|
|
};
|
|
|
|
GLOBAL(CFErrorCopyUserInfo) = function(/* CFError */ err)
|
|
{
|
|
return err.userInfo();
|
|
};
|
|
|
|
GLOBAL(CFErrorCopyFailureReason) = function(/* CFError */ err)
|
|
{
|
|
return err.failureReason();
|
|
};
|
|
|
|
GLOBAL(CFErrorCopyRecoverySuggestion) = function(/* CFError */err)
|
|
{
|
|
return err.recoverySuggestion();
|
|
};
|