Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ name := "sbt-growl-plugin"
organization := "me.lessis"

version <<= sbtVersion(v =>
if (v.startsWith("0.11") || v.startsWith("0.12") || v.startsWith("0.13")) "0.1.3"
if (v.startsWith("0.11") || v.startsWith("0.12") || v.startsWith("0.13")) "0.1.4-SNAPSHOT"
else error("unsupported sbt version %s" format v)
)

scalacOptions ++= Seq("-feature", "-deprecation")

sbtVersion in Global := "0.13.0-RC1"
sbtVersion in Global := "0.13.6"

scalaVersion in Global := "2.10.2"
scalaVersion in Global := "2.10.4"

resolvers += Opts.resolver.sonatypeReleases

Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=0.12.4
sbt.version=0.13.6
24 changes: 22 additions & 2 deletions src/main/scala/Growler.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ trait Growler {

object Growler {
def apply(): Growler = {
def isNotificationCenterFriendly = try {
Process("which terminal-notifier").!! matches ".*terminal-notifier\\s+"
} catch {
case e: Exception => false
}

def isLibNotifyBinFriendly = try {
Process("which notify-send").!! matches ".*notify-send\\s+"
} catch {
Expand All @@ -25,7 +31,8 @@ object Growler {
// TODO - Is this enough or too strong?
def isMac = System.getProperty("os.name").toLowerCase().indexOf("mac") >= 0

if(isMac) new MacGrowler
if(isMac && isNotificationCenterFriendly) new NotificationCenterGrowler
else if(isMac) new MacGrowler
else if(isLibNotifyBinFriendly) new LibNotifyBinGrowler
else if(isGrowlNotifyFriendly) new GrowlNotifyGrowler
else new NullGrowler
Expand All @@ -37,11 +44,24 @@ final class MacGrowler extends Growler {
val img = msg.imagePath.getOrElse("")
val base = meow.Growl title(msg.title) identifier(msg.id.getOrElse(msg.title)) message(msg.message)
val rich = if(img.isEmpty) base else base.image(img)
(if(msg.sticky) rich.sticky() else rich).meow
(if(msg.sticky) rich.sticky() else rich).meow
}
override def toString = "growl"
}

final class NotificationCenterGrowler extends Growler {
override def notify(msg: GrowlResultFormat): Unit = {
val args = Seq(
"-appIcon", msg.imagePath.getOrElse(""),
"-title", msg.title,
"-message", msg.message,
"-activate", "com.apple.Terminal") // TODO some weirdos still use iTerm
val sender = Process("terminal-notifier" +: args)
sender.!
}
override def toString = "terminal-notifier"
}

final class NullGrowler extends Growler {
override def notify(msg: GrowlResultFormat): Unit = ()
override def toString = "<no growler found on this system>"
Expand Down
6 changes: 3 additions & 3 deletions src/main/scala/GrowlingTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package growl

import sbt._
import Keys._
import sbt.Project.Initialize
import sbt.Def.Initialize

object GrowlingTests extends sbt.Plugin {
import GrowlKeys._
Expand All @@ -16,9 +16,9 @@ object GrowlingTests extends sbt.Plugin {
val growler = SettingKey[Growler]("growler", "Interface used to growl test results at users. RRRRRRRRR!")
}

val Growl = config("growl")
val Growl = config("growl") extend(Test)

// override val settings = super.settings ++ growlSettings
override lazy val projectSettings = growlSettings

private def growlingTestListenerTask: Def.Initialize[sbt.Task[sbt.TestReportListener]] =
(groupFormatter in Growl, exceptionFormatter in Growl, aggregateFormatter in Growl, growler in Growl, streams) map {
Expand Down