Example #1
0
void on_chat_get_info (struct tgl_state *TLS, void *extra, int success, struct tgl_chat *C) {
  assert (success);
  
  debug ("on_chat_joined(%d)\n", tgl_get_peer_id (C->id));
  telegram_conn *conn = TLS->ev_base;

  PurpleConversation *conv;
  if (!(conv = purple_find_chat(conn->gc, tgl_get_peer_id(C->id)))) {
    // chat conversation is not existing, create it
    conv = serv_got_joined_chat(conn->gc, tgl_get_peer_id(C->id), C->title);
  }
  purple_conv_chat_clear_users(purple_conversation_get_chat_data(conv));
  chat_add_all_users(conv, C);
  
  struct message_text *mt = 0;
  while ((mt = g_queue_pop_head (conn->new_messages))) {
    if (!chat_add_message(TLS, mt->M, mt->text)) {
      warning ("WARNING, chat %d still not existing... \n", tgl_get_peer_id (C->id));
      break;
    }
    if (mt->text) {
      g_free (mt->text);
    }
    free (mt);
  }
  
  gchar *name = g_strdup_printf ("%d", tgl_get_peer_id(C->id));
  g_hash_table_remove (conn->joining_chats, name);
  g_free (name);
}
Example #2
0
int main(void){
    chat_t * chat = chat_new("First Chat");
    printf("1st task(Chat name is) : %s\n", get_chat_name(chat));//1st task

    user_t * firstUser = user_new("Dima", "Diachenko", 18);
    chat_add_user(chat, firstUser);
    user_t * secondUser = user_new("Gleb", "Davidov", 18);
    chat_add_user(chat, secondUser); //6th task

    list_t * users_list = list_new();
    users_list = chat_get_list_of_users(chat);

    printf("4th task (and 6th task)(Users in list) : %i\n", list_getSize(users_list));//4th task

    printf("2d task : List of users:\n"); // 2d task
    for(int i = 0; i < list_getSize(users_list); i++){
        user_t * tmp  = (user_t*) list_get(users_list, i);
        printf("%s %s %i\n", user_get_name(tmp), user_get_surname(tmp), user_get_age(tmp));
    }

    printf("7th task : %s - this user was removed!\n", user_get_surname(chat_remove_user_by_surname(chat, "Davidov")));//7th task

    users_list = chat_get_list_of_users(chat);

    printf("2d task : List of users:\n"); // 2d task
    for(int i = 0; i < list_getSize(users_list); i++){
        user_t * tmp  = (user_t*) list_get(users_list, i);
        printf("%s %s %i\n", user_get_name(tmp), user_get_surname(tmp), user_get_age(tmp));
    }

    message_t * msg1 = message_new("Hello!", firstUser);

    chat_add_message(chat, msg1);//8th task
    printf("8th task: added message to chat:\n%s:\t%s\n", user_get_surname(get_owner(msg1)), get_message_text(msg1));

    list_t * msgs_list = list_new();
    msgs_list = get_list_of_messages_of_one_user(chat, firstUser);//5th task
    printf("5th task : Messages of user %s\n", user_get_surname(firstUser));
    for(int i = 0; i < list_getSize(msgs_list); i++){
        message_t * tmpmsg = list_get(msgs_list, i);
        printf("%s\n", get_message_text(tmpmsg));
    }

    msgs_list = get_last_messages(chat, 1);
    printf("3d task : List of last messages(1):\n");
    for(int i = 0; i < list_getSize(msgs_list); i++){
        message_t * tmpmsg = list_get(msgs_list, i);
        printf("%s\n", get_message_text(tmpmsg));
    }

    return 0;
}
Example #3
0
JSValueRef js_obj_chat_func(JSContextRef cx,JSObjectRef func,JSObjectRef j_obj,size_t argc,const JSValueRef argv[],JSValueRef *exception)
{
	char			msg[max_view_chat_str_len];
	d3col			col;
	obj_type		*obj;
	
	if (!script_check_param_count(cx,func,argc,1,exception)) return(script_null_to_value(cx));
	
	obj=object_get_attach(j_obj);
	script_value_to_string(cx,argv[0],msg,max_view_chat_str_len);
	
	if ((net_setup.mode!=net_mode_none) && (object_networkable(obj))) net_client_send_chat(obj,msg);
	object_get_tint(obj,&col);
	chat_add_message(obj,msg,&col);

	return(script_null_to_value(cx));
}
Example #4
0
void on_message_load_photo (struct tgl_state *TLS, void *extra, int success, char *filename) {
  gchar *data = NULL;
  size_t len;
  GError *err = NULL;
  g_file_get_contents (filename, &data, &len, &err);
  int imgStoreId = purple_imgstore_add_with_id (g_memdup(data, (guint)len), len, NULL);
    
  char *image = format_img_full(imgStoreId);
  struct tgl_message *M = extra;
  switch (tgl_get_peer_type (M->to_id)) {
    case TGL_PEER_CHAT:
      debug ("PEER_CHAT\n");
      if (!our_msg(TLS, M)) {
        chat_add_message (TLS, M, image);
      }
      break;
      
    case TGL_PEER_USER:
      debug ("PEER_USER\n");
      if (out_msg(TLS, M)) {
        p2tgl_got_im (TLS, M->to_id, image, PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_IMAGES, M->date);
      } else {
        p2tgl_got_im (TLS, M->from_id, image, PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_IMAGES, M->date);
      }
      break;
      
    case TGL_PEER_ENCR_CHAT:
      break;
      
    case TGL_PEER_GEO_CHAT:
      break;
  }
 
  g_free (image);
  telegram_conn *conn = TLS->ev_base;
  conn->updated = 1;
}
Example #5
0
static void update_message_received (struct tgl_state *TLS, struct tgl_message *M) {
  debug ("received message\n");
  telegram_conn *conn = TLS->ev_base;
  conn->updated = 1;

  if (M->service) {
    debug ("service message, skipping...\n");
    char *text = format_service_msg (TLS, M);
    if (text) {
      switch (tgl_get_peer_type (M->to_id)) {
        case TGL_PEER_CHAT:
          chat_add_message (TLS, M, text);
          break;
          
        case TGL_PEER_USER:
          p2tgl_got_im (TLS, M->from_id, text, PURPLE_MESSAGE_SYSTEM, M->date);
          break;
      }
      g_free (text);
    }
    conn->updated = 1;
    return;
  }
  
  if ((M->flags & (FLAG_MESSAGE_EMPTY | FLAG_DELETED)) || !(M->flags & FLAG_CREATED)) {
    return;
  }
  if (!tgl_get_peer_type (M->to_id)) {
    warning ("Bad msg\n");
    return;
  }

  if (M->media.type == tgl_message_media_photo) {
    tgl_do_load_photo (TLS, &M->media.photo, on_message_load_photo, M);
    return;
  }

  if (!M->message) {
    return;
  }

  char *text = purple_markup_escape_text (M->message, strlen (M->message));
  switch (tgl_get_peer_type (M->to_id)) {
    case TGL_PEER_CHAT:
      debug ("PEER_CHAT\n");
      if (!our_msg(TLS, M)) {
        chat_add_message (TLS, M, text);
      }
      break;
      
    case TGL_PEER_USER:
      debug ("PEER_USER\n");
      
      // p2tgl_got_im (TLS, M->to_id, text, PURPLE_MESSAGE_SEND, M->date);
      // :TODO: figure out how to add messages from different devices to history
      if (!our_msg(TLS, M)) {
        if (out_msg(TLS, M)) {
          p2tgl_got_im (TLS, M->to_id, text, PURPLE_MESSAGE_SEND, M->date);
        } else {
          p2tgl_got_im (TLS, M->from_id, text, PURPLE_MESSAGE_RECV, M->date);
        }
      }
      break;
      
    case TGL_PEER_ENCR_CHAT:
      break;
      
    case TGL_PEER_GEO_CHAT:
      break;
  }
  
  g_free (text);
}
Example #6
0
bool player_message_input(int tick,obj_type *obj)
{
	int				len;
	char			ch,nstr[chat_str_len];
	char			*c,*msg;
	d3col			col;
	
	if (!net_setup.client.joined) return(TRUE);
	
		// scores
		
	if (input_action_get_state(nc_score)) {
		if (!network_score_key_down) {
			hud.score.on=!hud.score.on;
			network_score_key_down=TRUE;
		}
	}
	else {
		network_score_key_down=FALSE;
	}
		
		// chatting

	if (hud.chat.type_on) {
	
			// get last raw key as character
			
		ch=input_get_last_raw_key();
		input_clear_last_raw_key();
		
		if (ch==0x0) return(FALSE);
		
			// get current message len
			
		msg=hud.chat.type_str;
		len=strlen(msg);
		
			// escape cancels
			
		if (ch==0x1B) {
			hud.chat.type_on=FALSE;
			return(FALSE);
		}
		
			// return ends entry
			
		if (ch==0xD) {
			hud.chat.type_on=FALSE;
			if (len>1) {
				msg[len-1]=0x0;
				net_client_send_chat(obj->remote.uid,msg);
				object_get_tint(obj,&col);
				chat_add_message(tick,obj->name,msg,&col);
			}
			return(FALSE);
		}
		
			// delete
			
		if (ch==0x8) {
			len-=2;
			if (len<0) len=0;

			msg[len++]='_';
			msg[len]=0x0;

			return(FALSE);
		}
		
			// eliminate certain characters
			
		if (((ch<'!') || (ch>'z')) && (ch!=0x20)) return(FALSE);
		
			// force start a new line if too many characters
			
		if (len>=(chat_str_len-1)) {
			nstr[0]=0x0;
			
			c=strrchr(msg,' ');
			if (c!=NULL) {
				if ((int)(c-msg)>5) {
					strcpy(nstr,(c+1));
					*c=0x0;
				}
			}
			
			msg[len-1]=0x0;
			net_client_send_chat(obj->remote.uid,msg);
			object_get_tint(obj,&col);
			chat_add_message(tick,obj->name,msg,&col);
			
			strcpy(msg,nstr);
			len=strlen(msg);
		}
		
			// add new character
			
		if (len>0) len--;
		
		msg[len++]=ch;
		msg[len++]='_';
		msg[len]=0x0;
	
		return(FALSE);
	}
	
	if (input_action_get_state(nc_message)) {
		hud.chat.type_on=TRUE;
		
		input_clear_all_last_raw_key();
		
		hud.chat.type_str[0]='_';
		hud.chat.type_str[1]=0x0;
		
		return(FALSE);
	}
	
	return(TRUE);
}