Improve storage, paths
This commit is contained in:
@@ -20,41 +20,12 @@ extension Content {
|
||||
return generateInternal(page, in: language)
|
||||
}
|
||||
|
||||
private func startGenerating() -> Bool {
|
||||
guard !isGeneratingWebsite else {
|
||||
return false
|
||||
}
|
||||
// TODO: Fix bug where multiple generating operations can be started
|
||||
// due to dispatch of locking property on main queue
|
||||
DispatchQueue.main.async {
|
||||
self.isGeneratingWebsite = true
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private func endGenerating() {
|
||||
DispatchQueue.main.async {
|
||||
self.isGeneratingWebsite = false
|
||||
}
|
||||
}
|
||||
|
||||
private func generateInternal(_ page: Page, in language: ContentLanguage) -> Bool {
|
||||
let generator = LocalizedWebsiteGenerator(
|
||||
content: self,
|
||||
language: language)
|
||||
if !generator.generate(page: page) {
|
||||
print("Generation failed")
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
// MARK: Paths to items
|
||||
|
||||
private func makeCleanAbsolutePath(_ path: String) -> String {
|
||||
("/" + path).replacingOccurrences(of: "//", with: "/")
|
||||
}
|
||||
|
||||
// MARK: Paths to items
|
||||
|
||||
func absoluteUrlPrefixForTag(_ tag: Tag, language: ContentLanguage) -> String {
|
||||
makeCleanAbsolutePath(settings.paths.tagsOutputFolderPath + "/" + tag.localized(in: language).urlComponent)
|
||||
}
|
||||
@@ -101,4 +72,86 @@ extension Content {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// MARK: Generation
|
||||
|
||||
private func startGenerating() -> Bool {
|
||||
guard !isGeneratingWebsite else {
|
||||
return false
|
||||
}
|
||||
// TODO: Fix bug where multiple generating operations can be started
|
||||
// due to dispatch of locking property on main queue
|
||||
DispatchQueue.main.async {
|
||||
self.isGeneratingWebsite = true
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private func endGenerating() {
|
||||
DispatchQueue.main.async {
|
||||
self.isGeneratingWebsite = false
|
||||
}
|
||||
}
|
||||
|
||||
private func generateInternal(_ page: Page, in language: ContentLanguage) -> Bool {
|
||||
let pagesFolder = settings.paths.pagesOutputFolderPath
|
||||
guard storage.create(folder: pagesFolder, in: .outputPath) else {
|
||||
print("Failed to generate output folder")
|
||||
return false
|
||||
}
|
||||
let imageGenerator = ImageGenerator(
|
||||
storage: storage,
|
||||
settings: settings)
|
||||
|
||||
let pageGenerator = PageGenerator(
|
||||
content: self,
|
||||
imageGenerator: imageGenerator)
|
||||
|
||||
let content: String
|
||||
let results: PageGenerationResults
|
||||
do {
|
||||
(content, results) = try pageGenerator.generate(page: page, language: language)
|
||||
} catch {
|
||||
print("Failed to generate page \(page.id) in language \(language): \(error)")
|
||||
return false
|
||||
}
|
||||
guard !content.trimmed.isEmpty else {
|
||||
#warning("Generate page with placeholder content")
|
||||
return true
|
||||
}
|
||||
|
||||
let path = page.absoluteUrl(in: language) + ".html"
|
||||
do {
|
||||
try storage.write(content: content, to: path)
|
||||
} catch {
|
||||
print("Failed to save page \(page.id): \(error)")
|
||||
return false
|
||||
}
|
||||
guard imageGenerator.runJobs(callback: { _ in }) else {
|
||||
return false
|
||||
}
|
||||
guard copy(requiredFiles: results.files) else {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
return true
|
||||
}
|
||||
|
||||
private func copy(requiredFiles: Set<FileResource>) -> Bool {
|
||||
//print("Copying \(requiredVideoFiles.count) files...")
|
||||
for file in requiredFiles {
|
||||
guard !file.isExternallyStored else {
|
||||
continue
|
||||
}
|
||||
|
||||
do {
|
||||
try storage.copy(file: file.id, to: file.absoluteUrl)
|
||||
} catch {
|
||||
print("Failed to copy file \(file.id): \(error)")
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user