added iOS source code
[wl-app.git] / iOS / Pods / FolioReaderKit / Source / EPUBCore / FRMetadata.swift
1 //
2 //  FRMetadata.swift
3 //  FolioReaderKit
4 //
5 //  Created by Heberti Almeida on 04/05/15.
6 //  Copyright (c) 2015 Folio Reader. All rights reserved.
7 //
8
9 import UIKit
10
11 /**
12  Represents one of the authors of the book.
13  */
14 struct Author {
15     var name: String
16     var role: String
17     var fileAs: String
18
19     init(name: String, role: String, fileAs: String) {
20         self.name = name
21         self.role = role
22         self.fileAs = fileAs
23     }
24 }
25
26 /**
27  A Book's identifier.
28  */
29 struct Identifier {
30     var id: String?
31     var scheme: String?
32     var value: String?
33
34     init(id: String?, scheme: String?, value: String?) {
35         self.id = id
36         self.scheme = scheme
37         self.value = value
38     }
39 }
40
41 /**
42  A date and his event.
43  */
44 struct EventDate {
45     var date: String
46     var event: String?
47
48     init(date: String, event: String?) {
49         self.date = date
50         self.event = event
51     }
52 }
53
54 /**
55  A metadata tag data.
56  */
57 struct Meta {
58     var name: String?
59     var content: String?
60     var id: String?
61     var property: String?
62     var value: String?
63     var refines: String?
64
65     init(name: String? = nil, content: String? = nil, id: String? = nil, property: String? = nil,
66          value: String? = nil, refines: String? = nil) {
67         self.name = name
68         self.content = content
69         self.id = id
70         self.property = property
71         self.value = value
72         self.property = property
73         self.value = value
74         self.refines = refines
75     }
76 }
77
78 /**
79  Manages book metadata.
80  */
81 class FRMetadata {
82     var creators = [Author]()
83     var contributors = [Author]()
84     var dates = [EventDate]()
85     var language = "en-US"
86     var titles = [String]()
87     var identifiers = [Identifier]()
88     var subjects = [String]()
89     var descriptions = [String]()
90     var publishers = [String]()
91     var format = MediaType.epub.name
92     var rights = [String]()
93     var metaAttributes = [Meta]()
94
95     /**
96      Find a book unique identifier by ID
97
98      - parameter id: The ID
99      - returns: The unique identifier of a book
100      */
101     func find(identifierById id: String) -> Identifier? {
102         return identifiers.filter({ $0.id == id }).first
103     }
104
105     func find(byName name: String) -> Meta? {
106         return metaAttributes.filter({ $0.name == name }).first
107     }
108
109     func find(byProperty property: String, refinedBy: String? = nil) -> Meta? {
110         return metaAttributes.filter {
111             if let refinedBy = refinedBy {
112                 return $0.property == property && $0.refines == refinedBy
113             }
114             return $0.property == property
115         }.first
116     }
117 }