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. } }
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); } } }
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; }
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; }
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; } }
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; }