Merged nicos notifications, add cookie support
authorAndrew Karpow <andy@ndyk.de>
Fri, 17 Jan 2014 17:34:22 +0000 (18:34 +0100)
committerAndrew Karpow <andy@ndyk.de>
Fri, 17 Jan 2014 17:34:22 +0000 (18:34 +0100)
htdocs/index.html
htdocs/js/mpd.js
src/http_server.c

index bd4778b..57e5835 100644 (file)
             </button>
           </div>
 
+             <div class="btn-group-vertical btn-block btn-group-lg" data-toggle="buttons">
+               <button type="button" class="btn btn-default" id="btnnotify">
+                    <span class="glyphicon glyphicon-comment"></span> Notifications
+               </button>
+             </div>
+
         </div>
       </div><!-- /.col-md-2 -->
     </div><!-- /.row -->
   ================================================== -->
   <!-- Placed at the end of the document so the pages load faster -->
   <script src="js/jquery-1.10.2.min.js"></script>
+  <script src="js/jquery.cookie.js"></script>
   <script src="js/bootstrap.min.js"></script>
   <script src="js/bootstrap-notify.js"></script>
   <script src="js/bootstrap-slider.js"></script>
index a742e46..4a701eb 100644 (file)
@@ -1,7 +1,9 @@
 var socket;
 var last_state;
 var current_app;
+var lastSongTitle = "";
 var current_song = new Object();
+var desktopNotification;
 
 var app = $.sammy(function() {
     this.before('/', function(e, data) {
@@ -60,6 +62,12 @@ $(document).ready(function(){
             socket.send("MPD_API_SET_SEEK,"+current_song.currentSongId+","+seekVal);
         }
     });
+
+    if(!notificationsSupported())
+        $('#btnnotify').addClass("disabled");
+    else
+        if ($.cookie("notification") === "true")
+            $('#btnnotify').addClass("active")
 });
 
 
@@ -125,7 +133,6 @@ function webSocketConnect() {
                             $(this).children().last().find("a").stop().remove();
                         }
                     });
-
                     break;
                 case "browse":
                     if(current_app !== 'browse')
@@ -269,10 +276,14 @@ function webSocketConnect() {
                         notification += obj.data.artist + "<br />";
                     }
 
-                    $('.top-right').notify({
-                        message:{html: notification},
-                        type: "info",
-                    }).show();
+                    if ($.cookie("notification") === "true")
+                        songNotify(obj.data.title, obj.data.artist + " " + obj.data.album );
+                    else
+                        $('.top-right').notify({
+                            message:{html: notification},
+                            type: "info",
+                        }).show();
+                        
                     break;
                 case "error":
                     $('.top-right').notify({
@@ -394,10 +405,43 @@ $('#btnrepeat').on('click', function (e) {
     socket.send("MPD_API_TOGGLE_REPEAT," + ($(this).hasClass('active') ? 0 : 1));
 });
 
+$('#btnnotify').on('click', function (e) {
+    console.log("setting this");
+    if($.cookie("notification") === "true")
+        $.cookie("notification", false);
+    else {
+        window.webkitNotifications.requestPermission();
+        if (window.webkitNotifications.checkPermission() == 0)
+        {
+            $.cookie("notification", true);
+            $('btnnotify').addClass("active");
+        }
+    }
+});
+
 function getVersion()
 {
     $.get( "/api/get_version", function(response) {
         $('#ympd_version').text(response.data.ympd_version);
         $('#mpd_version').text(response.data.mpd_version);
     });
-}
\ No newline at end of file
+}
+
+function notificationsSupported() {
+    return "webkitNotifications" in window;
+}
+
+function songNotify(artist, title) {
+    if (!notificationsSupported())
+          return;
+
+    if (window.webkitNotifications.checkPermission() == 0) {
+          var notification = window.webkitNotifications.createNotification("assets/favicon.ico", artist, title);
+          notification.show();
+          setTimeout(function(notification) {
+                 notification.cancel();
+          }, 2000, notification);
+    } else {
+          window.webkitNotifications.requestPermission();
+    }
+}
index 15e8bbf..1756745 100644 (file)
@@ -25,6 +25,7 @@ static const struct serveable whitelist[] = {
     { "/js/bootstrap.min.js", "text/javascript" },
     { "/js/mpd.js", "text/javascript" },
     { "/js/jquery-1.10.2.min.js", "text/javascript" },
+    { "/js/jquery.cookie.js", "text/javascript" },
     { "/js/bootstrap-slider.js", "text/javascript" },
     { "/js/bootstrap-notify.js", "text/javascript" },
     { "/js/sammy.js", "text/javascript" },