Refactored Netscape bookmarks export.
continuous-integration/drone/push Build is failing Details

This commit is contained in:
tastytea 2019-06-06 17:11:56 +02:00
parent 8ff0d39927
commit 00aa9ffd47
Signed by: tastytea
GPG Key ID: CFC39497F1B26E07
4 changed files with 35 additions and 29 deletions

View File

@ -21,9 +21,9 @@ using std::chrono::system_clock;
using std::chrono::duration_cast; using std::chrono::duration_cast;
using std::chrono::seconds; using std::chrono::seconds;
void export_bookmarks(const vector<Database::entry> &entries, ostream &out) void Export::Bookmarks::print() const
{ {
out << "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n" _out << "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n"
"<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; " "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; "
"charset=UTF-8\">\n" "charset=UTF-8\">\n"
"<TITLE>Bookmarks from remwharead</TITLE>\n" "<TITLE>Bookmarks from remwharead</TITLE>\n"
@ -31,22 +31,23 @@ void export_bookmarks(const vector<Database::entry> &entries, ostream &out)
"<DL><p>\n" "<DL><p>\n"
"<DT><H3>remwharead</H3>\n" "<DT><H3>remwharead</H3>\n"
"<DL><p>\n"; "<DL><p>\n";
for (const Database::entry & entry : entries)
{
string title = entry.title;
if (title.empty())
{
title = entry.uri;
}
system_clock::time_point tp = entry.datetime;
system_clock::duration duration = tp.time_since_epoch();
string time_seconds =
std::to_string(duration_cast<seconds>(duration).count());
out << "<DT><A HREF=\"" << entry.uri << "\" " for (const Database::entry & entry : _entries)
<< "ADD_DATE=\"" << time_seconds << "\">" {
<< title << "</A>\n"; string title = entry.title;
if (title.empty())
{
title = entry.uri;
} }
out << "</DL><p>\n" system_clock::time_point tp = entry.datetime;
<< "</DL><p>\n"; system_clock::duration duration = tp.time_since_epoch();
string time_seconds =
std::to_string(duration_cast<seconds>(duration).count());
_out << "<DT><A HREF=\"" << entry.uri << "\" "
<< "ADD_DATE=\"" << time_seconds << "\">"
<< title << "</A>\n";
}
_out << "</DL><p>\n"
<< "</DL><p>\n";
} }

View File

@ -35,6 +35,8 @@ namespace Export
explicit ExportBase(const vector<Database::entry> &entries, explicit ExportBase(const vector<Database::entry> &entries,
ostream &out = cout); ostream &out = cout);
virtual void print() const = 0;
protected: protected:
const vector<Database::entry> &_entries; const vector<Database::entry> &_entries;
ostream &_out; ostream &_out;
@ -45,19 +47,20 @@ namespace Export
public: public:
using ExportBase::ExportBase; using ExportBase::ExportBase;
void print() const; virtual void print() const override;
private: private:
//! replaces " with "". //! replaces " with "".
const string quote(string field) const; const string quote(string field) const;
}; };
class AsciiDoc : protected ExportBase class AsciiDoc : protected ExportBase
{ {
public: public:
using ExportBase::ExportBase; using ExportBase::ExportBase;
void print() const; void print() const override;
private: private:
using tagmap = std::map<string,vector<Database::entry>>; using tagmap = std::map<string,vector<Database::entry>>;
@ -72,12 +75,14 @@ namespace Export
const string get_day(const Database::entry &entry) const; const string get_day(const Database::entry &entry) const;
const string get_time(const Database::entry &entry) const; const string get_time(const Database::entry &entry) const;
}; };
//! Export as Netscape bookmark file.
class Bookmarks : protected ExportBase
{
public:
using ExportBase::ExportBase;
virtual void print() const override;
};
} }
//! Export as Netscape bookmark file.
void export_bookmarks(const vector<Database::entry> &entries,
ostream &out = cout);
#endif // REMWHAREAD_EXPORT_HPP #endif // REMWHAREAD_EXPORT_HPP

View File

@ -124,12 +124,12 @@ int main(const int argc, const char *argv[])
{ {
if (file.is_open()) if (file.is_open())
{ {
export_bookmarks(entries, file); Export::Bookmarks(entries, file).print();
file.close(); file.close();
} }
else else
{ {
export_bookmarks(entries); Export::Bookmarks(entries).print();
} }
break; break;
} }

View File

@ -46,7 +46,7 @@ SCENARIO ("The Bookmarks export works correctly")
try try
{ {
std::ostringstream output; std::ostringstream output;
export_bookmarks({ entry }, output); Export::Bookmarks({ entry }, output).print();
const string bookmarks = output.str(); const string bookmarks = output.str();
const regex re_top( const regex re_top(