[poppler] cpp/poppler-document.cpp cpp/poppler-document.h cpp/poppler-embedded-file.cpp cpp/poppler-embedded-file.h cpp/poppler-global.cpp cpp/poppler-global.h cpp/tests
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Apr 20 17:50:13 UTC 2022
cpp/poppler-document.cpp | 136 +++++++++++++++++++++++++++++++++++++++++-
cpp/poppler-document.h | 20 ++++--
cpp/poppler-embedded-file.cpp | 26 +++++++-
cpp/poppler-embedded-file.h | 8 +-
cpp/poppler-global.cpp | 11 +++
cpp/poppler-global.h | 6 +
cpp/tests/poppler-dump.cpp | 8 +-
7 files changed, 195 insertions(+), 20 deletions(-)
New commits:
commit 2656d986d01da5aea4f51c75e4deee569ca88064
Author: Albert Astals Cid <aacid at kde.org>
Date: Sat Apr 2 22:21:35 2022 +0200
cpp: Use time_t for time
The existing time_type is unsigned int which suffers from the Y2K38
problem
diff --git a/cpp/poppler-document.cpp b/cpp/poppler-document.cpp
index 2ae13199..70cae1b6 100644
--- a/cpp/poppler-document.cpp
+++ b/cpp/poppler-document.cpp
@@ -327,7 +327,7 @@ bool document::set_info_key(const std::string &key, const ustring &val)
}
/**
- Gets the time_t value of the specified \p key of the document
+ Gets the time_type value of the specified \p key of the document
information.
\returns the time_t value for the \p key
@@ -347,6 +347,27 @@ time_type document::info_date(const std::string &key) const
return static_cast<time_type>(dateStringToTime(goo_date.get()));
}
+/**
+ Gets the time_t value of the specified \p key of the document
+ information.
+
+ \returns the time_t value for the \p key
+ \see info_keys, info_date
+ */
+time_t document::info_date_t(const std::string &key) const
+{
+ if (d->is_locked) {
+ return time_t(-1);
+ }
+
+ std::unique_ptr<GooString> goo_date(d->doc->getDocInfoStringEntry(key.c_str()));
+ if (!goo_date.get()) {
+ return time_t(-1);
+ }
+
+ return dateStringToTime(goo_date.get());
+}
+
/**
Sets the time_type value of the specified \p key of the %document information
to \p val.
@@ -373,6 +394,31 @@ bool document::set_info_date(const std::string &key, time_type val)
return true;
}
+/**
+ Sets the time_t value of the specified \p key of the %document information
+ to \p val.
+ If \p val == time_t(-1), the entry specified by \p key is removed.
+
+ \returns true on success, false on failure
+ */
+bool document::set_info_date_t(const std::string &key, time_t val)
+{
+ if (d->is_locked) {
+ return false;
+ }
+
+ GooString *goo_date;
+
+ if (val == time_t(-1)) {
+ goo_date = nullptr;
+ } else {
+ goo_date = timeToDateString(&val);
+ }
+
+ d->doc->setDocInfoStringEntry(key.c_str(), goo_date);
+ return true;
+}
+
/**
Gets the %document's title.
@@ -657,6 +703,26 @@ time_type document::get_creation_date() const
return static_cast<time_type>(dateStringToTime(goo_creation_date.get()));
}
+/**
+ Gets the document's creation date as a time_t value.
+
+ \returns the document's creation date as a time_t value
+ \see set_creation_date, info_date
+ */
+time_t document::get_creation_date_t() const
+{
+ if (d->is_locked) {
+ return time_t(-1);
+ }
+
+ std::unique_ptr<GooString> goo_creation_date(d->doc->getDocInfoCreatDate());
+ if (!goo_creation_date.get()) {
+ return time_t(-1);
+ }
+
+ return dateStringToTime(goo_creation_date.get());
+}
+
/**
Sets the %document's creation date to \p creation_date.
If \p creation_date == time_type(-1), the %document's creation date is removed.
@@ -682,6 +748,30 @@ bool document::set_creation_date(time_type creation_date)
return true;
}
+/**
+ Sets the %document's creation date to \p creation_date.
+ If \p creation_date == time_t(-1), the %document's creation date is removed.
+
+ \returns true on success, false on failure
+ */
+bool document::set_creation_date_t(time_t creation_date)
+{
+ if (d->is_locked) {
+ return false;
+ }
+
+ GooString *goo_creation_date;
+
+ if (creation_date == time_t(-1)) {
+ goo_creation_date = nullptr;
+ } else {
+ goo_creation_date = timeToDateString(&creation_date);
+ }
+
+ d->doc->setDocInfoCreatDate(goo_creation_date);
+ return true;
+}
+
/**
Gets the document's modification date as a time_type value.
@@ -702,6 +792,26 @@ time_type document::get_modification_date() const
return static_cast<time_type>(dateStringToTime(goo_modification_date.get()));
}
+/**
+ Gets the document's modification date as a time_t value.
+
+ \returns the document's modification date as a time_t value
+ \see set_modification_date, info_date
+ */
+time_t document::get_modification_date_t() const
+{
+ if (d->is_locked) {
+ return time_t(-1);
+ }
+
+ std::unique_ptr<GooString> goo_modification_date(d->doc->getDocInfoModDate());
+ if (!goo_modification_date.get()) {
+ return time_t(-1);
+ }
+
+ return dateStringToTime(goo_modification_date.get());
+}
+
/**
Sets the %document's modification date to \p mod_date.
If \p mod_date == time_type(-1), the %document's modification date is removed.
@@ -727,6 +837,30 @@ bool document::set_modification_date(time_type mod_date)
return true;
}
+/**
+ Sets the %document's modification date to \p mod_date.
+ If \p mod_date == time_t(-1), the %document's modification date is removed.
+
+ \returns true on success, false on failure
+ */
+bool document::set_modification_date_t(time_t mod_date)
+{
+ if (d->is_locked) {
+ return false;
+ }
+
+ GooString *goo_mod_date;
+
+ if (mod_date == time_t(-1)) {
+ goo_mod_date = nullptr;
+ } else {
+ goo_mod_date = timeToDateString(&mod_date);
+ }
+
+ d->doc->setDocInfoModDate(goo_mod_date);
+ return true;
+}
+
/**
Removes the %document's Info dictionary.
diff --git a/cpp/poppler-document.h b/cpp/poppler-document.h
index ccf0a0f4..97fd9a87 100644
--- a/cpp/poppler-document.h
+++ b/cpp/poppler-document.h
@@ -2,7 +2,7 @@
* Copyright (C) 2009-2010, Pino Toscano <pino at kde.org>
* Copyright (C) 2016 Jakub Alba <jakubalba at gmail.com>
* Copyright (C) 2019, Masamichi Hosoda <trueroad at trueroad.jp>
- * Copyright (C) 2019, 2021, Albert Astals Cid <aacid at kde.org>
+ * Copyright (C) 2019, 2021, 2022, Albert Astals Cid <aacid at kde.org>
*
* 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
@@ -72,8 +72,10 @@ public:
ustring info_key(const std::string &key) const;
bool set_info_key(const std::string &key, const ustring &val);
- time_type info_date(const std::string &key) const;
- bool set_info_date(const std::string &key, time_type val);
+ [[deprecated]] time_type info_date(const std::string &key) const;
+ [[deprecated]] bool set_info_date(const std::string &key, time_type val);
+ time_t info_date_t(const std::string &key) const;
+ bool set_info_date_t(const std::string &key, time_t val);
ustring get_title() const;
bool set_title(const ustring &title);
@@ -87,10 +89,14 @@ public:
bool set_creator(const ustring &creator);
ustring get_producer() const;
bool set_producer(const ustring &producer);
- time_type get_creation_date() const;
- bool set_creation_date(time_type creation_date);
- time_type get_modification_date() const;
- bool set_modification_date(time_type mod_date);
+ [[deprecated]] time_type get_creation_date() const;
+ [[deprecated]] bool set_creation_date(time_type creation_date);
+ time_t get_creation_date_t() const;
+ bool set_creation_date_t(time_t creation_date);
+ [[deprecated]] time_type get_modification_date() const;
+ [[deprecated]] bool set_modification_date(time_type mod_date);
+ time_t get_modification_date_t() const;
+ bool set_modification_date_t(time_t mod_date);
bool remove_info();
diff --git a/cpp/poppler-embedded-file.cpp b/cpp/poppler-embedded-file.cpp
index 7255bbef..d0b240a0 100644
--- a/cpp/poppler-embedded-file.cpp
+++ b/cpp/poppler-embedded-file.cpp
@@ -96,7 +96,7 @@ int embedded_file::size() const
}
/**
- \returns the time_t representing the modification date of the embedded file,
+ \returns the time_type representing the modification date of the embedded file,
if available
*/
time_type embedded_file::modification_date() const
@@ -107,7 +107,7 @@ time_type embedded_file::modification_date() const
}
/**
- \returns the time_t representing the creation date of the embedded file,
+ \returns the time_type representing the creation date of the embedded file,
if available
*/
time_type embedded_file::creation_date() const
@@ -117,6 +117,28 @@ time_type embedded_file::creation_date() const
return goo ? static_cast<time_type>(dateStringToTime(goo)) : time_type(-1);
}
+/**
+ \returns the time_t representing the modification date of the embedded file,
+ if available
+ */
+time_t embedded_file::modification_date_t() const
+{
+ const EmbFile *ef = d->file_spec->getEmbeddedFile();
+ const GooString *goo = ef ? ef->modDate() : nullptr;
+ return goo ? dateStringToTime(goo) : time_t(-1);
+}
+
+/**
+ \returns the time_t representing the creation date of the embedded file,
+ if available
+ */
+time_t embedded_file::creation_date_t() const
+{
+ const EmbFile *ef = d->file_spec->getEmbeddedFile();
+ const GooString *goo = ef ? ef->createDate() : nullptr;
+ return goo ? dateStringToTime(goo) : time_t(-1);
+}
+
/**
\returns the checksum of the embedded file
*/
diff --git a/cpp/poppler-embedded-file.h b/cpp/poppler-embedded-file.h
index d108afb1..f39bd745 100644
--- a/cpp/poppler-embedded-file.h
+++ b/cpp/poppler-embedded-file.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2009-2010, Pino Toscano <pino at kde.org>
- * Copyright (C) 2021, Albert Astals Cid <aacid at kde.org>
+ * Copyright (C) 2021, 2022, Albert Astals Cid <aacid at kde.org>
*
* 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
@@ -37,8 +37,10 @@ public:
std::string name() const;
ustring description() const;
int size() const;
- time_type modification_date() const;
- time_type creation_date() const;
+ [[deprecated]] time_type modification_date() const;
+ [[deprecated]] time_type creation_date() const;
+ time_t modification_date_t() const;
+ time_t creation_date_t() const;
byte_array checksum() const;
std::string mime_type() const;
byte_array data() const;
diff --git a/cpp/poppler-global.cpp b/cpp/poppler-global.cpp
index 75938321..08765569 100644
--- a/cpp/poppler-global.cpp
+++ b/cpp/poppler-global.cpp
@@ -317,7 +317,7 @@ ustring ustring::from_latin1(const std::string &str)
}
/**
- Converts a string representing a PDF date to a value compatible with time_t.
+ Converts a string representing a PDF date to a value compatible with time_type.
*/
time_type poppler::convert_date(const std::string &date)
{
@@ -325,6 +325,15 @@ time_type poppler::convert_date(const std::string &date)
return static_cast<time_type>(dateStringToTime(&gooDateStr));
}
+/**
+ Converts a string representing a PDF date to a value compatible with time_t.
+ */
+time_t poppler::convert_date_t(const std::string &date)
+{
+ GooString gooDateStr(date.c_str());
+ return dateStringToTime(&gooDateStr);
+}
+
std::ostream &poppler::operator<<(std::ostream &stream, const byte_array &array)
{
stream << "[";
diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h
index 49fc7104..2a63e88c 100644
--- a/cpp/poppler-global.h
+++ b/cpp/poppler-global.h
@@ -3,7 +3,7 @@
* Copyright (C) 2010, Patrick Spendrin <ps_ml at gmx.de>
* Copyright (C) 2014, Hans-Peter Deifel <hpdeifel at gmx.de>
* Copyright (C) 2018, Adam Reichold <adam.reichold at t-online.de>
- * Copyright (C) 2021, Albert Astals Cid <aacid at kde.org>
+ * Copyright (C) 2021, 2022, Albert Astals Cid <aacid at kde.org>
*
* 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
@@ -117,7 +117,9 @@ private:
# pragma warning(pop)
#endif
-POPPLER_CPP_EXPORT time_type convert_date(const std::string &date);
+[[deprecated]] POPPLER_CPP_EXPORT time_type convert_date(const std::string &date);
+
+POPPLER_CPP_EXPORT time_t convert_date_t(const std::string &date);
POPPLER_CPP_EXPORT std::ostream &operator<<(std::ostream &stream, const byte_array &array);
diff --git a/cpp/tests/poppler-dump.cpp b/cpp/tests/poppler-dump.cpp
index cc343ff2..c10b8f41 100644
--- a/cpp/tests/poppler-dump.cpp
+++ b/cpp/tests/poppler-dump.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2009-2010, Pino Toscano <pino at kde.org>
- * Copyright (C) 2017-2019, Albert Astals Cid <aacid at kde.org>
+ * Copyright (C) 2017-2019, 2022, Albert Astals Cid <aacid at kde.org>
* Copyright (C) 2017, Jason Alan Palmer <jalanpalmer at gmail.com>
* Copyright (C) 2018, 2020, Suzuki Toshiya <mpsuzuki at hiroshima-u.ac.jp>
* Copyright (C) 2019, Masamichi Hosoda <trueroad at trueroad.jp>
@@ -194,9 +194,9 @@ static void print_info(poppler::document *doc)
std::cout << std::setw(out_width) << *key_it << ": " << doc->info_key(*key_it) << std::endl;
}
std::cout << std::setw(out_width) << "Date (creation)"
- << ": " << out_date(doc->info_date("CreationDate")) << std::endl;
+ << ": " << out_date(doc->info_date_t("CreationDate")) << std::endl;
std::cout << std::setw(out_width) << "Date (modification)"
- << ": " << out_date(doc->info_date("ModDate")) << std::endl;
+ << ": " << out_date(doc->info_date_t("ModDate")) << std::endl;
std::cout << std::setw(out_width) << "Number of pages"
<< ": " << doc->pages() << std::endl;
std::cout << std::setw(out_width) << "Linearized"
@@ -280,7 +280,7 @@ static void print_embedded_files(poppler::document *doc)
std::left(std::cout);
for (; it != it_end; ++it) {
poppler::embedded_file *f = *it;
- std::cout << " " << std::setw(out_width + 10) << f->name() << " " << std::setw(10) << out_size(f->size()) << " " << std::setw(20) << out_date(f->creation_date()) << " " << std::setw(20) << out_date(f->modification_date())
+ std::cout << " " << std::setw(out_width + 10) << f->name() << " " << std::setw(10) << out_size(f->size()) << " " << std::setw(20) << out_date(f->creation_date_t()) << " " << std::setw(20) << out_date(f->modification_date_t())
<< std::endl
<< " ";
if (f->description().empty()) {
More information about the poppler
mailing list