char * CJaiku::GetIdFromJSON( const char *q, const char *terminator, char *presence ) { Thread static char id[MAX_KEYLENGTH * 2 + 2]; presence[0] = NUL; // "id" GetStringFromJSON( id, MAX_KEYLENGTH * 2, "\"id\"", q, terminator ); if ( id[0] == NUL ) { // "comment_id" GetStringFromJSON( id, MAX_KEYLENGTH * 2, "\"comment_id\"", q, terminator ); char url[MAX_URLLENGTH]; GetStringFromJSON( url, MAX_URLLENGTH, "\"url\"", q, terminator ); char *p = strrchr( url, '/' ); if ( p ) { p++; char *q = strchr( p, '#' ); if ( q ) { *q = NUL; strcpy( presence, p ); } } } return ( id ); }
JAIKU_USER CJaiku::GetUserFromJSON( const char *q, const char *terminator ) { JAIKU_USER u; char temp[BUFSIZ]; const char *p; // "user" temp[0] = NUL; u.firstName[0] = NUL; u.lastName[0] = NUL; u.avatar[0] = NUL; u.nick[0] = NUL; u.url[0] = NUL; p = strstr( q, "\"user\"" ); if ( p && (p < terminator) ) { p += 6; while ( (p < terminator) && *p && (*p != ':') ) p++; if ( *p == ':' ) { while ( (p < terminator) && *p && (*p != '{') ) p++; } // "first_name" GetStringFromJSON(temp, MAX_NAMELEN, "\"first_name\"", p, terminator); strcpy( u.firstName, temp ); // "last_name" GetStringFromJSON(temp, MAX_NAMELEN, "\"last_name\"", p, terminator); strcpy( u.lastName, temp ); // "avatar" GetStringFromJSON( temp, MAX_URLLENGTH, "\"avatar\"", p, terminator, true ); strcpy( u.avatar, temp ); // "nick" GetStringFromJSON( temp, MAX_KEYLENGTH, "\"nick\"", p, terminator ); strcpy( u.nick, temp ); // "url" GetStringFromJSON( temp, MAX_URLLENGTH, "\"url\"", p, terminator ); strcpy( u.url, temp ); } u.bitmap = NUL; return ( u ); }
int CJaiku::GetIdFromJSON( const char *q, const char *terminator, int &presence ) { int id = 0; presence = 0; // "id" id = GetIntegerFromJSON( "\"id\"", q, terminator ); if ( id == 0 ) { // "comment_id" id = GetIntegerFromJSON( "\"comment_id\"", q, terminator ); char url[MAX_URLLENGTH]; GetStringFromJSON( url, MAX_URLLENGTH, "\"url\"", q, terminator ); char *p = strrchr( url, '/' ); if ( p ) { p++; char *q = strchr( p, '#' ); if ( q ) { *q = NUL; presence = atol( p ); } } } return ( id ); }
void CJaiku::SetJaikuPresenceFromJSON( const char *q, const char *s, JAIKU_STATUS *sp, CString &message ) { sp->createdAtRelative[0] = NUL; sp->content[0] = NUL; sp->icon[0] = NUL; sp->url[0] = NUL; sp->comments = 0; sp->location[0] = NUL; sp->orig_text[0] = NUL; sp->createdAt = GetCreatedAtFromJSON(q, s); #ifdef JAIKU_LEGACY_TIMELINE int presence = 0; int id = GetIdFromJSON(q, s, presence); if ( presence == 0 ) sprintf( sp->id, "%d", id ); else sprintf( sp->id, "%d-%d", presence, id ); #else char presence[MAX_KEYLENGTH * 2 + 2]; char id[MAX_KEYLENGTH * 2 + 2]; strcpy( id, GetIdFromJSON( q, s, presence ) ); if ( presence[0] == NUL ) strcpy( sp->id, id ); else sprintf( sp->id, "%s-%s", presence, id ); #endif strcpy( sp->title, GetTitleFromJSON(q, s, sp->orig_text) ); GetStringFromJSON( sp->url, MAX_URLLENGTH, "\"url\"", q, s ); sp->user = GetUserFromJSON(q, s); TWITTER_STATUS ts; ts.createdAt = sp->createdAt; strcpy( ts.id, sp->id ); strcpy( ts.text, sp->title ); strcpy( ts.orig_text, sp->orig_text ); strcpy( ts.user.screenName, sp->user.nick ); strcpy( ts.user.orig_userName, sp->user.nick ); MakeMessageForScreen( message, &ts ); MakeMessageForLogging( &ts ); }
void MeshComponent::SetProperties(const rapidjson::Value& properties) { Super::SetProperties(properties); int textureIndex; std::string meshName; if(GetStringFromJSON(properties, "mesh", meshName)) { auto mesh = mOwner.GetGame().GetAssetCache().Load<Mesh>(meshName); SetMesh(mesh); if(GetIntFromJSON(properties, "textureIndex", textureIndex)) { SetTextureIndex(textureIndex); } } }
char * CJaiku::GetTitleFromJSON( const char *q, const char *terminator, char *origString /* = NULL */ ) { char temp11[BUFSIZ * 16]; // content (Shift_JIS) char temp12[BUFSIZ * 16]; // content (original) Thread static char temp21[BUFSIZ * 16]; // title (Shift_JIS) char temp22[BUFSIZ * 16]; // title (original) char temp31[BUFSIZ * 16]; // entry_title (Shift_JIS) char temp32[BUFSIZ * 16]; // entry_title (original) // "content" temp11[0] = NUL; temp12[0] = NUL; GetStringFromJSON( temp11, BUFSIZ * 16, "\"content\"", q, terminator, false, temp12 ); // "title" temp21[0] = NUL; temp22[0] = NUL; GetStringFromJSON( temp21, BUFSIZ * 16, "\"title\"", q, terminator, false, temp22 ); // "entry_title" temp31[0] = NUL; temp32[0] = NUL; GetStringFromJSON( temp31, BUFSIZ * 16, "\"entry_title\"", q, terminator, false, temp32 ); // 表示用 temp11/temp21 if ( temp11[0] ) { // "content" が存在する場合 if ( !strncmp( temp21, "Comment from ", 13 ) ) { char *p = strstr( temp21, " on " ); if ( p && temp31[0] ) { *(p + 4) = NULL; strcat( temp21, temp31 ); } strcat( temp21, "\r\n " ); } else strcat( temp21, " -- " ); strcat( temp21, temp11 ); } // else { // // "content" が存在しない場合 // ; // temp21 をそのまま使う // } // ログ出力用 temp12/temp22 if ( temp12[0] ) { // "content" が存在する場合 if ( !strncmp( temp22, "Comment from ", 13 ) ) { char *p = strstr( temp22, " on " ); if ( p && temp32[0] ) { *(p + 4) = NULL; strcat( temp22, temp32 ); } strcat( temp22, "\r\n\t" ); } else strcat( temp22, " -- " ); strcat( temp22, temp12 ); } // else { // // "content" が存在しない場合 // ; // temp22 をそのまま使う // } if ( origString ) strcpy( origString, temp22 ); strcpy( temp21, RegulateCode( origString, temp21 ) ); char *p = strchr( temp21, '\t' ); if ( p ) { char *temp211 = new char[(p - temp21) + 1]; char *temp212 = new char[strlen(p + 1) + 1]; strncpy( temp211, temp21, p - temp21 ); temp211[p - temp21] = NUL; strcpy( temp212, p + 1 ); sprintf( temp21, "%s %s", temp211, temp212 ); delete [] temp212; delete [] temp211; } // tinyurl を元の URL に展開 ExpandTinyURL( temp21 ); if ( origString && origString[0] ) { ExpandTinyURL( origString ); if ( strchr( origString, '&' ) ) strcpy( origString, decodeNumericReference( decodeString( origString ) ) ); } return ( strchr( temp21, '&' ) ? decodeNumericReference( decodeString( temp21 ) ) : temp21 ); }