Example #1
0
void
AddonManager::check_for_langpack_updates()
{
  const std::string& language = g_dictionary_manager->get_language().get_language();
  if(language == "en")
    return;

  try
  {
    check_online();
    try
    {
      const std::string& addon_id = "langpack-" + language;
      log_debug << "Looking for language addon with ID " << addon_id << "..." << std::endl;
      Addon& langpack = get_repository_addon(addon_id);

      try
      {
        auto& installed_langpack = get_installed_addon(addon_id);
        if (installed_langpack.get_md5() == langpack.get_md5() ||
            installed_langpack.get_version() > langpack.get_version())
        {
          log_debug << "Language addon " << addon_id << " is already the latest version." << std::endl;
          return;
        }

        // Langpack update available. Let's install it!
        install_addon(addon_id);
        enable_addon(addon_id);
      }
      catch(const std::exception& err)
      {
        log_debug << "Language addon " << addon_id << " is not installed. Installing..." << std::endl;
        install_addon(addon_id);
        enable_addon(addon_id);
      }
    }
    catch(std::exception& err)
    {
      log_debug << "Language addon for current locale not found." << std::endl;
    }
  }
  catch(...)
  {
    // If anything fails here, just silently ignore.
  }
}
Example #2
0
AddonMenu::AddonMenu(bool language_pack_mode, bool auto_install_langpack) :
  m_addon_manager(*AddonManager::current()),
  m_installed_addons(),
  m_repository_addons(),
  m_addons_enabled(),
  m_language_pack_mode(language_pack_mode),
  m_auto_install_langpack(auto_install_langpack)
{
  refresh();
  if(auto_install_langpack)
  {
    const std::string& language = g_dictionary_manager->get_language().get_language();
    if(language == "en")
      return;
    check_online();
  }
}
void tunet_check_online(struct tunet_connection *tc) {
	char buffer[BUFFER_LEN];
	memset(buffer, 0, BUFFER_LEN);

	if(tc) {
		memset(buffer, 0, BUFFER_LEN);
		tc->status = check_online(buffer, BUFFER_LEN);
		if(tc->status == 0) {
			strncpy(tc->err_msg, buffer, TC_BUFFER_LEN);
		} else {
			get_user_name_from_check_online_result(buffer, tc->user, TC_BUFFER_LEN);
			tc->elapsed_time = get_time_from_check_online_result(buffer);
			tc->input_bytes = get_cost_from_check_online_result(buffer);
		}
	} 

}
Example #4
0
int32 init_user(int8 *file[])
{
	int32 count;
	if(check_online(file))
		return IS_ONLINE;
	for(count = 0; count < MAX_USER; count++)
	{
		if(clients[count].online == NO_ONLINE)
		{
			strcpy(clients[count].user_name, file[0]);
			strcpy(clients[count].user_passwd, file[1]);
			clients[count].online = IS_ONLINE;
			break;
		}
	}
	return NO_ONLINE;
}
Example #5
0
int init_clents(char *t[])//初始化用户数组结构
{
		pthread_mutex_lock (&mutex);//加互斥锁
		int i = 0 ;
		if(check_online (t ))//在线返回1 ,未在线返回0
				return 1;
		for(i = 0 ;i < QUEUELEN ;i++)
		{
				if(clients[i].client_id == 0 && clients[i].is_online != 1)//不在线的情况下
				{
						strcpy( clients[i].client_name ,t[0]);   //将用户名存入
						strcpy( clients[i].client_passwd ,t[1]); //将密码存入
						clients[i].client_id = atoi(t[2]);		//将id整形化存入
						clients[i].is_online = 1;				//在线
						clients[i].admin = NORMAL_USER;
						break;
				}
		}
		pthread_mutex_unlock (&mutex);//解锁
		return 0;
}
Example #6
0
void
AddonMenu::menu_action(MenuItem* item)
{
  if (item->id == MNID_CHECK_ONLINE) // check if "Check Online" was chosen
  {
    check_online();
  }
  else if(item->id == MNID_LANGPACK_MODE)
  {
    m_language_pack_mode = !m_language_pack_mode;
    rebuild_menu();
    on_window_resize();
    return;
  }
  else if (MNID_ADDON_LIST_START <= item->id)
  {
    if (IS_INSTALLED_MENU_ID(item->id))
    {
      int idx = UNPACK_INSTALLED_MENU_ID(item->id);
      if (0 <= idx && idx < static_cast<int>(m_installed_addons.size()))
      {
        const Addon& addon = m_addon_manager.get_installed_addon(m_installed_addons[idx]);
        toggle_addon(addon);
      }
    }
    else if (IS_REPOSITORY_MENU_ID(item->id))
    {
      int idx = UNPACK_REPOSITORY_MENU_ID(item->id);
      if (0 <= idx && idx < static_cast<int>(m_repository_addons.size()))
      {
        const Addon& addon = m_addon_manager.get_repository_addon(m_repository_addons[idx]);
        install_addon(addon);
      }
    }
  }
  else
  {
    log_warning << "Unknown menu item clicked: " << item->id << std::endl;
  }
}
Example #7
0
int load(int confd, struct user *temp_user)
{
	char buf[MAXSIZE];
	memset(buf,0,MAXSIZE);
	int n_write;
	
	debug_msg("查看注册用户\n");
	traverse(user_head);
	debug_msg("查看注册用户完毕\n");
	
	/*查看该用户已经登录*/
	if(check_online(temp_user->name) == 1)
	{
		strcpy(buf,"User has already logged in\n");
		n_write = Write(confd,buf,strlen(buf));
		if(n_write <= 0){
			fputs("load: write error",stderr);
			close(confd);	
			return -1;	
		}
		return 0;
	}
	
	if(check_password(temp_user) == 1)
	{
		strcpy(buf,"Log in success.Welcom to chatroom\n");
		n_write = Write(confd,buf,strlen(buf));
		if(n_write <= 0)
		{
			fputs("load failure\n",stderr);
			close(confd);
			return -1;
		}
		
		pthread_mutex_lock(&log_lock); /*涉及到用户在线链表的操作的地方上锁*/

		struct user_link *temp = user_node(temp_user,confd);
		notice(temp_user->name,ONLINE);
		insert_online(temp);
		debug_msg("登录处\n");
		traverse(online_head);
		debug_msg("插入在线列表成功\n");
		pthread_mutex_lock(&log_lock);		
	}
	else
	{	
		strcpy(buf,"log failure, user name and password can not match\n");
		
		n_write = Write(confd, buf, strlen(buf));
		if(n_write <= 0)
		{
			fputs("load: write failure\n",stderr);
			close(confd);
			return -1;
		}
		return 0;
	}
	
	memset(buf,0,MAXSIZE);
	manage_chat(confd);
	return 0;
}