Matt Baer
cda7517224
- Supports choosing from serif, sans, or mono - Remembers preference - Submits the type with the post
158 lines
4.9 KiB
Swift
158 lines
4.9 KiB
Swift
//
|
|
// ViewController.swift
|
|
// writeas
|
|
//
|
|
// Created by Matt Baer on 12/29/15.
|
|
// Copyright © 2015 A Bunch Tell. All rights reserved.
|
|
//
|
|
|
|
import Cocoa
|
|
|
|
class ViewController: NSViewController, NSTextViewDelegate, NSUserNotificationCenterDelegate {
|
|
|
|
@IBOutlet var writerText: NSTextView!
|
|
|
|
let draftFile = "Write.as/draft.txt"
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
loadDocument()
|
|
|
|
writerText.font = NSFont(name: "Lora", size: Preferences.getFontSize())
|
|
writerText.isHorizontallyResizable = false
|
|
writerText.textContainerInset = NSSize(width: 16, height: 16)
|
|
writerText.isAutomaticQuoteSubstitutionEnabled = false
|
|
writerText.isAutomaticDashSubstitutionEnabled = false
|
|
|
|
NSUserNotificationCenter.default.delegate = self
|
|
|
|
// Do any additional setup after loading the view.
|
|
writerText.delegate = self
|
|
}
|
|
|
|
override func viewDidAppear() {
|
|
super.viewDidAppear()
|
|
|
|
configureWindow()
|
|
|
|
// Style the window
|
|
self.view.window!.title = "Write.as"
|
|
self.view.window!.titlebarAppearsTransparent = true
|
|
self.view.window!.isMovableByWindowBackground = true
|
|
self.view.window!.titleVisibility = .hidden
|
|
self.view.window!.backgroundColor = NSColor.white
|
|
}
|
|
|
|
func configureWindow() {
|
|
// Fit textview to window size
|
|
writerText.setFrameSize(NSSize(width: self.view.window!.frame.width, height: self.view.window!.frame.height))
|
|
}
|
|
|
|
override var representedObject: Any? {
|
|
didSet {
|
|
// Update the view, if already loaded.
|
|
}
|
|
}
|
|
|
|
fileprivate func getDraftPath() -> URL? {
|
|
do {
|
|
let baseDir = try FileManager.default.url(for: .documentDirectory, in: .allDomainsMask, appropriateFor: nil, create: true)
|
|
return baseDir.appendingPathComponent(draftFile)
|
|
} catch (let err) {
|
|
print("ERROR getting path: \(err)")
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func saveDocument() {
|
|
// Save whatever's written
|
|
let path = getDraftPath()
|
|
if path == nil {
|
|
return
|
|
}
|
|
|
|
//writing
|
|
do {
|
|
try writerText.textStorage!.string.write(to: path!, atomically: false, encoding: .utf8)// .write(toFile: path.absoluteString, atomically: true, encoding: .utf8)
|
|
} catch (let err) {
|
|
print("ERROR writing: \(err)")
|
|
}
|
|
}
|
|
|
|
func loadDocument() {
|
|
let path = getDraftPath()
|
|
if path == nil {
|
|
return
|
|
}
|
|
do {
|
|
let draftText = try String(contentsOf: path!, encoding: .utf8)
|
|
writerText.string = draftText
|
|
} catch (let err) {
|
|
print("ERROR loading: \(err)")
|
|
}
|
|
}
|
|
|
|
func publish() {
|
|
saveDocument()
|
|
|
|
DispatchQueue.global(qos: .background).async {
|
|
let task = Process()
|
|
task.launchPath = Bundle.main.executablePath! + "/../../Resources/writeas"
|
|
task.arguments = ["--font", Preferences.getFont().rawValue]
|
|
let pipe = Pipe()
|
|
task.standardInput = pipe
|
|
task.launch()
|
|
let fh: FileHandle = pipe.fileHandleForWriting
|
|
fh.write(self.writerText.textStorage!.string.data(using: .utf8)!)
|
|
fh.closeFile()
|
|
task.waitUntilExit()
|
|
|
|
DispatchQueue.main.async {
|
|
var notification = NSUserNotification()
|
|
|
|
// All these values are optional
|
|
notification.title = "Published!"
|
|
notification.informativeText = "The link is copied — press ⌘+V to share it."
|
|
notification.soundName = NSUserNotificationDefaultSoundName
|
|
|
|
NSUserNotificationCenter.default.deliver(notification)
|
|
}
|
|
}
|
|
}
|
|
|
|
func userNotificationCenter(_ center: NSUserNotificationCenter, shouldPresent notification: NSUserNotification) -> Bool {
|
|
return true
|
|
}
|
|
|
|
func toggle(isNight: Bool) {
|
|
let darkBG = NSColor(red:0.13, green:0.13, blue:0.13, alpha:1.0)
|
|
if isNight {
|
|
self.view.window!.backgroundColor = darkBG
|
|
self.writerText.backgroundColor = darkBG
|
|
self.writerText.textColor = NSColor.white
|
|
} else {
|
|
self.view.window!.backgroundColor = NSColor.white
|
|
self.writerText.backgroundColor = NSColor.white
|
|
self.writerText.textColor = NSColor.black
|
|
}
|
|
}
|
|
|
|
func adjustTextSize(increment: Bool) {
|
|
var size = Preferences.getFontSize()
|
|
if increment {
|
|
size += 2
|
|
} else {
|
|
size -= 1
|
|
}
|
|
self.writerText.font = NSFont(name: "Lora", size: size)
|
|
UserDefaults.standard.set(String(Int(size)), forKey: "editor_text_size")
|
|
configureWindow()
|
|
}
|
|
|
|
func setFont(_ font: Preferences.PostFont) {
|
|
self.writerText.font = NSFont(name: font.typeface, size: Preferences.getFontSize())
|
|
}
|
|
}
|
|
|