API_HotlinkCacheGenerator
핫링크 캐시의 업데이트된 내용을 생성하기 위한 베이스 클래스입니다.
class API_HotlinkCacheGenerator {
public:
virtual ~API_HotlinkCacheGenerator () {};
virtual GSErrCode GenerateCacheContentForHotlinkNode (const API_Guid &hotlinkNodeGuid) = 0;
};
설명
애드온에 의해 핫링크 노트가 생성될 때, 핫링크 캐시의 내용 역시 생성되어야 합니다.
캐시 데이터베이스에 적절한 요소들과 속성들을 생성하기 위해, API_HotlinkCacheGenerator 객체를 APIDb_UpdateHotlinkCacheID 함수에 전달해야 합니다.
객체의 GenerateCacheContentForHotlinkNode 메서드가 핫링크 업데이트 함수로부터 콜백되었을 때,
(ACAPI_Element_Create와 ACAPI_Attribute_Create 같은)
표준 요소 및 속성 생성자 함수들은 프로젝트 데이터베이스가 아닌 핫링크 캐시 데이터베이스에 요소들과 속성들을 생성하기 위해 리디렉션됩니다.
만약 GenerateCacheContentForHotlinkNode 함수가 오류를 리턴하면, 업데이트 프로세스는 취소됩니다.
예제
class HotlinkCacheGenerator: public API_HotlinkCacheGenerator {
public:
virtual GSErrCode GenerateCacheContentForHotlinkNode (const API_Guid& hotlinkNodeGuid)
{
API_HotlinkNode hotlinkNode;
BNZeroMemory (&hotlinkNode, sizeof (API_HotlinkNode));
hotlinkNode.guid = hotlinkNodeGuid;
GSErrCode err = ACAPI_Database (APIDb_GetHotlinkNodeID, &hotlinkNode);
if (err == NoError && hotlinkNode.sourceLocation != NULL) {
IO::File sourceFile (*hotlinkNode.sourceLocation);
err = sourceFile.GetStatus ();
if (err == NoError) {
// 파일을 읽고 캐시 데이터베이스에 요소들과 속성들을 작성합니다.
}
}
if (hotlinkNode.sourceLocation != NULL)
delete hotlinkNode.sourceLocation;
if (hotlinkNode.userData.data != NULL)
BMKillPtr (&hotlinkNode.userData.data);
return err;
}
} hotlinkCacheGenerator;
GS::HashSet<API_Guid> alreadyUpdatedNodes;
GS::Array<API_Guid> elemList;
ACAPI_Element_GetElemList (API_HotlinkID, &elemList);
for (GS::Array<API_Guid>::ConstIterator it = elemList.Enumerate (); it != NULL; ++it) {
API_Element hotlinkElem;
BNZeroMemory (&hotlinkElem, sizeof (API_Element));
hotlinkElem.header.guid = *it;
if (ACAPI_Element_Get (&hotlinkElem) == NoError) {
if (!alreadyUpdatedNodes.Contains (hotlinkElem.hotlink.hotlinkNodeGuid)) {
ACAPI_Database (APIDb_UpdateHotlinkCacheID, &hotlinkElem.hotlink.hotlinkNodeGuid, &hotlinkCacheGenerator);
alreadyUpdatedNodes.Add (hotlinkElem.hotlink.hotlinkNodeGuid);
}
}
}
요구사항
- 버전: API 12 또는 이후
- 헤더: APIdefs_Database.h