Exemple #1
0
static int nntpdriver_messages_number(mailsession * session, const char * mb,
				      uint32_t * result)
{
  int r;
  struct nntp_session_state_data * data;

  if (mb != NULL) {
    r = nntpdriver_select_folder(session, mb);
    if (r != MAIL_NO_ERROR)
      return r;
  }

  data = get_data(session);
  
  if (data->nntp_group_info == NULL)
    return MAIL_ERROR_FOLDER_NOT_FOUND;

  * result = data->nntp_group_info->grp_last -
    data->nntp_group_info->grp_first + 1;

  return MAIL_NO_ERROR;
}
Exemple #2
0
static int nntpdriver_status_folder(mailsession * session, const char * mb,
				    uint32_t * result_messages,
				    uint32_t * result_recent,
				    uint32_t * result_unseen)
{
  uint32_t count;
  int r;

  r = nntpdriver_select_folder(session, mb);
  if (r != MAIL_NO_ERROR)
    return r;
  
  r = nntpdriver_messages_number(session, mb, &count);
  if (r != MAIL_NO_ERROR)
    return r;
          
  * result_messages = count;
  * result_recent = count;
  * result_unseen = count;
  
  return MAIL_NO_ERROR;
}
int nntp_get_messages_list(mailsession * nntp_session,
                           mailsession * session,
                           mailmessage_driver * driver,
                           struct mailmessage_list ** result)
{
    carray * tab;
    struct mailmessage_list * env_list;
    uint32_t i;
    int res;
    int r;
    struct nntp_session_state_data * data;
    struct newsnntp_group_info * group_info;
    uint32_t max;
    unsigned int cur;

    data = session_get_data(nntp_session);

    if (data->nntp_group_name == NULL) {
        res = MAIL_ERROR_BAD_STATE;
        goto err;
    }

    r = nntpdriver_select_folder(nntp_session, data->nntp_group_name);
    if (r != MAIL_NO_ERROR) {
        res = r;
        goto err;
    }

    group_info = data->nntp_group_info;

    if (group_info == NULL) {
        res = MAIL_ERROR_BAD_STATE;
        goto err;
    }

    max = group_info->grp_first;
    if (data->nntp_max_articles != 0) {
        if (group_info->grp_last - data->nntp_max_articles + 1 > max)
            max = group_info->grp_last - data->nntp_max_articles + 1;
    }

    tab = carray_new(128);
    if (tab == NULL) {
        res = MAIL_ERROR_MEMORY;
        goto err;
    }

    for(i = max ; i <= group_info->grp_last ; i++) {
        mailmessage * msg;

        msg = mailmessage_new();
        if (msg == NULL) {
            res = MAIL_ERROR_MEMORY;
            goto free_list;
        }

        r = mailmessage_init(msg, session, driver, i, 0);
        if (r != MAIL_NO_ERROR) {
            mailmessage_free(msg);
            res = r;
            goto free_list;
        }

        r = carray_add(tab, msg, NULL);
        if (r < 0) {
            mailmessage_free(msg);
            res = MAIL_ERROR_MEMORY;
            goto free_list;
        }
    }

    env_list = mailmessage_list_new(tab);
    if (env_list == NULL) {
        res = MAIL_ERROR_MEMORY;
        goto free_list;
    }

    * result = env_list;

    return MAIL_NO_ERROR;

free_list:
    for(cur = 0 ; cur < carray_count(tab) ; cur ++)
        mailmessage_free(carray_get(tab, cur));
    carray_free(tab);
err:
    return res;
}