void Wall::parseWall(string input)
{
	int i = 0;
	string token;
	struct tm timeStruct;
	WallPost temp = WallPost();
	istringstream iss(input);
	while (getline(iss, token))
	{
		if ((i % 3) == 0) 	
		{
			temp.setPost(token);
		}
		else if ((i % 3) == 1)
		{
			strptime(token.c_str(), "%a %b %d %T %Y", &timeStruct);
			time_t _postTime = mktime(&timeStruct);
			temp.setTime(_postTime);
		}
		else if ((i % 3) == 2)
		{
			temp.setMood(token);
			addPost(temp);
		}
		i++;
	}
}
예제 #2
0
WallPost Wall::DeletePost(int idx_del)
{ 
  WallPost copy = wall_posts.get(idx_del);
  if (copy.IsResponse()) {
    WallPost* parent = copy.GetParent();
    parent->DeleteResponse(copy);
  }
  wall_posts.remove(idx_del);
  return copy;
 }
예제 #3
0
void Wall::ConstructPostResponseRelationship(User* user) {
  DoublyLinkedList<WallPost>::iterator it;
  WallPost* parent = NULL;
  for (it = wall_posts.begin(); it != wall_posts.end(); it++) {
    if ((*it).IsResponse()) {
      (*it).SetParent(parent);
      parent->AddResponse(&(*it));
    }
    else {
      parent = &(*it);
    }
    if ((*it).GetAuthorUsername() != user->GetUserName()) {
      User* ptr = user->QueryFriend((*it).GetAuthorUsername());
      ptr->Remember(user->GetUserName(), *it);
    }
  }
}
예제 #4
0
std::string WallPost::getIthResponseString(int i)
{
    std::string ret;
    char s[1000];
    if( (i<0) || (i>(responseList.size()-1)))
    {
        throw -1;
    }
    WallPost wp = responseList[i];
    ret += wp.getAuthor();
    time_t postTime = wp.getPostTime();
    struct tm * p = localtime(&postTime);
    strftime(s, 1000, "%A, %B %d %Y", p);
    ret += " [" + std::string(s) + "]: ";
    ret += wp.getPostText();

    return ret;
}
예제 #5
0
void Wall::AddResponseToPost(int post_index, WallPost& post) {
  WallPost* parent = &(wall_posts.get(post_index - 1));
  if (parent->IsResponse()){
      parent = parent->GetParent();
  }
  post.SetParent(parent);
  post.SetDomainName(username);
  parent->AddResponse(&post);
  wall_posts.insert(post_index, post);
}
예제 #6
0
void Wall::CreateWallFromString(string data) 
{
	size_t cur_pos = data.find("DOMAIN_NAME", 0);
	if (cur_pos == string::npos) {
		cout << "No post data found." << endl;
		return;
	}
	size_t next_pos = data.find("DOMAIN_NAME", cur_pos+1);
	string post_data;
	while (next_pos != string::npos) {
		post_data = data.substr(cur_pos, next_pos - cur_pos);
		WallPost post = WallPost();
		post.SetAuthorUsername(username);
		post.ConstructFromString(post_data);
		wall_posts.insert(wall_posts.size(), post);
		cur_pos = next_pos;
		next_pos = data.find("DOMAIN_NAME", cur_pos + 1);
	}
	post_data = data.substr(cur_pos, data.length());
	WallPost post  = WallPost();
	post.SetAuthorUsername(username);
	post.ConstructFromString(post_data);
	wall_posts.insert(wall_posts.size(),post);
}
예제 #7
0
void Wall::AddPost(int pos, WallPost wall_post)
{
  wall_post.SetDomainName(username);
  wall_posts.insert(pos, wall_post);
}
예제 #8
0
void Wall::AddPost(WallPost wall_post)
{
  wall_post.SetDomainName(username);
  wall_posts.insert(wall_posts.size(), wall_post);
}
예제 #9
0
bool operator==(const WallPost& left, const WallPost& right) {
	return (left.getContent() == right.getContent() 
			&& left.getAuthor() == right.getAuthor() 
			&& left.getTimePosted() == right.getTimePosted());
}