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