/** * news_select_group: * @session: Active NNTP session. * @group: Newsgroup name. * @num: Estimated number of articles. * @first: First article number. * @last: Last article number. * * Select newsgroup @group with the GROUP command if it is not already * selected in @session, or article numbers need to be returned. * * Return value: NNTP result code. **/ static gint news_select_group(Folder *folder, const gchar *group, gint *num, gint *first, gint *last) { gint ok; gint num_, first_, last_; struct newsnntp_group_info *info = NULL; NewsSession *session = NEWS_SESSION(news_session_get(folder)); cm_return_val_if_fail(session != NULL, -1); if (!num || !first || !last) { if (session->group && g_ascii_strcasecmp(session->group, group) == 0) return NEWSNNTP_NO_ERROR; num = &num_; first = &first_; last = &last_; } g_free(session->group); session->group = NULL; ok = nntp_threaded_group(folder, group, &info); if (ok == NEWSNNTP_NO_ERROR && info) { session->group = g_strdup(group); *num = info->grp_first; *first = info->grp_first; *last = info->grp_last; newsnntp_group_free(info); } else { log_warning(LOG_PROTOCOL, _("couldn't select group: %s\n"), group); } return ok; }
static void nntpdriver_uninitialize(mailsession * session) { struct nntp_session_state_data * data; data = get_data(session); clist_foreach(data->nntp_subscribed_list, (clist_func) free, NULL); clist_free(data->nntp_subscribed_list); if (data->nntp_group_info != NULL) newsnntp_group_free(data->nntp_group_info); if (data->nntp_group_name != NULL) free(data->nntp_group_name); if (data->nntp_userid != NULL) free(data->nntp_userid); if (data->nntp_password != NULL) free(data->nntp_password); newsnntp_free(data->nntp_session); free(data); session->sess_data = NULL; }
int nntpdriver_select_folder(mailsession * session, const char * mb) { int r; struct newsnntp_group_info * info; newsnntp * nntp_session; struct nntp_session_state_data * data; char * new_name; int done; data = session_get_data(session); if (!data->nntp_mode_reader) { r = nntpdriver_mode_reader(session); if (r != MAIL_NO_ERROR) return r; data->nntp_mode_reader = TRUE; } if (data->nntp_group_name != NULL) if (strcmp(data->nntp_group_name, mb) == 0) return MAIL_NO_ERROR; nntp_session = session_get_nntp_session(session); done = FALSE; do { r = newsnntp_group(nntp_session, mb, &info); switch (r) { case NEWSNNTP_WARNING_REQUEST_AUTHORIZATION_USERNAME: r = nntpdriver_authenticate_user(session); if (r != MAIL_NO_ERROR) return r; break; case NEWSNNTP_WARNING_REQUEST_AUTHORIZATION_PASSWORD: r = nntpdriver_authenticate_password(session); if (r != MAIL_NO_ERROR) return r; break; case NEWSNNTP_NO_ERROR: done = TRUE; break; default: return nntpdriver_nntp_error_to_mail_error(r); } } while (!done); new_name = strdup(mb); if (new_name == NULL) return MAIL_ERROR_MEMORY; if (data->nntp_group_name != NULL) free(data->nntp_group_name); data->nntp_group_name = new_name; if (data->nntp_group_info != NULL) newsnntp_group_free(data->nntp_group_info); data->nntp_group_info = info; return MAIL_NO_ERROR; }