Esempio n. 1
0
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 );
}
Esempio n. 2
0
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 );
}
Esempio n. 3
0
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 );
}
Esempio n. 4
0
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 );
}
Esempio n. 5
0
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);
		}
	}
}
Esempio n. 6
0
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 );
}