|
- //
- // 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"
- 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()
- }
- }
|