Persist favourites

This commit is contained in:
vakrilov
2015-03-21 19:15:15 +02:00
parent a9e6f84c58
commit a33b608ce4
5 changed files with 99 additions and 54 deletions

View File

@ -1,5 +1,6 @@
import observable = require("data/observable"); import observable = require("data/observable");
import dialogs = require("ui/dialogs"); import dialogs = require("ui/dialogs");
import localSettings = require("local-settings");
import button = require("ui/button"); import button = require("ui/button");
var everlive = require("./lib/everlive"); var everlive = require("./lib/everlive");
@ -32,6 +33,38 @@ var conferenceDays: Array<ConferenceDay> = [
]; ];
var sessions: Array<SessionModel> = new Array<SessionModel>(); var sessions: Array<SessionModel> = new Array<SessionModel>();
var FAVOURITES = "FAVOURITES";
var favourites: Array<string>;
try {
favourites = <Array<string>>JSON.parse(localSettings.getString(FAVOURITES, "[]"));
}
catch (error) {
console.log("Error while retrieveing favourites: " + error);
favourites = new Array<string>();
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 el = new everlive("mzacGkKPFlZUfbMq");
var expandExp = { var expandExp = {
"speakers": true "speakers": true
@ -42,14 +75,19 @@ el.data('NextSessions').expand(expandExp).get().then(
var sessionsFromEvelive: Array<Session> = <Array<Session>> data.result; var sessionsFromEvelive: Array<Session> = <Array<Session>> data.result;
for (var i = 0; i < sessionsFromEvelive.length; i++) { 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(); appModel.onDataLoaded();
}, function (error) { }, function (error) {
dialogs.alert("Could not load sessions. Error: " + error); dialogs.alert("Could not load sessions. Error: " + error);
} }
); );
export class AppViewModel extends observable.Observable { 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 }); 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);
}
}
} }

View File

@ -11,16 +11,14 @@ export function pageLoaded(args: observable.EventData) {
page.bindingContext = appViewModel.appModel; page.bindingContext = appViewModel.appModel;
} }
export function toggleFavorite(args: gestures.GestureEventData) {
var item = <appViewModel.SessionModel>args.view.bindingContext;
item.favorite = !item.favorite;
}
export function selectSession(args: listView.ItemEventData) { export function selectSession(args: listView.ItemEventData) {
frame.topmost().navigate({ frame.topmost().navigate({
moduleName: "app/session-page", moduleName: "app/session-page",
context: args.view.bindingContext context: args.view.bindingContext
}); });
} }
export function toggleFavorite(args: gestures.GestureEventData) {
var item = <appViewModel.SessionModel>args.view.bindingContext;
item.toggleFavorite();
}

View File

@ -11,6 +11,5 @@ export function pageNavigatedTo(args: observable.EventData) {
export function toggleFavorite(args: gestures.GestureEventData) { export function toggleFavorite(args: gestures.GestureEventData) {
var item = <appViewModel.SessionModel>args.view.bindingContext; var item = <appViewModel.SessionModel>args.view.bindingContext;
item.toggleFavorite();
item.favorite = !item.favorite;
} }

View File

@ -36,7 +36,7 @@
<!-- Speakers --> <!-- Speakers -->
<Label text="Speakers" cssClass="section-header" row="2" col="1" /> <Label text="Speakers" cssClass="section-header" row="2" col="1" />
<ListView items="{{ speakers }}" row="3" colSpan="2" height="{{ speakers.length * 76 }}" selectedBackgroundColor="#fac950" separatorColor="#FFFFFF"> <ListView items="{{ speakers }}" row="3" colSpan="2" height="{{ speakers.length * 72 }}" selectedBackgroundColor="#fac950" separatorColor="#FFFFFF">
<ListView.itemTemplate> <ListView.itemTemplate>
<GridLayout columns="65, *" cssClass="list-view-row"> <GridLayout columns="65, *" cssClass="list-view-row">
<Image src="{{ '~/app/images/' + picture }}" verticalAlignment="top"/> <Image src="{{ '~/app/images/' + picture }}" verticalAlignment="top"/>