diff options
| -rw-r--r-- | www/index.html | 9 | ||||
| -rw-r--r-- | www/js/DataModel.js | 10 | ||||
| -rw-r--r-- | www/js/NewsCtrl.js | 100 | ||||
| -rw-r--r-- | www/js/app.js | 54 | ||||
| -rw-r--r-- | www/templates/devoptions.html | 10 | ||||
| -rw-r--r-- | www/templates/news.html | 33 |
6 files changed, 210 insertions, 6 deletions
diff --git a/www/index.html b/www/index.html index 08b09385..122ac169 100644 --- a/www/index.html +++ b/www/index.html @@ -98,6 +98,7 @@ <script src="js/EventServerSettingsCtrl.js"></script> <script src="js/FirstUseCtrl.js"></script> <script src="js/MontageHistoryCtrl.js"></script> + <script src="js/NewsCtrl.js"></script> <script src="lib/ion-datetime-picker/release/ion-datetime-picker.min.js"></script> @@ -225,6 +226,14 @@ </ion-item> </div> + <div ng-if="$root.showBlog"> + <ion-item nav-clear menu-close href="#/news"> + <span class=" item-icon-left" > + <i class="icon ion-radio-waves"></i> + </span>news<span style="color:#268d3a;"> {{$root.newBlogPost}}</span> + </ion-item> + </div> + <div ng-if="$root.platformOS=='android'"> <ion-item ng-click="$root.exitApp();"> <span class=" item-icon-left"> diff --git a/www/js/DataModel.js b/www/js/DataModel.js index 74365687..cff49302 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -66,6 +66,7 @@ angular.module('zmApp.controllers') 'exitOnSleep':false, 'forceNetworkStop':false, 'defaultPushSound': false, + 'enableBlog':true, }; @@ -267,6 +268,13 @@ angular.module('zmApp.controllers') loginData.exitOnSleep = false; } + if (typeof loginData.enableBlog == 'undefined') + { + zmDebug ("enableBlog does not exist. Setting to true"); + loginData.enableBlog = true; + + } + zmLog ("DataModel init recovered this loginData as " + JSON.stringify(loginData)); } else @@ -277,6 +285,7 @@ angular.module('zmApp.controllers') monitorsLoaded = 0; //console.log("Getting out of ZMDataModel init"); + $rootScope.showBlog = loginData.enableBlog; zmDebug ( "loginData structure values: " + JSON.stringify(loginData)); }, @@ -396,6 +405,7 @@ angular.module('zmApp.controllers') setLogin: function (newLogin) { setLogin(newLogin); + $rootScope.showBlog = newLogin.enableBlog; /* diff --git a/www/js/NewsCtrl.js b/www/js/NewsCtrl.js new file mode 100644 index 00000000..a84cbdfc --- /dev/null +++ b/www/js/NewsCtrl.js @@ -0,0 +1,100 @@ +/* jshint -W041 */ +/* jslint browser: true*/ +/* global cordova,StatusBar,angular,console,moment*/ + +angular.module('zmApp.controllers').controller('zmApp.NewsCtrl', ['$scope', '$rootScope', '$ionicModal', 'ZMDataModel','$ionicSideMenuDelegate', '$ionicHistory', '$state', '$http', 'zm', '$localstorage', function ($scope, $rootScope, $ionicModal, ZMDataModel,$ionicSideMenuDelegate, $ionicHistory, $state, $http, zm, $localstorage) { +$scope.openMenu = function () { + $ionicSideMenuDelegate.toggleLeft(); + }; + + + //---------------------------------------------------------------- + // Alarm notification handling + //---------------------------------------------------------------- + $scope.handleAlarms = function() + { + $rootScope.isAlarm=!$rootScope.isAlarm; + if (!$rootScope.isAlarm) + { + $rootScope.alarmCount="0"; + $ionicHistory.nextViewOptions({disableBack: true}); + $state.go("events", {"id": 0}, { reload: true }); + } + }; + + + //------------------------------------------------------------------------- + // Lets make sure we set screen dim properly as we enter + // The problem is we enter other states before we leave previous states + // from a callback perspective in ionic, so we really can't predictably + // reset power state on exit as if it is called after we enter another + // state, that effectively overwrites current view power management needs + //------------------------------------------------------------------------ + $scope.$on('$ionicView.enter', function () { + console.log("**VIEW ** News Ctrl Entered"); + ZMDataModel.setAwake(false); + + + }); + + $scope.isUnread = function(itemdate) + { + var lastDate = $localstorage.get("latestBlogPostChecked"); + if (!lastDate) return true; + var mLastDate = moment(lastDate); + var mItemDate = moment(itemdate); + //var unread = mItemDate.diff(mLastDate) >0) ? true:false; + //console.log (unread); + return (mItemDate.diff(mLastDate) >0) ? true:false; + + + }; + + $scope.loadPost = function (item, itemdate) + { + var lastDate = $localstorage.get("latestBlogPostChecked"); + if (!lastDate) + { + ZMDataModel.zmDebug ("First time checking blog posts, I see"); + $localstorage.set("latestBlogPostChecked", itemdate); + } + + else + { + ZMDataModel.zmDebug ("last post checked is " + lastDate); + ZMDataModel.zmDebug ("current post dated is " + itemdate); + + var mLastDate = moment(lastDate); + var mItemDate = moment(itemdate); + if (mItemDate.diff(mLastDate) >0) + { + ZMDataModel.zmDebug ("Updating lastDate to this post"); + $localstorage.set("latestBlogPostChecked", itemdate); + + if (itemdate == $scope.newsItems[0].date) + { + // we are reading the latest post + $rootScope.newBlogPost=""; + } + } + + } + window.open(item, '_blank', 'location=yes'); + return false; + }; + + $scope.newsItems=[]; + + $http.get (zm.blogUrl) + .success (function(data) + { + //console.log ("Here2"); + console.log (JSON.stringify(data)); + for (var i=0; i<data.length; i++) + { + $scope.newsItems.push({title:data[i].title, url:data[i].url, date:data[i].date}); + } + + }); + +}]); diff --git a/www/js/app.js b/www/js/app.js index 6f7a98d8..716104e7 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -68,6 +68,7 @@ angular.module('zmApp', [ desktopUrl: "/zm", desktopApiUrl: "/api/zm", latestRelease: "https://api.github.com/repos/pliablepixels/zmNinja/releases/latest", + blogUrl:"http://pliablepixels.github.io/feed.json", nphSwitchTimer:6000, eventHistoryTimer:10000, @@ -426,6 +427,40 @@ angular.module('zmApp', [ } //console.log ("UPDATE " + zmVersion); }); + + ZMDataModel.zmLog ("Checking for news updates"); + $http.get(zm.blogUrl) + .success (function (data) { + $rootScope.newBlogPost = ""; + if (data.length <=0) + { + $rootScope.newBlogPost=""; + return; + } + + var lastDate = $localstorage.get("latestBlogPostChecked"); + if (!lastDate) + { + $rootScope.newBlogPost="(new post)"; + return; + } + + var mLastDate = moment(lastDate); + var mItemDate = moment(data[0].date); + + if (mItemDate.diff(mLastDate) >0) + { + ZMDataModel.zmDebug("New post dated " + data[0].date + " found"); + $rootScope.newBlogPost = "(new post)"; + + } + else + { + ZMDataModel.zmDebug("Latest post dated " + data[0].date + " but you read " + lastDate); + } + + + }); } } @@ -720,6 +755,8 @@ angular.module('zmApp', [ $rootScope.newVersionAvailable = ""; $rootScope.userCancelledAuth = false; $rootScope.online = true; + $rootScope.showBlog = false; + $rootScope.newBlogPost=""; //$rootScope.minAlarmCount = "1"; @@ -1067,17 +1104,26 @@ angular.module('zmApp', [ url: "/login", templateUrl: "templates/login.html", controller: 'zmApp.LoginCtrl', - }); + }) - $stateProvider - .state('help', { + + .state('help', { data: { requireLogin: false }, url: "/help", templateUrl: "templates/help.html", controller: 'zmApp.HelpCtrl', - }) + }) + + .state('news', { + data: { + requireLogin: false + }, + url: "/news", + templateUrl: "templates/news.html", + controller: 'zmApp.NewsCtrl', + }) .state('app', { url: '/', diff --git a/www/templates/devoptions.html b/www/templates/devoptions.html index 527a4f4f..27c5fe23 100644 --- a/www/templates/devoptions.html +++ b/www/templates/devoptions.html @@ -106,11 +106,17 @@ </label> - <label> - <ion-toggle ng-model="loginData.enableh264" + <label> + <ion-toggle ng-model="loginData.enableh264" ng-checked="{{loginData.enableh264}}" toggle-class="toggle-calm"> H264 Video support</ion-toggle> </label> + + <label> + <ion-toggle ng-model="loginData.enableBlog" + ng-checked="{{loginData.enableBlog}}" + toggle-class="toggle-calm"> enable news updates</ion-toggle> + </label> </div> diff --git a/www/templates/news.html b/www/templates/news.html new file mode 100644 index 00000000..798580d0 --- /dev/null +++ b/www/templates/news.html @@ -0,0 +1,33 @@ +<ion-view view-title="News"> + + <ion-nav-buttons side="left"> + <button class="button button-icon button-clear ion-navicon" ng-click="openMenu()"></button> + + <button data-badge="{{$root.alarmCount}}" class="animated infinite tada button button-icon button-clear ion-ios-bell notification-badge" ng-click="handleAlarms();" ng-if="$root.isAlarm"></button> + + </ion-nav-buttons> + + + <ion-content > + <div class="list"> + + <span ng-repeat = "post in newsItems"> + <a class="item item-icon-left" ng-click="loadPost(post.url, post.date)" href=""> + <i ng-class="isUnread(post.date) ? 'ion-email-unread': 'ion-email'"></i> + {{post.title}} + {{post.date}} + + </a> + + </span> + + <div ng-if="!newsItems.length"> + <ion-item>Loading...</ion-item> + </div> + + + </div> + + </ion-content> + +</ion-view> |
