lib: moved mimedump.h from tools/ into the library (mimeio.h)
[barry/progweb.git] / src / mimeio.h
blobb57a09c9e0af2f38ec6d1013ef85b3173b86a106
1 ///
2 /// \file mimeio.h
3 /// Storage, parser, builder classes for MIME objects
4 /// (vcard, vevent, vtodo, vjournal)
5 ///
7 /*
8 Copyright (C) 2010-2012, Net Direct Inc. (http://www.netdirect.ca/)
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 See the GNU General Public License in the COPYING file at the
20 root directory of this project for more details.
23 #ifndef __BARRY_MIMEIO_H__
24 #define __BARRY_MIMEIO_H__
26 #include "dll.h"
27 #include "builder.h"
28 #include "vcard.h"
29 #include "vevent.h"
30 #include "vjournal.h"
31 #include "vtodo.h"
32 #include <string>
33 #include <vector>
34 #include <memory>
35 #include <iostream>
37 namespace Barry {
39 class Contact;
40 class Calendar;
41 class Memo;
42 class Task;
45 // Template classes to write MIME data to stream, from record.
48 template <class Record>
49 class MimeDump
51 public:
52 static void Dump(std::ostream &os, const Record &rec)
54 os << rec << std::endl;
57 static bool Supported() { return false; }
60 template <>
61 class MimeDump<Barry::Contact>
63 public:
64 static void Dump(std::ostream &os, const Barry::Contact &rec)
66 Barry::Sync::vCard vcard;
67 os << vcard.ToVCard(rec) << std::endl;
70 static bool Supported() { return true; }
73 template <>
74 class MimeDump<Barry::Calendar>
76 public:
77 static void Dump(std::ostream &os, const Barry::Calendar &rec)
79 Barry::Sync::vTimeConverter vtc;
80 Barry::Sync::vCalendar vcal(vtc);
81 os << vcal.ToVCal(rec) << std::endl;
84 static bool Supported() { return true; }
87 template <>
88 class MimeDump<Barry::Memo>
90 public:
91 static void Dump(std::ostream &os, const Barry::Memo &rec)
93 Barry::Sync::vTimeConverter vtc;
94 Barry::Sync::vJournal vjournal(vtc);
95 os << vjournal.ToMemo(rec) << std::endl;
98 static bool Supported() { return true; }
101 template <>
102 class MimeDump<Barry::Task>
104 public:
105 static void Dump(std::ostream &os, const Barry::Task &rec)
107 Barry::Sync::vTimeConverter vtc;
108 Barry::Sync::vTodo vtodo(vtc);
109 os << vtodo.ToTask(rec) << std::endl;
112 static bool Supported() { return true; }
117 // Builder class, for reading MIME stream data and loading into
118 // a DBData record.
121 class BXEXPORT MimeBuilder : public Barry::Builder
123 std::auto_ptr<std::ifstream> m_ifs;
124 std::istream &m_is;
126 public:
127 explicit MimeBuilder(const std::string &filename);
128 explicit MimeBuilder(std::istream &is);
130 bool BuildRecord(DBData &data, size_t &offset, const IConverter *ic);
131 bool FetchRecord(DBData &data, const IConverter *ic);
132 bool EndOfFile() const;
134 // return false at end of file, true if a record was read
135 static bool ReadMimeRecord(std::istream &is, std::string &vrec,
136 std::vector<std::string> &types);
137 // returns true if item is a member of types, doing a
138 // case-insensitive compare
139 static bool IsMember(const std::string &item,
140 const std::vector<std::string> &types);
145 #endif