Exemple #1
0
//ツイートを読み込んだとき
void TweetList::onGetTweet(GetTweetEvent& event){
	vector<Tweet*>::iterator begin = tweetList_->begin();

	const vector<Tweet*>& loadedTweets = event.getTweetList();

	set<long> appearedUserIdSet;

	long lastTweetId = -1;

	for(int i= (loadedTweets.size() -1); i >= 0; i--){
		Tweet* tweet = loadedTweets.at(i);
		const User* user = tweet->getUser();
		cout << "(" << i << ")[" << *tweet->getText() << "]" << endl;

		if(appearedUserIdSet.find(user->getId()) == appearedUserIdSet.end()){
			appearedUserIdSet.insert(user->getId());

			wxString fileName = "images/user_icon/" + StringUtil::toStr(tweet->getUser()->getId()) + ".bmp";

			if(!util::FileUtil::exists(fileName)){
				//ユーザアイコンが読み込まれていなかったときは、別スレッドで読み込む
				DownloadUserIconTask* thread = new DownloadUserIconTask(this, user->getId(), user->getProfileImageUrl());
				if(thread->Create() != wxTHREAD_NO_ERROR){
					wxLogError(wxT("Can't create thread!"));
				}

				wxGetApp().add(thread);
				thread->Run();
			}
		}

		tweetList_->insert(tweetList_->begin(), tweet);
		lastTweetId = tweet->getId();
	}

	if(lastTweetId != -1){
		setLastReadTweetId(lastTweetId);
	}

	SetItemCount(tweetList_->size());
	RefreshAll();
}
// Renders the tweet into a gl::Texture, using TextBox for type rendering
gl::Texture GoodNightMorningApp::renderTweet( const Tweet &tweet, float width, const Color &textColor, float backgroundAlpha )
{
	TextBox header = TextBox().font( mHeaderFont ).color( textColor ).text( "@" + tweet.getUser() );
	Surface headerSurface = header.render();
	TextBox phrase = TextBox().size( Vec2f( width - 48 - 4, TextBox::GROW ) ).font( mFont ).color( textColor ).text( tweet.getPhrase() );
	Surface textSurface = phrase.render();
	Surface result( textSurface.getWidth() + 56, std::max( headerSurface.getHeight() + textSurface.getHeight() + 10, 56 ), true );
	ip::fill( &result, ColorA( 1, 1, 1, backgroundAlpha ) );
	if( tweet.getIcon() )
		result.copyFrom( tweet.getIcon(), tweet.getIcon().getBounds(), Vec2i( 4, 4 ) );
	ip::blend( &result, headerSurface, headerSurface.getBounds(), Vec2i( result.getWidth() - 4 - headerSurface.getWidth(), textSurface.getHeight() + 6 ) );
	ip::blend( &result, textSurface, textSurface.getBounds(), Vec2i( 56, 4 ) );
	return result;
}
Exemple #3
0
//ユーザアイコンが読み込み終わった際に呼ばれる
void TweetList::onGetUserIcon(event::GetUserIconEvent& event) {
	long userId = event.getUserId();

	//画面内のリストを走査し、このユーザのアイコンを更新する
	int firstLine = GetVisibleBegin();
	int lastLine = GetVisibleEnd();

	for(int i=firstLine;i<=lastLine;i++){
		Tweet* tw = tweetList_->at(i);
		if(tw->getUser()->getId() == userId){
			RefreshLine(i);
		}
	}
}
Exemple #4
0
//--------------------------------------------------------------
void storeApp::update() {
	double timestamp = ofGetElapsedTimeMillis();
	while(receiver.hasWaitingMessages() )
	{
		// get the next message
		ofxOscMessage m;
		receiver.getNextMessage( &m );
		
		if ( m.getAddress() == "/test" )
		{
			
		}
		else if ( m.getAddress() == "/tweet" )
		{
			if (m.getNumArgs() >= 2)
			{
				string user = "";
				if (m.getArgType(0) == OFXOSC_TYPE_STRING)
				{
					user = m.getArgAsString(0);
				}
				string text = "";
				if (m.getArgType(1) == OFXOSC_TYPE_STRING)
				{
					text = m.getArgAsString(1);
				}
				
				if (user != "" && text!= "") {
					//ofDrawBitmapString( user + ": " + text, 80, 200 );
					//tweet = user + ": " + text;
					if (tweets->tweets->size() < 100)
					{
						tweets->push(new Tweet(user, text));
					}					
				}
			}
		}
		
	}
	
	if (ofGetElapsedTimeMillis() - timestamp > 10)
		cout << "msg parsed in " << ofGetElapsedTimeMillis() - timestamp << endl;
	
	if (ofGetElapsedTimeMillis() - lastTweetTime > 200)
	{
		if (tweets->tweets->size() > 0)
		{
			float margin = 20;
			Tweet *t = tweets->pop();
			string text = t->getUser() + ": " + t->getText();
			
			
			timestamp = ofGetElapsedTimeMillis();
			Tweet *newTweet = new Tweet(t->getUser(), t->getText());
			newTweet->textBlock.init(&defaultFont, &doubleSizedFont, &superSizedFont);
			newTweet->textBlock.setText(text);
			newTweet->textBlock.wrapTextInWidthHM(ofGetWidth()/6 - margin*2);
			newTweet->textBlock.setColor(255, 255, 255, 255);
			newTweet->bound = ofRectangle(
										  activeColumn * ofGetWidth()/6 + margin,
										  margin,
										  ofGetWidth()/6 - margin * 2,
										  ofGetHeight() - margin * 2
										  );
			newTweet->lastShownTime = ofGetElapsedTimeMillis();
			newTweet->live = true;
			
			tweetsOnShow->push(newTweet);
			//cout << "tweets on show: " << tweetsOnShow->tweets->size() << endl;
			
			tweets->tweets->pop_front();
			activeColumn = (activeColumn+1) % 6;
			
			if (tweetsOnShow->tweets->size() > 6)
			{
				tweetsOnShow->tweets->pop_front();
			}
			
			lastTweetTime = ofGetElapsedTimeMillis();
			
			cout << "new tweet init'd in " << ofGetElapsedTimeMillis() - timestamp << endl;
			
			//cout << tweets->tweets->size();
			//cout << " tweet in queue\n";
		}
		
	}
}