|
@@ -0,0 +1,126 @@
|
|
|
+
|
|
|
+namespace Ppub {
|
|
|
+
|
|
|
+ public class Metadata {
|
|
|
+
|
|
|
+ public const string TITLE = "title";
|
|
|
+ public const string AUTHOR = "author";
|
|
|
+ public const string DATE = "date";
|
|
|
+ public const string DESCRIPTION = "description";
|
|
|
+ public const string TAGS = "tags";
|
|
|
+ public const string COPYRIGHT = "copyright";
|
|
|
+ public const string LICENCE = "licence";
|
|
|
+
|
|
|
+ private Gee.HashMap<string, string> entries {get; set;}
|
|
|
+
|
|
|
+ public string? get_value(string name) {
|
|
|
+ if(entries.has_key(name)) {
|
|
|
+ return entries.get(name);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void set_value(string name, string value) {
|
|
|
+ entries.set(name, value);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public string? title {
|
|
|
+ owned get {
|
|
|
+ return get_value(TITLE);
|
|
|
+ }
|
|
|
+ set {
|
|
|
+ set_value(TITLE, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string? author {
|
|
|
+ owned get {
|
|
|
+ return get_value(AUTHOR);
|
|
|
+ }
|
|
|
+ set {
|
|
|
+ set_value(AUTHOR, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string? author_name {
|
|
|
+ owned get {
|
|
|
+ return author?.split("<", 1)[0].chomp();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public DateTime? date {
|
|
|
+ owned get {
|
|
|
+ var date_str = get_value(DATE);
|
|
|
+ if(date_str == null){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return new DateTime.from_iso8601(date_str, null);
|
|
|
+ }
|
|
|
+ set {
|
|
|
+ set_value(DATE, value.format_iso8601());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string? description {
|
|
|
+ owned get {
|
|
|
+ return get_value(DESCRIPTION);
|
|
|
+ }
|
|
|
+ set {
|
|
|
+ set_value(DESCRIPTION, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string[]? tags {
|
|
|
+ owned get {
|
|
|
+ return get_value(TAGS).split(" ");
|
|
|
+ }
|
|
|
+ set {
|
|
|
+ set_value(TAGS, string.join(" ", value));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string? copyright {
|
|
|
+ owned get {
|
|
|
+ return get_value(COPYRIGHT);
|
|
|
+ }
|
|
|
+ set {
|
|
|
+ set_value(COPYRIGHT, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string? licence {
|
|
|
+ owned get {
|
|
|
+ return get_value(LICENCE);
|
|
|
+ }
|
|
|
+ set {
|
|
|
+ set_value(LICENCE, value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public Metadata.from_stream(InputStream stream) throws IOError {
|
|
|
+
|
|
|
+ var dis = new DataInputStream(stream);
|
|
|
+ entries = new Gee.HashMap<string, string>();
|
|
|
+
|
|
|
+ string line;
|
|
|
+ while((line = dis.read_line()) != null) {
|
|
|
+ print(@"METADATA: $line\n");
|
|
|
+ var kv = line.split(": ", 2);
|
|
|
+ entries.set(kv[0], kv[1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public string to_string() {
|
|
|
+ var str = "";
|
|
|
+ foreach (var item in entries) {
|
|
|
+ str += @"$(item.key): $(item.value)\n";
|
|
|
+ }
|
|
|
+ return str;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|