menu: added new Keywords tag to .desktop files
[barry.git] / src / mimeio.h
blobe40d0c3db6c781bc6786dc96946fb1cc3cc912b2
1 ///
2 /// \file mimeio.h
3 /// Storage, parser, builder classes for MIME objects
4 /// (vcard, vevent, vtodo, vjournal)
5 ///
7 /*
8 Copyright (C) 2010-2013, 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 CalendarAll;
42 class Memo;
43 class Task;
46 // Template classes to write MIME data to stream, from record.
49 template <class Record>
50 class MimeDump
52 public:
53 static void Dump(std::ostream &os, const Record &rec)
55 os << rec << std::endl;
58 static bool Supported() { return false; }
61 template <>
62 class MimeDump<Barry::Contact>
64 public:
65 static void Dump(std::ostream &os, const Barry::Contact &rec)
67 Barry::Sync::vCard vcard;
68 os << vcard.ToVCard(rec) << std::endl;
71 static bool Supported() { return true; }
74 template <>
75 class MimeDump<Barry::Calendar>
77 public:
78 static void Dump(std::ostream &os, const Barry::Calendar &rec)
80 Barry::Sync::vTimeConverter vtc;
81 Barry::Sync::vCalendar vcal(vtc);
82 os << vcal.ToVCal(rec) << std::endl;
85 static bool Supported() { return true; }
88 template <>
89 class MimeDump<Barry::CalendarAll>
91 public:
92 static void Dump(std::ostream &os, const Barry::CalendarAll &rec)
94 Barry::Sync::vTimeConverter vtc;
95 Barry::Sync::vCalendar vcal(vtc);
96 os << vcal.ToVCal(rec) << std::endl;
99 static bool Supported() { return true; }
102 template <>
103 class MimeDump<Barry::Memo>
105 public:
106 static void Dump(std::ostream &os, const Barry::Memo &rec)
108 Barry::Sync::vTimeConverter vtc;
109 Barry::Sync::vJournal vjournal(vtc);
110 os << vjournal.ToMemo(rec) << std::endl;
113 static bool Supported() { return true; }
116 template <>
117 class MimeDump<Barry::Task>
119 public:
120 static void Dump(std::ostream &os, const Barry::Task &rec)
122 Barry::Sync::vTimeConverter vtc;
123 Barry::Sync::vTodo vtodo(vtc);
124 os << vtodo.ToTask(rec) << std::endl;
127 static bool Supported() { return true; }
132 // Builder class, for reading MIME stream data and loading into
133 // a DBData record.
136 class BXEXPORT MimeBuilder : public Barry::Builder
138 std::auto_ptr<std::ifstream> m_ifs;
139 std::istream &m_is;
141 public:
142 explicit MimeBuilder(const std::string &filename);
143 explicit MimeBuilder(std::istream &is);
145 bool BuildRecord(DBData &data, size_t &offset, const IConverter *ic);
146 bool FetchRecord(DBData &data, const IConverter *ic);
147 bool EndOfFile() const;
149 // return false at end of file, true if a record was read
150 static bool ReadMimeRecord(std::istream &is, std::string &vrec,
151 std::vector<std::string> &types);
152 // returns true if item is a member of types, doing a
153 // case-insensitive compare
154 static bool IsMember(const std::string &item,
155 const std::vector<std::string> &types);
160 #endif