add image size and comic title to metadata extraction
This commit is contained in:
@@ -183,8 +183,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
}.sorted { $0.path < $1.path }
|
||||
|
||||
for dir in directories {
|
||||
if !fileManager.fileExists(atPath: dir.appendingPathComponent(metadataFilename).path)
|
||||
{
|
||||
if !fileManager.fileExists(atPath: dir.appendingPathComponent(metadataFilename).path) {
|
||||
getMetadataFromFileName(path: dir)
|
||||
}
|
||||
|
||||
@@ -245,9 +244,24 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
return r
|
||||
}
|
||||
|
||||
func imageSize(at url: URL) -> CGSize? {
|
||||
guard let source = CGImageSourceCreateWithURL(url as CFURL, nil) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
guard let properties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) as? [CFString: Any],
|
||||
let width = properties[kCGImagePropertyPixelWidth] as? CGFloat,
|
||||
let height = properties[kCGImagePropertyPixelHeight] as? CGFloat else {
|
||||
return nil
|
||||
}
|
||||
|
||||
return CGSize(width: width, height: height)
|
||||
}
|
||||
|
||||
func getMetadataFromFileName(path: URL) {
|
||||
// Beautiful, is it not?
|
||||
let pattern = "c([0-9]+(?:x[0-9]+)?) \\(v([0-9]+)\\) - p([0-9]+(?:-[0-9]+)?)"
|
||||
let titlePattern = "^(.*) - c([0-9]+(?:x[0-9]+)?)"
|
||||
|
||||
var currentVolume: UInt32! = nil
|
||||
var currentChapter: (UInt32, UInt32?)!
|
||||
@@ -265,8 +279,11 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
var currentChapters: [Offset] = []
|
||||
var currentImages: [Offset] = []
|
||||
|
||||
var titleValue: String = ""
|
||||
|
||||
do {
|
||||
let regex = try NSRegularExpression(pattern: pattern)
|
||||
let titleRegex = try NSRegularExpression(pattern: titlePattern)
|
||||
let dir = path.appendingPathComponent("images")
|
||||
|
||||
let fileURLs = try fileManager.contentsOfDirectory(
|
||||
@@ -277,6 +294,11 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
let filenames = fileURLs.map { $0.lastPathComponent }.sorted()
|
||||
for (i, filename) in filenames.enumerated() {
|
||||
let range = NSRange(filename.startIndex..., in: filename)
|
||||
if i == 0 {
|
||||
if let match = titleRegex.firstMatch(in: filename, range: range) {
|
||||
titleValue = (filename as NSString).substring(with: match.range(at: 1))
|
||||
}
|
||||
}
|
||||
if let match = regex.firstMatch(in: filename, range: range) {
|
||||
let chapterStr = (filename as NSString).substring(with: match.range(at: 1))
|
||||
let chapterParts = chapterStr.split(separator: "x", maxSplits: 1)
|
||||
@@ -292,8 +314,14 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
UInt32(pageParts[0])!, pageParts.count > 1
|
||||
)
|
||||
|
||||
let size = imageSize(at: dir.appendingPathComponent(filename))!
|
||||
let m_filename = builder.create(string: filename)
|
||||
let imageMetadata = ImageMetadata.createImageMetadata(&builder, doublePage: doublePage, filenameOffset: m_filename, firstPage: page)
|
||||
let imageMetadata = ImageMetadata.createImageMetadata(&builder,
|
||||
doublePage: doublePage,
|
||||
filenameOffset: m_filename,
|
||||
firstPage: page,
|
||||
size: Size(width: UInt32(size.width), height: UInt32(size.height))
|
||||
)
|
||||
|
||||
if currentVolume != nil {
|
||||
if volume != currentVolume {
|
||||
@@ -315,7 +343,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
let chaptersOffset = builder.createVector(ofOffsets: currentChapters)
|
||||
let volumeMetadata = VolumeMetadata.createVolumeMetadata(
|
||||
&builder,
|
||||
volume: MetaValue(main: volume ?? 0, bonus: 0),
|
||||
volume: MetaValue(main: currentVolume, bonus: 0),
|
||||
titleOffset: volumeTitle,
|
||||
chaptersVectorOffset: chaptersOffset
|
||||
)
|
||||
@@ -370,7 +398,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
let chaptersOffset = builder.createVector(ofOffsets: currentChapters)
|
||||
let volumeMetadata = VolumeMetadata.createVolumeMetadata(
|
||||
&builder,
|
||||
volume: MetaValue(main: volume ?? 0, bonus: 0),
|
||||
volume: MetaValue(main: volume, bonus: 0),
|
||||
titleOffset: volumeTitle,
|
||||
chaptersVectorOffset: chaptersOffset
|
||||
)
|
||||
@@ -388,7 +416,7 @@ class ViewController: UIViewController, UIGestureRecognizerDelegate {
|
||||
print("failed reading image file names")
|
||||
}
|
||||
|
||||
let title = builder.create(string: "")
|
||||
let title = builder.create(string: titleValue)
|
||||
let originalLanguage = builder.create(string: "Japanese")
|
||||
let countryOfOrigin = builder.create(string: "Japan")
|
||||
let description = builder.create(string: "")
|
||||
@@ -1238,7 +1266,7 @@ func getGlobalState() -> GlobalState {
|
||||
if let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
|
||||
let path = documentsURL.appendingPathComponent("state.json").path
|
||||
if !fileManager.fileExists(atPath: path) {
|
||||
GlobalState(comicName: nil)
|
||||
return GlobalState(comicName: nil)
|
||||
}
|
||||
do {
|
||||
let json = try Data(
|
||||
|
||||
Reference in New Issue
Block a user