From a33b608ce4e7e97b93367b53b6ae68bb7aa3c1c2 Mon Sep 17 00:00:00 2001 From: vakrilov Date: Sat, 21 Mar 2015 19:15:15 +0200 Subject: [PATCH] Persist favourites --- apps/TelerikNEXT/app-view-model.ts | 52 +++++++++++++++++- apps/TelerikNEXT/main-page.ts | 12 ++--- apps/TelerikNEXT/main-page.xml | 84 +++++++++++++++--------------- apps/TelerikNEXT/session-page.ts | 3 +- apps/TelerikNEXT/session-page.xml | 2 +- 5 files changed, 99 insertions(+), 54 deletions(-) diff --git a/apps/TelerikNEXT/app-view-model.ts b/apps/TelerikNEXT/app-view-model.ts index 3de982468..3ca3d6106 100644 --- a/apps/TelerikNEXT/app-view-model.ts +++ b/apps/TelerikNEXT/app-view-model.ts @@ -1,5 +1,6 @@ import observable = require("data/observable"); import dialogs = require("ui/dialogs"); +import localSettings = require("local-settings"); import button = require("ui/button"); var everlive = require("./lib/everlive"); @@ -32,6 +33,38 @@ var conferenceDays: Array = [ ]; var sessions: Array = new Array(); +var FAVOURITES = "FAVOURITES"; +var favourites: Array; +try { + favourites = >JSON.parse(localSettings.getString(FAVOURITES, "[]")); +} +catch (error) { + console.log("Error while retrieveing favourites: " + error); + favourites = new Array(); + updateFavourites() +} + +function addToFavourites(session: SessionModel) { + if (favourites.indexOf(session.Id) < 0) { + favourites.push(session.Id); + updateFavourites(); + } +} + +function removeFromFavourites(session: SessionModel) { + var index = favourites.indexOf(session.Id); + if (index >= 0) { + favourites.splice(index, 1); + updateFavourites(); + } +} + +function updateFavourites() { + var newValue = JSON.stringify(favourites); + localSettings.setString(FAVOURITES, newValue); +} + + var el = new everlive("mzacGkKPFlZUfbMq"); var expandExp = { "speakers": true @@ -42,14 +75,19 @@ el.data('NextSessions').expand(expandExp).get().then( var sessionsFromEvelive: Array = > data.result; for (var i = 0; i < sessionsFromEvelive.length; i++) { - sessions.push(new SessionModel(sessionsFromEvelive[i])); + var newSession = new SessionModel(sessionsFromEvelive[i]); + if (favourites.indexOf(newSession.Id) >= 0) { + newSession.favorite = true; + } + sessions.push(newSession); } + appModel.onDataLoaded(); }, function (error) { dialogs.alert("Could not load sessions. Error: " + error); } -); + ); export class AppViewModel extends observable.Observable { @@ -213,4 +251,14 @@ export class SessionModel extends observable.Observable implements Session { this.notify({ object: this, eventName: observable.knownEvents.propertyChange, propertyName: "favorite", value: this._favorite }); } } + + public toggleFavorite() { + this.favorite = !this.favorite; + if (this.favorite) { + addToFavourites(this); + } + else { + removeFromFavourites(this); + } + } } diff --git a/apps/TelerikNEXT/main-page.ts b/apps/TelerikNEXT/main-page.ts index ea2046184..a7ea12436 100644 --- a/apps/TelerikNEXT/main-page.ts +++ b/apps/TelerikNEXT/main-page.ts @@ -11,16 +11,14 @@ export function pageLoaded(args: observable.EventData) { page.bindingContext = appViewModel.appModel; } -export function toggleFavorite(args: gestures.GestureEventData) { - var item = args.view.bindingContext; - - item.favorite = !item.favorite; -} - - export function selectSession(args: listView.ItemEventData) { frame.topmost().navigate({ moduleName: "app/session-page", context: args.view.bindingContext }); +} + +export function toggleFavorite(args: gestures.GestureEventData) { + var item = args.view.bindingContext; + item.toggleFavorite(); } \ No newline at end of file diff --git a/apps/TelerikNEXT/main-page.xml b/apps/TelerikNEXT/main-page.xml index d46e54618..a4b05e9f7 100644 --- a/apps/TelerikNEXT/main-page.xml +++ b/apps/TelerikNEXT/main-page.xml @@ -29,61 +29,61 @@ - - - - - - - - + + + + + + + + - - + + - + - - - + + + - + - + - + - + - - - + + + - + diff --git a/apps/TelerikNEXT/session-page.ts b/apps/TelerikNEXT/session-page.ts index bd9539238..b8c87a427 100644 --- a/apps/TelerikNEXT/session-page.ts +++ b/apps/TelerikNEXT/session-page.ts @@ -11,6 +11,5 @@ export function pageNavigatedTo(args: observable.EventData) { export function toggleFavorite(args: gestures.GestureEventData) { var item = args.view.bindingContext; - - item.favorite = !item.favorite; + item.toggleFavorite(); } \ No newline at end of file diff --git a/apps/TelerikNEXT/session-page.xml b/apps/TelerikNEXT/session-page.xml index 02be3e0ea..ed558404b 100644 --- a/apps/TelerikNEXT/session-page.xml +++ b/apps/TelerikNEXT/session-page.xml @@ -36,7 +36,7 @@