Skip to content
This repository has been archived by the owner on Mar 9, 2019. It is now read-only.

Commit

Permalink
🔖 Version 0.2
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasRitter committed Nov 1, 2018
1 parent 3f48ff3 commit 141b10d
Show file tree
Hide file tree
Showing 3 changed files with 212 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/HelpPrinter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package main

import "github.com/gobuffalo/packr"

func printHelpMessage() {
res := packr.NewBox("./res")
help, error := res.FindString("help.txt")
if (error != nil) {
return
}
println(help)
}
164 changes: 164 additions & 0 deletions src/Main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
package main

import (
"github.com/deckarep/gosx-notifier"
"github.com/mholt/archiver"
"github.com/radovskyb/watcher"
log2 "log"
"os"
"strconv"
"time"
)

var verbose = false
var noNotifications = false
var projectFile = ""
var sourcesFolder = ""

func main() {
// Get program arguments.
args := os.Args[1:]

// Todo: Add better flag parsing.
// Todo: Add .framerx file creation.

// Check if no arguments exist or if the only argument is '-help'.
if (len(args) < 2 || (len(args) == 1 && (args[0] == "-help") || args[0] == "❓")) {
// Print the help message.
printHelpMessage()
return
}

// Enable Verbose mode
if (stringInArray("-v", args) || stringInArray("📢", args)) {
verbose = true
log("Verose Mode enabled.")
}

// Disable notifications
if (stringInArray("-nn", args) || stringInArray("🔕", args)) {
noNotifications = false
log("Notifications disabled")
}

// Set project file
log("Setting projectFile variable to " + args[0])
projectFile = args[0]

// Set sources folder
log("Setting projectFile variable to " + args[1])
sourcesFolder = args[1]

notify(1)

// Create a new file watcher
w := watcher.New()

// Make the file watcher react to write events
w.FilterOps(watcher.Write)

// Define what happens when an event fires.
go func() {
for {
select {
case event := <- w.Event: {
str := strconv.FormatInt(event.Size(), 10)
log("Update detected! New file size: " + str)
notify(0)
extractSources()
}
}
}
}()

if err := w.Add(args[0]); err != nil {
error(err.Error())
}

// Start the watching process - it'll check for changes every 100ms.
if err := w.Start(time.Millisecond * 100); err != nil {
error(err.Error())
}
}

// Checks if a string is in an Array.
func stringInArray(a string, list []string) bool {
for _, b := range list {
if b == a {
return true
}
}
return false
}

// Pushes a notification with a specific type.
// Types:
// 0: Update notification
// 1: Start notification
func notify(notifType int) {
log("Preparing to push notification..")

switch notifType {
case 0:
if (!noNotifications) {
note := gosxnotifier.NewNotification("Sources have been updated 👌")
note.Sender = "design.lucasritter.framerx.watcher"
note.Group = "design.lucasritter.framerx.watcher"
note.Title = "Framer X Watcher 👀"

err := note.Push()

if err != nil {
error("Failed to push notification..")
}
}
break;

case 1:
if (!noNotifications) {
note := gosxnotifier.NewNotification("Started watching " + projectFile + " 😎")
note.Sender = "design.lucasritter.framerx.watcher"
note.Group = "design.lucasritter.framerx.watcher"
note.Title = "Framer X Watcher 👀"

err := note.Push()

if err != nil {
error("Failed to push notification..")
}
}
break;
}
}

// Logs a message.
func log(message string) {
if (verbose) {
println(message)
}
}

// Also logs a message.
func error(message string) {
log2.Fatal(message)
}

// Extracts the sources from the Framer X project file.
func extractSources() {
// Checks if the path exists.
if (!pathExists(sourcesFolder)) {
log("Path doesn't exist yet. Creating..")
os.Mkdir(sourcesFolder, 0700)
}
archiver.Zip.Open(projectFile, sourcesFolder)
}

// Returns a value indicating whether a path exists or not.
func pathExists(name string) bool {
if _, err := os.Stat(name); err != nil {
if os.IsNotExist(err) {
return false
}
}
return true
}
36 changes: 36 additions & 0 deletions src/res/help.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@


🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
🔥 🔥
🔥 Experimental 🔥
🔥 Framer X 🔥
🔥 File Watcher 🔥
🔥 v0.2 🔥
🔥 🔥
🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥


Basic Usage:
framerxwatcher <FramerX Project File> <Source Folder> [auth-key] [flags]

[Coming soon!]
If the project file doesn't exist yet, you need to specify an auth-key
for Framer X's package registry. Aternatively, another Framer X project
can be used.

If the source folder doesn't exist yet, it'll be automatically created,
so no worries about that 😊

To exit the script, use ctrl + c.

Additional Flags (Both Emoji 💁‍ and non-Emoji text works):
-v / 📢 : Verbose Mode
-help / ❓ : This message
-nn / 🔕 : Disables notifications

Cool Info:
This script was made by Lucas Ritter https://github.com/lucasritter,
who was annoyed that he couldn't properly share the source code of
some of his projects. He also likes to talk about himself in the
third person.

0 comments on commit 141b10d

Please sign in to comment.