/* mailstore.c - mail storage backends * * Copyright © 2009 Carl Worth * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/ . */ #include #include "notmuch-private.h" typedef struct _notmuch_mailstore { FILE *(*open) (struct _notmuch_mailstore *mailstore, const char *filename); int (*rename) (struct _notmuch_mailstore *mailstore, const char *old_filename, const char *new_filename); } _notmuch_mailstore; static FILE * _maildir_open_function (unused (notmuch_mailstore_t *mailstore), const char *filename) { return fopen (filename, "r"); } static int _maildir_rename_function (unused (notmuch_mailstore_t *mailstore), const char *old_filename, const char *new_filename) { return rename (old_filename, new_filename); } /* A mailstore is defined as: * * - A function used to "open" a mail message. This takes the * "filename" for the file and should return a FILE *. * * - A function to "rename" a mail message, which is currently only * used in tags_to_maildir_flags. * * - TODO: A way to scan for new messages? * * - TODO: A "constructor"? */ _notmuch_mailstore notmuch_mailstore_maildir = { _maildir_open_function, _maildir_rename_function }; _notmuch_mailstore * notmuch_mailstore_get_by_name (const char *name) { if (strcmp (name, "maildir") == 0) return ¬much_mailstore_maildir; return NULL; } FILE * notmuch_mailstore_open (notmuch_mailstore_t *mailstore, const char *filename) { return mailstore->open (mailstore, filename); } int notmuch_mailstore_rename (notmuch_mailstore_t *mailstore, const char *old_filename, const char *new_filename) { return mailstore->rename (mailstore, old_filename, new_filename); }