Merge lp:~nik90/cliffhanger/convergence-1 into lp:cliffhanger

Proposed by Nekhelesh Ramananthan on 2014-05-14
Status: Needs review
Proposed branch: lp:~nik90/cliffhanger/convergence-1
Merge into: lp:cliffhanger
Diff against target: 11825 lines (+11078/-0) (has conflicts)
116 files modified
.bzrignore (+1/-0)
Flashback.desktop (+10/-0)
Flashback.json (+6/-0)
Flashback.qml (+286/-0)
Flashback.qmlproject (+46/-0)
Makefile (+18/-0)
backend/backend.js (+204/-0)
backend/sha1.js (+202/-0)
components/BlurredBackground.qml (+50/-0)
components/Carousel.qml (+125/-0)
components/DesaturatedThumbnail.qml (+60/-0)
components/DetailCarousel.qml (+192/-0)
components/Development.qml (+25/-0)
components/Grid.qml (+278/-0)
components/ImageLabel.qml (+53/-0)
components/ListViewExpandable.qml (+80/-0)
components/LoadingIndicator.qml (+60/-0)
components/Notification.qml (+190/-0)
components/NowWatching.qml (+147/-0)
components/RatingChooser.qml (+106/-0)
components/Rotater.qml (+66/-0)
components/SearchBox.qml (+57/-0)
components/SearchPage.qml (+74/-0)
components/SidebarMenuItem.qml (+155/-0)
components/StatusIcons.qml (+68/-0)
components/TabletSidebar.qml (+58/-0)
components/Thumbnail.qml (+41/-0)
components/TraktAction.qml (+28/-0)
components/TraktPopup.qml (+123/-0)
components/TraktRating.qml (+56/-0)
debian/changelog (+27/-0)
debian/compat (+1/-0)
debian/control (+23/-0)
debian/copyright (+28/-0)
debian/install (+9/-0)
debian/rules (+7/-0)
debian/source/format (+1/-0)
graphics/find@32.svg (+140/-0)
graphics/play@32.svg (+98/-0)
graphics/search_icon@8.svg (+153/-0)
graphics/settings@32.svg (+138/-0)
graphics/share@32.svg (+96/-0)
manifest.json (+15/-0)
models/Activity.qml (+97/-0)
models/AiringShows.qml (+66/-0)
models/BaseModel.qml (+58/-0)
models/BasePostModel.qml (+64/-0)
models/Cast.qml (+38/-0)
models/Crew.qml (+37/-0)
models/Episode.qml (+55/-0)
models/Genres.qml (+35/-0)
models/Movie.qml (+57/-0)
models/Movies.qml (+37/-0)
models/People.qml (+36/-0)
models/Person.qml (+48/-0)
models/PersonCast.qml (+40/-0)
models/PersonCrew.qml (+40/-0)
models/SeasonEpisodes.qml (+38/-0)
models/Show.qml (+65/-0)
models/ShowSeasons.qml (+37/-0)
models/Shows.qml (+42/-0)
models/Trailer.qml (+37/-0)
models/TraktAccount.qml (+28/-0)
models/TraktCast.qml (+37/-0)
models/TraktCheckIn.qml (+39/-0)
models/TraktComments.qml (+39/-0)
models/TraktRatingModel.qml (+82/-0)
models/TraktRecommendedMovies.qml (+38/-0)
models/TraktSeen.qml (+39/-0)
models/TraktShowWatchlist.qml (+52/-0)
models/TraktUserComment.qml (+35/-0)
models/TraktUserRating.qml (+35/-0)
models/TraktUserWatchlist.qml (+48/-0)
models/TraktWatchlist.qml (+33/-0)
models/TrendingMovies.qml (+40/-0)
po/Cliffhanger.pot (+404/-0)
tests/TestModel.qml (+40/-0)
tests/autopilot/Cliffhanger/__init__.py (+131/-0)
tests/autopilot/Cliffhanger/main/__init__.py (+1/-0)
tests/autopilot/Cliffhanger/main/test_main.py (+23/-0)
tests/autopilot/run (+11/-0)
ui/About.qml (+79/-0)
ui/CastPage.qml (+48/-0)
ui/CommentsPage.qml (+316/-0)
ui/CrewPage.qml (+46/-0)
ui/EpisodePage.qml (+325/-0)
ui/HomeTab.qml (+351/-0)
ui/HomeTabTablet.qml (+134/-0)
ui/MovieByGenre.qml (+86/-0)
ui/MovieByRating.qml (+50/-0)
ui/MovieByRecommendation.qml (+52/-0)
ui/MoviePage.qml (+540/-0)
ui/MovieTab.qml (+169/-0)
ui/MovieTabTablet.qml (+160/-0)
ui/PersonPage.qml (+309/-0)
ui/PersonTab.qml (+71/-0)
ui/SearchAll.qml (+114/-0)
ui/SearchMovie.qml (+41/-0)
ui/SearchPerson.qml (+41/-0)
ui/SearchTv.qml (+41/-0)
ui/SeasonPage.qml (+299/-0)
ui/SettingPage.qml (+137/-0)
ui/Trakt.qml (+95/-0)
ui/TraktCheckIn.qml (+185/-0)
ui/TraktLogin.qml (+284/-0)
ui/TvPage.qml (+448/-0)
ui/TvSeasons.qml (+62/-0)
ui/TvTab.qml (+176/-0)
walkthrough/Slide1.qml (+76/-0)
walkthrough/Slide2.qml (+71/-0)
walkthrough/Slide3.qml (+66/-0)
walkthrough/Slide4.qml (+66/-0)
walkthrough/Slide5.qml (+65/-0)
walkthrough/Slide6.qml (+108/-0)
walkthrough/Slide7.qml (+97/-0)
walkthrough/Walkthrough.qml (+187/-0)
Conflict adding file Flashback.desktop.  Moved existing file to Flashback.desktop.moved.
Conflict adding file Flashback.json.  Moved existing file to Flashback.json.moved.
Conflict adding file Flashback.qml.  Moved existing file to Flashback.qml.moved.
Conflict adding file Flashback.qmlproject.  Moved existing file to Flashback.qmlproject.moved.
Conflict adding file Makefile.  Moved existing file to Makefile.moved.
Conflict adding file backend.  Moved existing file to backend.moved.
Conflict adding file components.  Moved existing file to components.moved.
Conflict adding file debian.  Moved existing file to debian.moved.
Conflict adding file design.jpg.  Moved existing file to design.jpg.moved.
Conflict adding file flashback.png.  Moved existing file to flashback.png.moved.
Conflict adding file graphics.  Moved existing file to graphics.moved.
Conflict adding file manifest.json.  Moved existing file to manifest.json.moved.
Conflict adding file models.  Moved existing file to models.moved.
Conflict adding file po.  Moved existing file to po.moved.
Conflict adding file tests.  Moved existing file to tests.moved.
Conflict adding file ui.  Moved existing file to ui.moved.
Conflict adding file walkthrough.  Moved existing file to walkthrough.moved.
To merge this branch: bzr merge lp:~nik90/cliffhanger/convergence-1
Reviewer Review Type Date Requested Status
Nekhelesh Ramananthan Pending
Review via email: mp+219568@code.launchpad.net

Description of the change

test code diff

To post a comment you must log in.

Unmerged revisions

67. By Nekhelesh Ramananthan on 2014-04-02

Added hometab convergence

66. By Nekhelesh Ramananthan on 2014-04-01

Miscellaneous fixes

65. By Nekhelesh Ramananthan on 2014-04-01

Tweaked grid behaviour

64. By Nekhelesh Ramananthan on 2014-04-01

Fixed the height of ImageLabel component

63. By Nekhelesh Ramananthan on 2014-04-01

Added workaround for Layout bug

62. By Nekhelesh Ramananthan on 2014-04-01

Added workaround for layouts bug

61. By Nekhelesh Ramananthan on 2014-04-01

Finalised movie tab tablet UI

60. By Nekhelesh Ramananthan on 2014-04-01

Moved sidebar to a new component

59. By Nekhelesh Ramananthan on 2014-04-01

Finalised sidebar menu item implementation

58. By Nekhelesh Ramananthan on 2014-04-01

MovieTab workaround for layouts visibility issue

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file '.bzrignore'
2--- .bzrignore 1970-01-01 00:00:00 +0000
3+++ .bzrignore 2014-05-14 17:33:57 +0000
4@@ -0,0 +1,1 @@
5+*.qmlproject.user
6
7=== added file 'Flashback.desktop'
8--- Flashback.desktop 1970-01-01 00:00:00 +0000
9+++ Flashback.desktop 2014-05-14 17:33:57 +0000
10@@ -0,0 +1,10 @@
11+[Desktop Entry]
12+Version=1.0
13+Name=Flashback
14+Comment=My project description
15+Exec=qmlscene $@ /usr/share/flashback/Flashback.qml
16+Icon=flashback.png
17+Terminal=false
18+Type=Application
19+Keywords=Movie,Film,TV,Show,Entertainment;
20+X-Ubuntu-Touch=true
21
22=== renamed file 'Flashback.desktop' => 'Flashback.desktop.moved'
23=== added file 'Flashback.json'
24--- Flashback.json 1970-01-01 00:00:00 +0000
25+++ Flashback.json 2014-05-14 17:33:57 +0000
26@@ -0,0 +1,6 @@
27+{
28+ "policy_groups": [
29+ "networking"
30+ ],
31+ "policy_version": 1.1
32+}
33\ No newline at end of file
34
35=== renamed file 'Flashback.json' => 'Flashback.json.moved'
36=== added file 'Flashback.qml'
37--- Flashback.qml 1970-01-01 00:00:00 +0000
38+++ Flashback.qml 2014-05-14 17:33:57 +0000
39@@ -0,0 +1,286 @@
40+/*
41+ * Flashback - Entertainment app for Ubuntu
42+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
43+ *
44+ * This program is free software: you can redistribute it and/or modify
45+ * it under the terms of the GNU General Public License version 3 as
46+ * published by the Free Software Foundation.
47+ *
48+ * This program is distributed in the hope that it will be useful,
49+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
50+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
51+ * GNU General Public License for more details.
52+ *
53+ * You should have received a copy of the GNU General Public License
54+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
55+ *
56+ */
57+
58+import QtQuick 2.0
59+import U1db 1.0 as U1db
60+import Ubuntu.Components 0.1
61+import "backend/backend.js" as Backend
62+import "models"
63+import "ui"
64+
65+MainView {
66+ id: mainView
67+
68+ // objectName for functional testing purposes (autopilot-qt5)
69+ objectName: "mainView"
70+
71+ // Note! applicationName needs to match the "name" field of the click manifest
72+ applicationName: "com.ubuntu.developer.nik90.flashback"
73+
74+ /*
75+ This property enables the application to change orientation
76+ when the device is rotated. The default is false.
77+ */
78+ automaticOrientation: true
79+
80+ /*
81+ This property is to ensure that the input text fields are not hidden
82+ by the on-screen keyboard
83+ */
84+ anchorToKeyboard: true
85+
86+ width: units.gu(50)
87+ height: units.gu(100)
88+
89+ // TODO: This is a temporary app background. Final background color needs to be decided.
90+ backgroundColor: UbuntuColors.coolGrey
91+
92+ // Property to determine if the tablet view should be shown
93+ property bool tabletLandscapeForm: mainView.width >= units.gu(130)
94+ property bool tabletPortraitForm: mainView.width >= units.gu(80) && mainView.width < units.gu(130)
95+
96+ actions: [
97+ Action {
98+ id: appSettingsAction
99+ text: i18n.tr("Settings")
100+ keywords: i18n.tr("Settings;Setting;Configuration;Account;Authenticate")
101+ description: i18n.tr("Application Settings")
102+ iconSource: Qt.resolvedUrl("graphics/settings.svg")
103+ onTriggered: pagestack.push(Qt.resolvedUrl("ui/SettingPage.qml"))
104+ },
105+ Action {
106+ id: returnHomeAction
107+ text: i18n.tr("Home")
108+ keywords: i18n.tr("Return;Navigate;Home;Page;Tab")
109+ description: i18n.tr("Get back to the first page")
110+ iconSource: Qt.resolvedUrl("graphics/home.png")
111+ onTriggered: {
112+ while(pagestack.depth !== 1)
113+ pagestack.pop()
114+ }
115+ }
116+ ]
117+
118+ // Database to store app data locally
119+ U1db.Database {
120+ id: db
121+ path: "settings"
122+ }
123+
124+ // Document to store the firstrun value of the app
125+ U1db.Document {
126+ id: firstRunDocument
127+ database: db
128+ docId: "firstRun"
129+ create: true
130+ defaults: { "firstrun": "true" }
131+ }
132+
133+ // Document to store user's Trakt account credentials (password encrypted before storage)
134+ U1db.Document {
135+ id: traktLogin
136+ database: db
137+ docId: "traktLoginCredentials"
138+ create: true
139+ defaults: { "username": "johnDoe", "password": "password", "status": "disabled" }
140+ Component.onCompleted: pagestack.account_status = contents.status
141+ onContentsChanged: {
142+ if(traktLogin.contents.status === "disabled")
143+ userActivityLoader.sourceComponent = undefined;
144+ else
145+ userActivityLoader.sourceComponent = userActivity
146+ }
147+ }
148+
149+ // Document to store the user's movie activity on Trakt
150+ U1db.Document {
151+ id: movieActivityDocument
152+ database: db
153+ docId: "traktMovieActivity"
154+ create: true
155+ defaults: { "name": "default", "id": "default", "imdb": "default", "runtime": "default", "year": "default", "trailer": "default","poster": "default", "fanart": "default" }
156+ function setValues(Name, Id, Imdb, Runtime, Year, Trailer, Poster, Fanart) {
157+ movieActivityDocument.contents = {
158+ name: Name,
159+ id: Id,
160+ imdb: Imdb,
161+ runtime: Runtime,
162+ year: Year,
163+ trailer: Trailer,
164+ poster: Poster,
165+ fanart: Fanart
166+ }
167+ }
168+ }
169+
170+ // Document to store the user's tv activity on Trakt
171+ U1db.Document {
172+ id: showActivityDocument
173+ database: db
174+ docId: "traktShowActivity"
175+ create: true
176+ defaults: { "name": "default", "id": "default", "imdb": "default", "episode_title": "default", "season": "default", "number": "default" ,"poster": "default", "fanart": "default" }
177+ function setValues(Name, Id, Imdb, Episode_title, Season, number, Poster, Fanart) {
178+ showActivityDocument.contents = {
179+ name: Name,
180+ id: Id,
181+ imdb: Imdb,
182+ episode_title: Episode_title,
183+ season: Season,
184+ number: number,
185+ poster: Poster,
186+ fanart: Fanart
187+ }
188+ }
189+ }
190+
191+ // Document to store the user's watchlist activity on Trakt
192+ U1db.Document {
193+ id: watchlistActivityDocument
194+ database: db
195+ docId: "traktWatchlistActivity"
196+ create: true
197+ defaults: { "movie": "default", "show": "default" }
198+ }
199+
200+ // Document to track user show's episode seen/unseen activity on Trakt
201+ U1db.Document {
202+ id: episodeSeenActivityDocument
203+ database: db
204+ docId: "traktEpisodeSeenActivity"
205+ create: true
206+ defaults: { "episode": "default" }
207+ }
208+
209+ Loader { id: userActivityLoader }
210+
211+ Component {
212+ id: userActivity
213+ Activity {
214+ id: _userActivity
215+
216+ username: traktLogin.contents.username
217+ password: traktLogin.contents.password
218+
219+ onActivityDocumentChanged: {
220+ if(activityDocument.type === "movie") {
221+ showActivityDocument.setValues("default", "default", "default", "default", "default", "default", "default", "default")
222+ movieActivityDocument.setValues(activityDocument.name, activityDocument.id, activityDocument.imdb, activityDocument.runtime, activityDocument.year, activityDocument.trailer, activityDocument.poster, activityDocument.fanart)
223+ }
224+ else if(activityDocument.type === "episode") {
225+ movieActivityDocument.setValues("default", "default", "default", "default", "default", "default", "default", "default")
226+ showActivityDocument.setValues(activityDocument.name, activityDocument.id, activityDocument.imdb, activityDocument.episode_title, activityDocument.season, activityDocument.number, activityDocument.poster, activityDocument.fanart)
227+ }
228+ // If user is not watching anything, set both documents to default
229+ else if(activityDocument.type === "default") {
230+ movieActivityDocument.setValues("default", "default", "default", "default", "default", "default", "default", "default")
231+ showActivityDocument.setValues("default", "default", "default", "default", "default", "default", "default", "default")
232+ }
233+ }
234+ }
235+ }
236+
237+ PageStack {
238+ id: pagestack
239+
240+ // Properties to hold the application details which are then used throughout the application for consistency
241+ property string app_version: "0.3.3"
242+ property string app_name: "Flashback"
243+ property string last_updated: "28 March 2014"
244+
245+ // Property to hold the trakt account status to allow for detecting account changes after the app is open
246+ property string account_status
247+
248+ // Property to hold the user movie/show status to allow for activity changes after the app is open
249+ property string movieName
250+ property string showName
251+
252+ Component.onCompleted: {
253+ if(String(firstRunDocument.contents.firstrun) === "true") {
254+ console.log("[LOG]: Running app for the first time. Opening Walkthrough: " + firstRunDocument.contents.firstrun)
255+ push(Qt.resolvedUrl("walkthrough/Walkthrough.qml"));
256+ }
257+ else
258+ push(rootComponent);
259+ }
260+
261+ Component {
262+ id: rootComponent
263+ Tabs {
264+ id: root
265+
266+ onSelectedTabChanged: {
267+ if(root.selectedTab == moviesTab)
268+ movieLoader.source = Qt.resolvedUrl("ui/MovieTab.qml")
269+ else if(root.selectedTab == tvTab)
270+ tvLoader.source = Qt.resolvedUrl("ui/TvTab.qml")
271+ else if(root.selectedTab == peopleTab)
272+ peopleLoader.source = Qt.resolvedUrl("ui/PersonTab.qml")
273+ }
274+
275+ Tab {
276+ id: homeTab
277+ title: i18n.tr("Home")
278+ page: HomeTab {}
279+ }
280+
281+ Tab {
282+ id: moviesTab
283+ title: i18n.tr("Movies")
284+ page: Loader {
285+ id: movieLoader
286+ parent: moviesTab
287+ anchors {
288+ left: parent.left
289+ right: parent.right
290+ bottom: parent.bottom
291+ }
292+ }
293+ }
294+
295+ Tab {
296+ id: tvTab
297+ title: i18n.tr("TV")
298+ page: Loader {
299+ id: tvLoader
300+ parent: tvTab
301+ anchors {
302+ left: parent.left
303+ right: parent.right
304+ bottom: parent.bottom
305+ }
306+ }
307+ }
308+
309+ Tab {
310+ id: peopleTab
311+ title: i18n.tr("Celeb")
312+ page: Loader {
313+ id: peopleLoader
314+ parent: peopleTab
315+ anchors {
316+ left: parent.left
317+ right: parent.right
318+ bottom: parent.bottom
319+ }
320+ }
321+ }
322+ }
323+ }
324+ }
325+}
326
327=== renamed file 'Flashback.qml' => 'Flashback.qml.moved'
328=== added file 'Flashback.qmlproject'
329--- Flashback.qmlproject 1970-01-01 00:00:00 +0000
330+++ Flashback.qmlproject 2014-05-14 17:33:57 +0000
331@@ -0,0 +1,46 @@
332+/* File generated by Qt Creator (with Ubuntu Plugin), version 2.8.1 */
333+
334+import QmlProject 1.1
335+
336+Project {
337+ mainFile: "Flashback.qml"
338+
339+ /* Include .qml, .js, and image files from current directory and subdirectories */
340+ QmlFiles {
341+ directory: "."
342+ }
343+ JavaScriptFiles {
344+ directory: "."
345+ }
346+ ImageFiles {
347+ directory: "."
348+ }
349+ Files {
350+ filter: "*.desktop"
351+ }
352+ Files {
353+ filter: "Makefile"
354+ }
355+ Files {
356+ directory: "html"
357+ filter: "*"
358+ }
359+ Files {
360+ directory: "img/"
361+ filter: "*"
362+ }
363+ Files {
364+ directory: "css/"
365+ filter: "*"
366+ }
367+ Files {
368+ directory: "tests/"
369+ filter: "*"
370+ }
371+ Files {
372+ directory: "debian"
373+ filter: "*"
374+ }
375+ /* List of plugin directories passed to QML runtime */
376+ importPaths: [ "." ,"/usr/bin","/usr/lib/x86_64-linux-gnu/qt5/qml" ]
377+}
378
379=== renamed file 'Flashback.qmlproject' => 'Flashback.qmlproject.moved'
380=== added file 'Makefile'
381--- Makefile 1970-01-01 00:00:00 +0000
382+++ Makefile 2014-05-14 17:33:57 +0000
383@@ -0,0 +1,18 @@
384+# More information: https://wiki.ubuntu.com/Touch/Testing
385+#
386+# Notes for autopilot tests:
387+# -----------------------------------------------------------
388+# In order to run autopilot tests:
389+# sudo apt-add-repository ppa:autopilot/ppa
390+# sudo apt-get update
391+# sudo apt-get install python-autopilot autopilot-qt
392+#############################################################
393+
394+all:
395+
396+autopilot:
397+ chmod +x tests/autopilot/run
398+ tests/autopilot/run
399+
400+run:
401+ /usr/bin/qmlscene $@ Flashback.qml
402
403=== renamed file 'Makefile' => 'Makefile.moved'
404=== added directory 'backend'
405=== renamed directory 'backend' => 'backend.moved'
406=== added file 'backend/backend.js'
407--- backend/backend.js 1970-01-01 00:00:00 +0000
408+++ backend/backend.js 2014-05-14 17:33:57 +0000
409@@ -0,0 +1,204 @@
410+/*
411+ * Flashback - Entertainment app for Ubuntu
412+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
413+ *
414+ * This program is free software: you can redistribute it and/or modify
415+ * it under the terms of the GNU General Public License version 3 as
416+ * published by the Free Software Foundation.
417+ *
418+ * This program is distributed in the hope that it will be useful,
419+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
420+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
421+ * GNU General Public License for more details.
422+ *
423+ * You should have received a copy of the GNU General Public License
424+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
425+ *
426+ */
427+
428+var credentials = {
429+ baseUrl: "http://api.themoviedb.org/3",
430+ apiKey: "d0a2929acb64b7c203071e87a621dfb3",
431+ trakt_apiKey: "20a7a6b2d0c3b58acbd81841c40355b04b46c475",
432+ trakt_baseUrl: "http://api.trakt.tv"
433+}
434+
435+/*
436+ Movies
437+ */
438+
439+function nowPlayingMoviesUrl() {
440+ return credentials.baseUrl + "/movie/now_playing" + "?api_key=" + credentials.apiKey;
441+}
442+
443+function trendingMoviesUrl() {
444+ return credentials.trakt_baseUrl + "/movies/trending.json/" + credentials.trakt_apiKey;
445+}
446+
447+function similarMoviesUrl(movie_id) {
448+ return credentials.baseUrl + "/movie/" + movie_id + "/similar_movies" + "?api_key=" + credentials.apiKey;
449+}
450+
451+function upcomingMoviesUrl() {
452+ return credentials.baseUrl + "/movie/upcoming" + "?api_key=" + credentials.apiKey;
453+}
454+
455+function topRatedMoviesUrl() {
456+ return credentials.baseUrl + "/movie/top_rated" + "?api_key=" + credentials.apiKey;
457+}
458+
459+function movieUrl(movie_id, options) {
460+ options = options || {};
461+ var base = credentials.baseUrl + "/movie/"+ movie_id + "?api_key=" + credentials.apiKey;
462+ if ( options.appendToResponse )
463+ return base + "&append_to_response=" + options.appendToResponse.join(',');
464+ else
465+ return base;
466+}
467+
468+function traktMovieUrl(movie_id) {
469+ return credentials.trakt_baseUrl + "/movie/summary.json/" + credentials.trakt_apiKey + "/" + movie_id;
470+}
471+
472+function filterByGenreUrl(genre_id) {
473+ return credentials.baseUrl + "/genre/" + genre_id + "/movies" + "?api_key=" + credentials.apiKey;
474+}
475+
476+//Genre
477+function genreUrl() {
478+ return credentials.baseUrl + "/genre/list" + "?api_key=" + credentials.apiKey;
479+}
480+
481+// Cast
482+function movieCastUrl(movie_id) {
483+ return credentials.baseUrl + "/movie/"+ movie_id + "/credits" + "?api_key=" + credentials.apiKey;
484+}
485+
486+// Crew
487+function movieCrewUrl(movie_id) {
488+ return credentials.baseUrl + "/movie/"+ movie_id + "/credits" + "?api_key=" + credentials.apiKey;
489+}
490+
491+function trendingShowsUrl() {
492+ return credentials.trakt_baseUrl + "/shows/trending.json/" + credentials.trakt_apiKey;
493+}
494+
495+/*
496+ TV Shows
497+ */
498+
499+function tvUrl(tv_id) {
500+ return credentials.trakt_baseUrl + "/show/summary.json/" + credentials.trakt_apiKey + "/" + tv_id;
501+}
502+
503+function tvSeasons(tv_id) {
504+ return credentials.trakt_baseUrl + "/show/seasons.json/" + credentials.trakt_apiKey + "/" + tv_id;
505+}
506+
507+function tvSeasonUrl(tv_id, season_number) {
508+ return credentials.trakt_baseUrl + "/show/season.json/" + credentials.trakt_apiKey + "/" + tv_id + "/" + season_number;
509+}
510+
511+function tvEpisodeUrl(tv_id, season_number, episode_number) {
512+ return credentials.trakt_baseUrl + "/show/episode/summary.json/" + credentials.trakt_apiKey + "/" + tv_id + "/" + season_number + "/" + episode_number;
513+}
514+
515+/*
516+ People
517+ */
518+
519+function popularPeopleUrl() {
520+ return credentials.baseUrl + "/person/popular" + "?api_key=" + credentials.apiKey;
521+}
522+
523+function personUrl(person_id, options) {
524+ options = options || {};
525+ var base = credentials.baseUrl + "/person/"+ person_id + "?api_key=" + credentials.apiKey;
526+ if ( options.appendToResponse )
527+ return base + "&append_to_response=" + options.appendToResponse.join(',');
528+ else
529+ return base;
530+}
531+
532+/*
533+ Search - Movies, TV and People
534+ */
535+
536+function searchUrl(type, term) {
537+ if(type === "tv")
538+ return credentials.trakt_baseUrl + "/search/shows.json/" + credentials.trakt_apiKey + "?query=" + encodeURIComponent(term);
539+ else
540+ return credentials.baseUrl + "/search/"+ type + "?api_key=" + credentials.apiKey + "&query=" + encodeURIComponent(term);
541+}
542+
543+/*
544+ Trakt Services - Check-in, comments, user subscribed shows etc
545+ */
546+
547+function traktVerifyUrl() {
548+ return credentials.trakt_baseUrl + "/account/test/" + credentials.trakt_apiKey
549+}
550+
551+function traktCreateAccount() {
552+ return credentials.trakt_baseUrl + "/account/create/" + credentials.trakt_apiKey
553+}
554+
555+function userActivity(username) {
556+ return credentials.trakt_baseUrl + "/user/watching.json/" + credentials.trakt_apiKey + "/" + username
557+}
558+
559+function recommendedMoviesUrl() {
560+ return credentials.trakt_baseUrl + "/recommendations/movies/" + credentials.trakt_apiKey
561+}
562+
563+function traktAddRatingUrl(type) {
564+ return credentials.trakt_baseUrl + "/rate/" + type + "/" + credentials.trakt_apiKey
565+}
566+
567+function traktAddCommentUrl(type) {
568+ return credentials.trakt_baseUrl + "/comment/" + type + "/" + credentials.trakt_apiKey
569+}
570+
571+function traktCommentsUrl(type, id) {
572+ return credentials.trakt_baseUrl + "/" + type + "/comments.json/" + credentials.trakt_apiKey + "/" + id
573+}
574+
575+function traktEpisodeCommentsUrl(id, season, episode) {
576+ return credentials.trakt_baseUrl + "/show/episode/comments.json/" + credentials.trakt_apiKey + "/" + id + "/" + season + "/" + episode
577+}
578+
579+function traktCheckInUrl(type) {
580+ return credentials.trakt_baseUrl + "/" + type + "/checkin/" + credentials.trakt_apiKey
581+}
582+
583+function cancelTraktCheckIn(type) {
584+ return credentials.trakt_baseUrl + "/" + type + "/cancelcheckin/" + credentials.trakt_apiKey
585+}
586+
587+function traktSeenUrl(type) {
588+ return credentials.trakt_baseUrl + "/" + type + "/seen/" + credentials.trakt_apiKey
589+}
590+
591+function cancelTraktSeen(type) {
592+ return credentials.trakt_baseUrl + "/" + type + "/unseen/" + credentials.trakt_apiKey
593+}
594+
595+function userShowWatchlist(username) {
596+ return credentials.trakt_baseUrl + "/user/watchlist/shows.json/" + credentials.trakt_apiKey + "/" + username
597+}
598+
599+function userShows(username, startDate, noOfDays) {
600+ return credentials.trakt_baseUrl + "/user/calendar/shows.json/" + credentials.trakt_apiKey + "/" + username + "/" + startDate + "/" + noOfDays
601+}
602+
603+function traktWatchlistUrl(type) {
604+ return credentials.trakt_baseUrl + "/" + type + "/watchlist/" + credentials.trakt_apiKey
605+}
606+
607+function traktUnwatchlistUrl(type) {
608+ return credentials.trakt_baseUrl + "/" + type + "/unwatchlist/" + credentials.trakt_apiKey
609+}
610+
611+function userWatchlistMovies(username) {
612+ return credentials.trakt_baseUrl + "/user/watchlist/movies.json/" + credentials.trakt_apiKey + "/" + username
613+}
614
615=== added file 'backend/sha1.js'
616--- backend/sha1.js 1970-01-01 00:00:00 +0000
617+++ backend/sha1.js 2014-05-14 17:33:57 +0000
618@@ -0,0 +1,202 @@
619+/*
620+ * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
621+ * in FIPS PUB 180-1
622+ * Version 2.1a Copyright Paul Johnston 2000 - 2002.
623+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
624+ * Distributed under the BSD License
625+ * See http://pajhome.org.uk/crypt/md5 for details.
626+ */
627+
628+/*
629+ * Configurable variables. You may need to tweak these to be compatible with
630+ * the server-side, but the defaults work in most cases.
631+ */
632+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
633+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
634+var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
635+
636+/*
637+ * These are the functions you'll usually want to call
638+ * They take string arguments and return either hex or base-64 encoded strings
639+ */
640+function sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
641+function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
642+function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
643+function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
644+function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
645+function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}
646+
647+/*
648+ * Perform a simple self-test to see if the VM is working
649+ */
650+function sha1_vm_test()
651+{
652+ return sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
653+}
654+
655+/*
656+ * Calculate the SHA-1 of an array of big-endian words, and a bit length
657+ */
658+function core_sha1(x, len)
659+{
660+ /* append padding */
661+ x[len >> 5] |= 0x80 << (24 - len % 32);
662+ x[((len + 64 >> 9) << 4) + 15] = len;
663+
664+ var w = Array(80);
665+ var a = 1732584193;
666+ var b = -271733879;
667+ var c = -1732584194;
668+ var d = 271733878;
669+ var e = -1009589776;
670+
671+ for(var i = 0; i < x.length; i += 16)
672+ {
673+ var olda = a;
674+ var oldb = b;
675+ var oldc = c;
676+ var oldd = d;
677+ var olde = e;
678+
679+ for(var j = 0; j < 80; j++)
680+ {
681+ if(j < 16) w[j] = x[i + j];
682+ else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
683+ var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
684+ safe_add(safe_add(e, w[j]), sha1_kt(j)));
685+ e = d;
686+ d = c;
687+ c = rol(b, 30);
688+ b = a;
689+ a = t;
690+ }
691+
692+ a = safe_add(a, olda);
693+ b = safe_add(b, oldb);
694+ c = safe_add(c, oldc);
695+ d = safe_add(d, oldd);
696+ e = safe_add(e, olde);
697+ }
698+ return Array(a, b, c, d, e);
699+
700+}
701+
702+/*
703+ * Perform the appropriate triplet combination function for the current
704+ * iteration
705+ */
706+function sha1_ft(t, b, c, d)
707+{
708+ if(t < 20) return (b & c) | ((~b) & d);
709+ if(t < 40) return b ^ c ^ d;
710+ if(t < 60) return (b & c) | (b & d) | (c & d);
711+ return b ^ c ^ d;
712+}
713+
714+/*
715+ * Determine the appropriate additive constant for the current iteration
716+ */
717+function sha1_kt(t)
718+{
719+ return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
720+ (t < 60) ? -1894007588 : -899497514;
721+}
722+
723+/*
724+ * Calculate the HMAC-SHA1 of a key and some data
725+ */
726+function core_hmac_sha1(key, data)
727+{
728+ var bkey = str2binb(key);
729+ if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);
730+
731+ var ipad = Array(16), opad = Array(16);
732+ for(var i = 0; i < 16; i++)
733+ {
734+ ipad[i] = bkey[i] ^ 0x36363636;
735+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
736+ }
737+
738+ var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
739+ return core_sha1(opad.concat(hash), 512 + 160);
740+}
741+
742+/*
743+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
744+ * to work around bugs in some JS interpreters.
745+ */
746+function safe_add(x, y)
747+{
748+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
749+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
750+ return (msw << 16) | (lsw & 0xFFFF);
751+}
752+
753+/*
754+ * Bitwise rotate a 32-bit number to the left.
755+ */
756+function rol(num, cnt)
757+{
758+ return (num << cnt) | (num >>> (32 - cnt));
759+}
760+
761+/*
762+ * Convert an 8-bit or 16-bit string to an array of big-endian words
763+ * In 8-bit function, characters >255 have their hi-byte silently ignored.
764+ */
765+function str2binb(str)
766+{
767+ var bin = Array();
768+ var mask = (1 << chrsz) - 1;
769+ for(var i = 0; i < str.length * chrsz; i += chrsz)
770+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
771+ return bin;
772+}
773+
774+/*
775+ * Convert an array of big-endian words to a string
776+ */
777+function binb2str(bin)
778+{
779+ var str = "";
780+ var mask = (1 << chrsz) - 1;
781+ for(var i = 0; i < bin.length * 32; i += chrsz)
782+ str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
783+ return str;
784+}
785+
786+/*
787+ * Convert an array of big-endian words to a hex string.
788+ */
789+function binb2hex(binarray)
790+{
791+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
792+ var str = "";
793+ for(var i = 0; i < binarray.length * 4; i++)
794+ {
795+ str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
796+ hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
797+ }
798+ return str;
799+}
800+
801+/*
802+ * Convert an array of big-endian words to a base-64 string
803+ */
804+function binb2b64(binarray)
805+{
806+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
807+ var str = "";
808+ for(var i = 0; i < binarray.length * 4; i += 3)
809+ {
810+ var triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16)
811+ | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
812+ | ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
813+ for(var j = 0; j < 4; j++)
814+ {
815+ if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
816+ else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
817+ }
818+ }
819+ return str;
820+}
821
822=== added directory 'components'
823=== renamed directory 'components' => 'components.moved'
824=== added file 'components/BlurredBackground.qml'
825--- components/BlurredBackground.qml 1970-01-01 00:00:00 +0000
826+++ components/BlurredBackground.qml 2014-05-14 17:33:57 +0000
827@@ -0,0 +1,50 @@
828+/*
829+ * Flashback - Entertainment app for Ubuntu
830+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
831+ *
832+ * This program is free software: you can redistribute it and/or modify
833+ * it under the terms of the GNU General Public License version 3 as
834+ * published by the Free Software Foundation.
835+ *
836+ * This program is distributed in the hope that it will be useful,
837+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
838+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
839+ * GNU General Public License for more details.
840+ *
841+ * You should have received a copy of the GNU General Public License
842+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
843+ *
844+ */
845+
846+import QtQuick 2.0
847+import Ubuntu.Components 0.1
848+import QtGraphicalEffects 1.0
849+
850+Rectangle {
851+ id: blurredBackground
852+
853+ property alias background: backgroundImage.source
854+
855+ anchors.fill: parent
856+ z: -1
857+
858+ // Background Image
859+ Image {
860+ id: backgroundImage
861+ anchors.fill: parent
862+ }
863+
864+ // Element to blur the background image
865+ FastBlur {
866+ anchors.fill: backgroundImage
867+ source: backgroundImage
868+ radius: units.gu(8)
869+ }
870+
871+ // Element to add a black curtain (dimmer) to increase the readiblity of the text
872+ Rectangle {
873+ color: "black"
874+ opacity: 0.7
875+ anchors.fill: parent
876+ }
877+}
878
879=== added file 'components/Carousel.qml'
880--- components/Carousel.qml 1970-01-01 00:00:00 +0000
881+++ components/Carousel.qml 2014-05-14 17:33:57 +0000
882@@ -0,0 +1,125 @@
883+/*
884+ * Flashback - Entertainment app for Ubuntu
885+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
886+ *
887+ * This program is free software: you can redistribute it and/or modify
888+ * it under the terms of the GNU General Public License version 3 as
889+ * published by the Free Software Foundation.
890+ *
891+ * This program is distributed in the hope that it will be useful,
892+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
893+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
894+ * GNU General Public License for more details.
895+ *
896+ * You should have received a copy of the GNU General Public License
897+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
898+ *
899+ */
900+
901+import QtQuick 2.0
902+import Ubuntu.Components 0.1
903+import Ubuntu.Components.ListItems 0.1
904+
905+/*
906+ The carousel is an element which displays a header title with a flickable row of ubuntu shape thumbnails.
907+ */
908+Column {
909+ id: carousel
910+
911+ // Header Title
912+ property alias header: header.text
913+
914+ // Carousel Data Model
915+ property alias dataModel: carouselList.model
916+
917+ // Carousel Thumbnail size (On the phone, show 2 + 2/3 cover art always by dynamically adjusting the size)
918+ property real size: parent.width < units.gu(50) ? (3 * (parent.width - 2*carouselList.spacing))/8 : units.gu(17)
919+
920+ // Property to hold the watched status
921+ property bool showTraktUserStatus: false
922+
923+ // Signal triggered when a thumb
924+ signal thumbClicked(var model)
925+
926+ width: parent.width
927+ spacing: units.gu(1)
928+ /*
929+ WORKAROUND: Due to bug https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1300668, the opacity and height are used
930+ to show/hide the carousel. Previously the declaration was,
931+
932+ visible: carouselList.model.count > 0
933+ height: header.height + carouselList.height
934+ */
935+ opacity: carouselList.model.count > 0 ? 1 : 0
936+ height: opacity === 1 ? header.height + carouselList.height : 0
937+
938+ Behavior on height {
939+ UbuntuNumberAnimation {}
940+ }
941+
942+ Header {
943+ id: header
944+ text: i18n.tr("Default Header Title")
945+ }
946+
947+ ListView {
948+ id: carouselList
949+
950+ width: parent.width
951+ height: 1.5*carousel.size + units.gu(5)
952+ orientation: Qt.Horizontal
953+ spacing: units.gu(2)
954+
955+ // Element consists of a Picture and a text label below it.
956+ delegate: Item {
957+ id: thumbContainer
958+
959+ width: carousel.size
960+ height: thumbColumn.height
961+
962+ StatusIcons {
963+ id: traktStatusContainer
964+
965+ showWatchedIcon: traktStatusContainer.visible ? watched ? (watched === "true" ? true : false) : false : false
966+ showWatchListIcon: traktStatusContainer.visible ? watchlist ? (watchlist === "true" ? true : false) : false : false
967+ visible: carousel.showTraktUserStatus
968+
969+ anchors {
970+ top: parent.top
971+ left: parent.left
972+ }
973+ }
974+
975+ Column {
976+ id: thumbColumn
977+ spacing: units.gu(0.5)
978+
979+ // Widget to curve edges and encase the thumbnail
980+ Thumbnail {
981+ id: carouselThumb
982+ width: carousel.size
983+ height: 1.5*carousel.size
984+ thumbSource: thumb_url
985+ }
986+
987+ // Label showing the movie/tv show name
988+ Label {
989+ id: carouselThumbDescription
990+
991+ text: name
992+ maximumLineCount: 2
993+ elide: Text.ElideRight
994+ wrapMode: Text.WordWrap
995+ width: carouselThumb.width
996+ horizontalAlignment: Text.AlignHCenter
997+ }
998+ }
999+
1000+ MouseArea {
1001+ anchors.fill: parent
1002+ onClicked: carousel.thumbClicked(model)
1003+ }
1004+ }
1005+ }
1006+}
1007+
1008
1009=== added file 'components/DesaturatedThumbnail.qml'
1010--- components/DesaturatedThumbnail.qml 1970-01-01 00:00:00 +0000
1011+++ components/DesaturatedThumbnail.qml 2014-05-14 17:33:57 +0000
1012@@ -0,0 +1,60 @@
1013+/*
1014+ * Flashback - Entertainment app for Ubuntu
1015+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1016+ *
1017+ * This program is free software: you can redistribute it and/or modify
1018+ * it under the terms of the GNU General Public License version 3 as
1019+ * published by the Free Software Foundation.
1020+ *
1021+ * This program is distributed in the hope that it will be useful,
1022+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1023+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1024+ * GNU General Public License for more details.
1025+ *
1026+ * You should have received a copy of the GNU General Public License
1027+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1028+ *
1029+ */
1030+
1031+import QtQuick 2.0
1032+import Ubuntu.Components 0.1
1033+import QtGraphicalEffects 1.0
1034+
1035+/*
1036+ Component to wrap up an image in a ubuntu shape container and desaturate it. This is very similar to the
1037+ Thumbnail component except with the desaturation.
1038+ */
1039+UbuntuShape {
1040+ id: desaturatedThumb
1041+
1042+ property alias thumbSource: thumbPic.source
1043+ property alias ready: loading.running
1044+
1045+ image: Image {
1046+ id: thumbPic
1047+ fillMode: Image.PreserveAspectFit
1048+ visible: false
1049+ }
1050+
1051+ HueSaturation {
1052+ id: saturated
1053+ anchors.fill: parent
1054+ source: thumbPic
1055+ hue: 0
1056+ saturation: -1.0
1057+ lightness: 0
1058+ visible: false
1059+ }
1060+
1061+ OpacityMask {
1062+ anchors.fill: saturated
1063+ source: saturated
1064+ maskSource: desaturatedThumb
1065+ }
1066+
1067+ ActivityIndicator {
1068+ id: loading
1069+ running: thumbPic.status != Image.Ready
1070+ anchors.centerIn: parent
1071+ }
1072+}
1073
1074=== added file 'components/DetailCarousel.qml'
1075--- components/DetailCarousel.qml 1970-01-01 00:00:00 +0000
1076+++ components/DetailCarousel.qml 2014-05-14 17:33:57 +0000
1077@@ -0,0 +1,192 @@
1078+/*
1079+ * Flashback - Entertainment app for Ubuntu
1080+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1081+ *
1082+ * This program is free software: you can redistribute it and/or modify
1083+ * it under the terms of the GNU General Public License version 3 as
1084+ * published by the Free Software Foundation.
1085+ *
1086+ * This program is distributed in the hope that it will be useful,
1087+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1088+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1089+ * GNU General Public License for more details.
1090+ *
1091+ * You should have received a copy of the GNU General Public License
1092+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1093+ *
1094+ */
1095+
1096+import QtQuick 2.0
1097+import Ubuntu.Components 0.1
1098+import Ubuntu.Components.ListItems 0.1
1099+
1100+/*
1101+ The Detail Carousel is very similar to Carousel. It shows additional information such as Episode title,
1102+ season and episode number and the release date. This carousel is primarily for displaying tv shows.
1103+ */
1104+Column {
1105+ id: _detailCarousel
1106+
1107+ // Header Title
1108+ property alias header: _header.text
1109+
1110+ // Carousel Data Model
1111+ property alias dataModel: _carouselList.model
1112+
1113+ // Carousel Thumbnail size (On the phone, show 2 + 2/3 cover art always by dynamically adjusting the size)
1114+ property int size: parent.width < units.gu(50) ? (3 * (parent.width - 2*_carouselList.spacing))/8 : units.gu(17)
1115+
1116+ // Property to show/hide date
1117+ property bool showDate: true
1118+
1119+ // Signal triggered when a thumb
1120+ signal thumbClicked(var model)
1121+
1122+ width: parent.width
1123+ spacing: units.gu(1)
1124+ /*
1125+ WORKAROUND: Due to bug https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1300668, the opacity and height are used
1126+ to show/hide the carousel. Previously the declaration was,
1127+
1128+ visible: _carouselList.model.count > 0
1129+ height: _header.height + _carouselList.height
1130+ */
1131+ opacity: _carouselList.model.count > 0 ? 1 : 0
1132+ height: opacity === 1 ? _header.height + _carouselList.height : 0
1133+
1134+ Header {
1135+ id: _header
1136+ text: i18n.tr("Default Header Title")
1137+ }
1138+
1139+ ListView {
1140+ id: _carouselList
1141+
1142+ width: parent.width
1143+ height: 1.5*_detailCarousel.size + units.gu(5)
1144+ orientation: Qt.Horizontal
1145+ spacing: units.gu(2)
1146+
1147+ // Element consists of a Picture and a text label below it.
1148+ delegate: Item {
1149+ id: _carouselItem
1150+ width: _detailCarousel.size
1151+ height: _thumbColumn.height
1152+
1153+ Column {
1154+ id: _thumbColumn
1155+ spacing: units.gu(0.5)
1156+
1157+ // Widget to curve edges and encase the thumbnail
1158+ Thumbnail {
1159+ id: _carouselThumb
1160+ radius: "medium"
1161+ width: _detailCarousel.size
1162+ height: 1.5*_detailCarousel.size
1163+ thumbSource: thumb_url
1164+
1165+ Item {
1166+ id: bottomContainer
1167+ clip: true
1168+ height: parent.height/5
1169+ anchors {
1170+ left: parent.left
1171+ right: parent.right
1172+ bottom: parent.bottom
1173+ }
1174+
1175+ UbuntuShape {
1176+ id: detailsContainer
1177+ height: _carouselThumb.height
1178+ anchors {
1179+ bottom: parent.bottom
1180+ left: parent.left
1181+ right: parent.right
1182+ }
1183+ radius: "medium"
1184+ color: Qt.rgba(0,0,0,0.8)
1185+ }
1186+
1187+ Column {
1188+ id: detailsColumn
1189+ anchors {
1190+ left: parent.left
1191+ right: parent.right
1192+ verticalCenter: parent.verticalCenter
1193+ margins: units.gu(1)
1194+ }
1195+
1196+ // Label showing the tv episode name
1197+ Label {
1198+ id: _episodeTitle
1199+ text: episode_name
1200+ elide: Text.ElideRight
1201+ font.bold: true
1202+ anchors {
1203+ left: parent.left
1204+ right: parent.right
1205+ }
1206+ }
1207+
1208+ // Container to hold the tv show season number and release date
1209+ Item {
1210+ height: childrenRect.height
1211+ anchors {
1212+ left: parent.left
1213+ right: parent.right
1214+ }
1215+
1216+ Label {
1217+ id: _seasonDetail
1218+ text: "S" + season + "E" + episode
1219+ width: parent.width * (2/5)
1220+ elide: Text.ElideRight
1221+ fontSize: "small"
1222+ anchors.left: parent.left
1223+ }
1224+
1225+ Label {
1226+ id: _seasonDate
1227+
1228+ font.bold: true
1229+ fontSize: "small"
1230+ color: "LightGreen"
1231+ visible: showDate
1232+ text: get_date(episode_air_date)
1233+ elide: Text.ElideRight
1234+ width: parent.width * (3/5)
1235+ anchors.right: parent.right
1236+ horizontalAlignment: Text.AlignRight
1237+
1238+ function get_date(iso) {
1239+ var date, month
1240+ date = iso.split('T')[0].split('-')
1241+ month = Qt.locale().standaloneMonthName(date[1] - 1, Locale.ShortFormat)
1242+ return date[2] + " " + month
1243+ }
1244+ }
1245+ }
1246+ }
1247+ }
1248+ }
1249+
1250+ // Label showing the tv show name
1251+ Label {
1252+ id: _carouselThumbDescription
1253+ text: name
1254+ maximumLineCount: 2
1255+ elide: Text.ElideRight
1256+ wrapMode: Text.WordWrap
1257+ width: _carouselThumb.width
1258+ horizontalAlignment: Text.AlignHCenter
1259+ }
1260+ }
1261+
1262+ MouseArea {
1263+ anchors.fill: parent
1264+ onClicked: _detailCarousel.thumbClicked(model)
1265+ }
1266+ }
1267+ }
1268+}
1269+
1270
1271=== added file 'components/Development.qml'
1272--- components/Development.qml 1970-01-01 00:00:00 +0000
1273+++ components/Development.qml 2014-05-14 17:33:57 +0000
1274@@ -0,0 +1,25 @@
1275+/*
1276+ * Flashback - Entertainment app for Ubuntu
1277+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1278+ *
1279+ * This program is free software: you can redistribute it and/or modify
1280+ * it under the terms of the GNU General Public License version 3 as
1281+ * published by the Free Software Foundation.
1282+ *
1283+ * This program is distributed in the hope that it will be useful,
1284+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1285+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1286+ * GNU General Public License for more details.
1287+ *
1288+ * You should have received a copy of the GNU General Public License
1289+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1290+ *
1291+ */
1292+
1293+import QtQuick 2.0
1294+import Ubuntu.Components 0.1
1295+
1296+Label{
1297+ text: i18n.tr("Still in development")
1298+ color: Theme.palette.normal.baseText
1299+}
1300
1301=== added file 'components/Grid.qml'
1302--- components/Grid.qml 1970-01-01 00:00:00 +0000
1303+++ components/Grid.qml 2014-05-14 17:33:57 +0000
1304@@ -0,0 +1,278 @@
1305+/*
1306+ * Flashback - Entertainment app for Ubuntu
1307+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1308+ *
1309+ * This program is free software: you can redistribute it and/or modify
1310+ * it under the terms of the GNU General Public License version 3 as
1311+ * published by the Free Software Foundation.
1312+ *
1313+ * This program is distributed in the hope that it will be useful,
1314+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1315+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1316+ * GNU General Public License for more details.
1317+ *
1318+ * You should have received a copy of the GNU General Public License
1319+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1320+ *
1321+ */
1322+
1323+import QtQuick 2.0
1324+import Ubuntu.Components 0.1
1325+import Ubuntu.Components.ListItems 0.1
1326+
1327+Item {
1328+ id: grid
1329+
1330+ // Property to choose the grid type
1331+ property string gridType: "gridCarousel"
1332+
1333+ // Property to show/hide date
1334+ property bool showDate: true
1335+
1336+ // Header Title
1337+ property alias header: header.text
1338+
1339+ // Grid Data Model
1340+ property alias dataModel: gridView.model
1341+
1342+ // Grid Thumbnail size
1343+ property int size: {
1344+ if (width >= units.gu(170))
1345+ return (width - 9*container.spacing)/8
1346+ if (width >= units.gu(150))
1347+ return (width - 8*container.spacing)/7
1348+ else if (width >= units.gu(130))
1349+ return (width - 7*container.spacing)/6
1350+ else if (tabletLandscapeForm || width > units.gu(100))
1351+ return (width - 6*container.spacing)/5
1352+ else if (width > units.gu(80))
1353+ return (width - 5*container.spacing)/4
1354+ else if (width >= units.gu(60))
1355+ return (width - 4*container.spacing)/3
1356+ else
1357+ return (width - 3*container.spacing)/2
1358+ }
1359+
1360+ // Grid Thumbnail height
1361+ property int gridHeight: 1.5*size
1362+
1363+ // Signal triggered when a thumb
1364+ signal thumbClicked(var model)
1365+
1366+ width: parent.width
1367+ visible: gridView.model.count > 0
1368+
1369+ Column {
1370+ id: container
1371+
1372+ spacing: units.gu(3)
1373+ anchors {
1374+ fill: parent
1375+ leftMargin: units.gu(3)
1376+ topMargin: units.gu(2)
1377+ }
1378+
1379+ Header {
1380+ id: header
1381+ text: "Default Header Title"
1382+ visible: text !== "Default Header Title"
1383+ anchors {
1384+ left: parent.left
1385+ right: parent.right
1386+ margins: -units.gu(3)
1387+ }
1388+ }
1389+
1390+ Component {
1391+ id: gridCarouselDelegate
1392+ Item {
1393+ id: thumbContainer
1394+
1395+ width: grid.size
1396+ height: grid.gridHeight + units.gu(5)
1397+
1398+ Column {
1399+ id: thumbColumn
1400+ spacing: units.gu(0.5)
1401+ anchors.fill: parent
1402+
1403+ // Widget to curve edges and encase the thumbnail
1404+ Thumbnail {
1405+ id: gridThumb
1406+ radius: "small"
1407+ width: grid.size
1408+ height: grid.gridHeight
1409+ thumbSource: thumb_url
1410+
1411+ MouseArea {
1412+ anchors.fill: parent
1413+ onClicked: grid.thumbClicked(model)
1414+ }
1415+ }
1416+
1417+ // Label showing the movie/tv show name
1418+ Label {
1419+ id: gridThumbDescription
1420+
1421+ text: name
1422+ maximumLineCount: 2
1423+ visible: !tabletPortraitForm && !tabletLandscapeForm
1424+ elide: Text.ElideRight
1425+ wrapMode: Text.WordWrap
1426+ width: gridThumb.width
1427+ horizontalAlignment: Text.AlignHCenter
1428+
1429+ MouseArea {
1430+ anchors.fill: parent
1431+ onClicked: grid.thumbClicked(model)
1432+ }
1433+ }
1434+ }
1435+ }
1436+ }
1437+
1438+ Component {
1439+ id: gridDetailedCarouselDelegate
1440+ Item {
1441+ id: thumbContainer
1442+
1443+ width: grid.size
1444+ height: grid.gridHeight + units.gu(5)
1445+
1446+ Column {
1447+ id: thumbColumn
1448+ spacing: units.gu(0.5)
1449+ anchors.fill: parent
1450+
1451+ // Widget to curve edges and encase the thumbnail
1452+ Thumbnail {
1453+ id: gridThumb
1454+ radius: "small"
1455+ width: grid.size
1456+ height: grid.gridHeight
1457+ thumbSource: thumb_url
1458+
1459+ MouseArea {
1460+ anchors.fill: parent
1461+ onClicked: grid.thumbClicked(model)
1462+ }
1463+
1464+ Item {
1465+ id: bottomContainer
1466+ clip: true
1467+ height: parent.height/5
1468+ anchors {
1469+ left: parent.left
1470+ right: parent.right
1471+ bottom: parent.bottom
1472+ }
1473+
1474+ UbuntuShape {
1475+ id: detailsContainer
1476+ height: gridThumb.height
1477+ anchors {
1478+ bottom: parent.bottom
1479+ left: parent.left
1480+ right: parent.right
1481+ }
1482+ radius: "medium"
1483+ color: Qt.rgba(0,0,0,0.8)
1484+ }
1485+
1486+ Column {
1487+ id: detailsColumn
1488+ anchors {
1489+ left: parent.left
1490+ right: parent.right
1491+ verticalCenter: parent.verticalCenter
1492+ margins: units.gu(1)
1493+ }
1494+
1495+ // Label showing the tv episode name
1496+ Label {
1497+ id: _episodeTitle
1498+ text: episode_name
1499+ elide: Text.ElideRight
1500+ font.bold: true
1501+ anchors {
1502+ left: parent.left
1503+ right: parent.right
1504+ }
1505+ }
1506+
1507+ // Container to hold the tv show season number and release date
1508+ Item {
1509+ height: childrenRect.height
1510+ anchors {
1511+ left: parent.left
1512+ right: parent.right
1513+ }
1514+
1515+ Label {
1516+ id: _seasonDetail
1517+ text: "S" + season + "E" + episode
1518+ width: parent.width * (2/5)
1519+ elide: Text.ElideRight
1520+ fontSize: "small"
1521+ anchors.left: parent.left
1522+ }
1523+
1524+ Label {
1525+ id: _seasonDate
1526+
1527+ font.bold: true
1528+ fontSize: "small"
1529+ color: "LightGreen"
1530+ visible: showDate
1531+ text: get_date(episode_air_date)
1532+ elide: Text.ElideRight
1533+ width: parent.width * (3/5)
1534+ anchors.right: parent.right
1535+ horizontalAlignment: Text.AlignRight
1536+
1537+ function get_date(iso) {
1538+ var date, month
1539+ date = iso.split('T')[0].split('-')
1540+ month = Qt.locale().standaloneMonthName(date[1] - 1, Locale.ShortFormat)
1541+ return date[2] + " " + month
1542+ }
1543+ }
1544+ }
1545+ }
1546+ }
1547+ }
1548+
1549+ // Label showing the tv show name
1550+ Label {
1551+ id: gridThumbDescription
1552+ text: name
1553+ maximumLineCount: 2
1554+ elide: Text.ElideRight
1555+ wrapMode: Text.WordWrap
1556+ width: gridThumb.width
1557+ horizontalAlignment: Text.AlignHCenter
1558+ visible: !tabletPortraitForm && !tabletLandscapeForm
1559+
1560+ MouseArea {
1561+ anchors.fill: parent
1562+ onClicked: grid.thumbClicked(model)
1563+ }
1564+ }
1565+ }
1566+ }
1567+ }
1568+
1569+ GridView {
1570+ id: gridView
1571+ clip: true
1572+ width: parent.width
1573+ height: header.visible ? parent.height - header.height - parent.spacing : parent.height
1574+ snapMode: GridView.SnapToRow
1575+
1576+ cellHeight: !tabletPortraitForm && !tabletLandscapeForm ? grid.gridHeight + units.gu(8) : grid.gridHeight + units.gu(4)
1577+ cellWidth: grid.size + container.spacing
1578+
1579+ delegate: gridType == "gridCarousel" ? gridCarouselDelegate : gridDetailedCarouselDelegate
1580+ }
1581+ }
1582+}
1583
1584=== added file 'components/ImageLabel.qml'
1585--- components/ImageLabel.qml 1970-01-01 00:00:00 +0000
1586+++ components/ImageLabel.qml 2014-05-14 17:33:57 +0000
1587@@ -0,0 +1,53 @@
1588+/*
1589+ * Flashback - Entertainment app for Ubuntu
1590+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1591+ *
1592+ * This program is free software: you can redistribute it and/or modify
1593+ * it under the terms of the GNU General Public License version 3 as
1594+ * published by the Free Software Foundation.
1595+ *
1596+ * This program is distributed in the hope that it will be useful,
1597+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1598+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1599+ * GNU General Public License for more details.
1600+ *
1601+ * You should have received a copy of the GNU General Public License
1602+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1603+ *
1604+ */
1605+
1606+import QtQuick 2.0
1607+import Ubuntu.Components 0.1
1608+
1609+/*
1610+ Generic component to display an icon and text side by side
1611+ */
1612+Item {
1613+ id: imageLabel
1614+
1615+ // Public Properties
1616+
1617+ property alias image: icon.source
1618+ property alias label: iconText.text
1619+ property alias size: icon.width
1620+
1621+ height: childrenRect.height
1622+ width: childrenRect.width
1623+
1624+ Row {
1625+ spacing: units.gu(0.5)
1626+ Image {
1627+ id: icon
1628+ smooth: true
1629+ height: width
1630+ width: units.gu(4)
1631+ antialiasing: true
1632+ fillMode: Image.PreserveAspectFit
1633+ }
1634+
1635+ Label {
1636+ id: iconText
1637+ anchors.verticalCenter: icon.verticalCenter
1638+ }
1639+ }
1640+}
1641
1642=== added file 'components/ListViewExpandable.qml'
1643--- components/ListViewExpandable.qml 1970-01-01 00:00:00 +0000
1644+++ components/ListViewExpandable.qml 2014-05-14 17:33:57 +0000
1645@@ -0,0 +1,80 @@
1646+/*
1647+ * Flashback - Entertainment app for Ubuntu
1648+ * Copyright (C) 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1649+ *
1650+ * This program is free software: you can redistribute it and/or modify
1651+ * it under the terms of the GNU General Public License version 3 as
1652+ * published by the Free Software Foundation.
1653+ *
1654+ * This program is distributed in the hope that it will be useful,
1655+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1656+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1657+ * GNU General Public License for more details.
1658+ *
1659+ * You should have received a copy of the GNU General Public License
1660+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1661+ *
1662+ */
1663+
1664+import QtQuick 2.0
1665+import Ubuntu.Components 0.1
1666+import Ubuntu.Components.ListItems 0.1
1667+
1668+// Expandable List Element
1669+Expandable {
1670+ id: listviewExpandable
1671+
1672+ // Property to set the model of the search results listview
1673+ property alias model: _resultsList.model
1674+
1675+ // Property to set the label of the search category header
1676+ property alias header: _header.text
1677+
1678+ // Property to store the number of the search results
1679+ property int count
1680+
1681+ // Property to set the listitem delegate
1682+ property alias delegateItem: _resultsList.delegate
1683+
1684+ collapseOnClick: true
1685+ enabled: count !== 0
1686+ visible: count !== 0
1687+ onClicked: expanded = true
1688+ expandedHeight: _contentColumn.height + units.gu(1)
1689+
1690+ Column {
1691+ id: _contentColumn
1692+ anchors {
1693+ left: parent.left
1694+ right: parent.right
1695+ }
1696+
1697+ Item {
1698+ anchors {
1699+ left: parent.left
1700+ right: parent.right
1701+ }
1702+
1703+ height: listviewExpandable.collapsedHeight
1704+
1705+ Label {
1706+ id: _header
1707+ anchors {
1708+ left: parent.left
1709+ right: parent.right
1710+ verticalCenter: parent.verticalCenter
1711+ }
1712+ }
1713+ }
1714+
1715+ ListView {
1716+ id: _resultsList
1717+ clip: true
1718+ height: count > 5 ? 5 * units.gu(6) : count * units.gu(6)
1719+ anchors {
1720+ left: parent.left
1721+ right: parent.right
1722+ }
1723+ }
1724+ }
1725+}
1726
1727=== added file 'components/LoadingIndicator.qml'
1728--- components/LoadingIndicator.qml 1970-01-01 00:00:00 +0000
1729+++ components/LoadingIndicator.qml 2014-05-14 17:33:57 +0000
1730@@ -0,0 +1,60 @@
1731+/*
1732+ * Flashback - Entertainment app for Ubuntu
1733+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1734+ *
1735+ * This program is free software: you can redistribute it and/or modify
1736+ * it under the terms of the GNU General Public License version 3 as
1737+ * published by the Free Software Foundation.
1738+ *
1739+ * This program is distributed in the hope that it will be useful,
1740+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1741+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1742+ * GNU General Public License for more details.
1743+ *
1744+ * You should have received a copy of the GNU General Public License
1745+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1746+ *
1747+ */
1748+
1749+import QtQuick 2.0
1750+import Ubuntu.Components 0.1
1751+
1752+/*
1753+ Generic loading indicator component to provide user feedback
1754+ */
1755+Rectangle {
1756+ id: loadingContainer
1757+
1758+ property alias loadingText: _loadingLabel.text
1759+
1760+ width: units.gu(30)
1761+ height: units.gu(10)
1762+ radius: units.gu(0.5)
1763+
1764+ /*
1765+ WORKAROUND: Due to bug https://bugs.launchpad.net/ubuntu-ui-toolkit/+bug/1300668, the opacity property
1766+ is used for hiding and showing the loading indicator and hence cannot be used for the appearance of the
1767+ widget.
1768+ */
1769+ //opacity: 0.7
1770+ color: "Black"
1771+
1772+ anchors.centerIn: parent
1773+ z: parent.z + 1
1774+
1775+ Row {
1776+ anchors.centerIn: parent
1777+ spacing: units.gu(2)
1778+
1779+ ActivityIndicator {
1780+ id: _indicator
1781+ running: true
1782+ }
1783+
1784+ Label {
1785+ id: _loadingLabel
1786+ text: i18n.tr("Loading...")
1787+ anchors.verticalCenter: _indicator.verticalCenter
1788+ }
1789+ }
1790+}
1791
1792=== added file 'components/Notification.qml'
1793--- components/Notification.qml 1970-01-01 00:00:00 +0000
1794+++ components/Notification.qml 2014-05-14 17:33:57 +0000
1795@@ -0,0 +1,190 @@
1796+/*
1797+ * Flashback - Entertainment app for Ubuntu
1798+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1799+ *
1800+ * This program is free software: you can redistribute it and/or modify
1801+ * it under the terms of the GNU General Public License version 3 as
1802+ * published by the Free Software Foundation.
1803+ *
1804+ * This program is distributed in the hope that it will be useful,
1805+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1806+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1807+ * GNU General Public License for more details.
1808+ *
1809+ * You should have received a copy of the GNU General Public License
1810+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1811+ *
1812+ */
1813+
1814+import QtQuick 2.0
1815+import Ubuntu.Components 0.1
1816+
1817+/*
1818+ Component to show user notification about an activity
1819+ Behavior: Hidden after 10 seconds automatically or when the user clicks the close button
1820+ */
1821+Rectangle {
1822+ id: _notificationContainer
1823+
1824+ // Property to set the notification title
1825+ property alias messageTitle: _notificationTitle.text
1826+
1827+ // Property to set the notification message
1828+ property alias message: _notificationMessage.text
1829+
1830+ // Property to set the notification icon (By default shows the error icon since it is the common case)
1831+ property alias messageIcon: _notificationIcon.source
1832+
1833+ // Property to set the notification timeout (in seconds). By default set to 10 seconds
1834+ property int timeout: 10
1835+
1836+ //
1837+
1838+ height: _mainColumn.height + units.gu(5)
1839+ anchors.centerIn: parent
1840+ width: parent.width/1.2
1841+ radius: units.gu(0.5)
1842+ z: parent.z + 1
1843+ visible: false
1844+ opacity: 0.8
1845+ color: "Black"
1846+
1847+ // When notification is visible, start the internal timer
1848+ onVisibleChanged: visible == true ? _countDownTimer.restart() : undefined
1849+
1850+ Behavior on width {
1851+ UbuntuNumberAnimation { duration: UbuntuAnimation.BriskDuration }
1852+ }
1853+
1854+ Behavior on height {
1855+ UbuntuNumberAnimation { duration: UbuntuAnimation.BriskDuration }
1856+ }
1857+
1858+ // Timer to show the time countdown to the user (updated every second)
1859+ Timer {
1860+ id: _countDownTimer
1861+
1862+ property int _countDown: timeout
1863+
1864+ repeat: true
1865+ interval: 1000
1866+
1867+ onTriggered: {
1868+ _visualCountDownAnimation.start()
1869+ _countDown = _countDown - 1
1870+ if(_countDown == 0) {
1871+ _countDownTimer.stop()
1872+ _visualCountDownAnimation.complete()
1873+ _notificationContainer.visible = false
1874+ _countDown = timeout
1875+ }
1876+ }
1877+ }
1878+
1879+ // Notification Icon
1880+ Image {
1881+ id: _notificationIcon
1882+
1883+ width: units.gu(5)
1884+ height: width
1885+ anchors {
1886+ verticalCenter: _mainColumn.verticalCenter
1887+ left: parent.left
1888+ margins: units.gu(2)
1889+ }
1890+
1891+ source: Qt.resolvedUrl("../graphics/error.png")
1892+ fillMode: Image.PreserveAspectFit
1893+ smooth: true
1894+ }
1895+
1896+ // GUI consisting of the notification message. The string shows a custom message
1897+ Column {
1898+ id: _mainColumn
1899+ anchors {
1900+ left: _notificationIcon.right
1901+ right: parent.right
1902+ top: parent.top
1903+ margins: units.gu(2)
1904+ }
1905+
1906+ spacing: units.gu(1)
1907+
1908+ Label {
1909+ id: _notificationTitle
1910+
1911+ text: i18n.tr("Default")
1912+ font.bold: true
1913+ elide: Text.ElideRight
1914+ wrapMode: Text.WordWrap
1915+ anchors {
1916+ left: parent.left
1917+ right: parent.right
1918+ }
1919+
1920+ }
1921+
1922+ Label {
1923+ id: _notificationMessage
1924+
1925+ text: i18n.tr("Default")
1926+ elide: Text.ElideRight
1927+ wrapMode: Text.WordWrap
1928+ anchors {
1929+ left: parent.left
1930+ right: parent.right
1931+ }
1932+
1933+ }
1934+ }
1935+
1936+ // Visual count down animation (shown at the top)
1937+ Rectangle {
1938+ id: _visualCountDown
1939+
1940+ color: UbuntuColors.orange
1941+ height: units.gu(0.4)
1942+ anchors {
1943+ top: parent.top
1944+ left: _closeIcon.right
1945+ }
1946+
1947+ SequentialAnimation on width {
1948+ id: _visualCountDownAnimation
1949+ running: false
1950+ NumberAnimation {
1951+ from: _notificationContainer.width - units.gu(2)
1952+ to: 0
1953+ duration: (timeout*1000) - 1000
1954+ }
1955+ PauseAnimation {duration: 1000}
1956+ }
1957+ }
1958+
1959+ // Icon to close the notification bubble (shown at the top left corner)
1960+ Image {
1961+ id: _closeIcon
1962+
1963+ width: units.gu(3)
1964+ height: width
1965+ anchors {
1966+ bottom: parent.top
1967+ right: parent.left
1968+ margins: units.gu(-2)
1969+ }
1970+
1971+ source: Qt.resolvedUrl("../graphics/close.png")
1972+ fillMode: Image.PreserveAspectFit
1973+ smooth: true
1974+
1975+ MouseArea {
1976+ anchors.fill: parent
1977+ onClicked: {
1978+ _countDownTimer.stop()
1979+ _visualCountDownAnimation.complete()
1980+ _notificationContainer.visible = false
1981+ _countDownTimer._countDown = timeout
1982+ }
1983+ }
1984+ }
1985+}
1986
1987=== added file 'components/NowWatching.qml'
1988--- components/NowWatching.qml 1970-01-01 00:00:00 +0000
1989+++ components/NowWatching.qml 2014-05-14 17:33:57 +0000
1990@@ -0,0 +1,147 @@
1991+/*
1992+ * Flashback - Entertainment app for Ubuntu
1993+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
1994+ *
1995+ * This program is free software: you can redistribute it and/or modify
1996+ * it under the terms of the GNU General Public License version 3 as
1997+ * published by the Free Software Foundation.
1998+ *
1999+ * This program is distributed in the hope that it will be useful,
2000+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2001+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2002+ * GNU General Public License for more details.
2003+ *
2004+ * You should have received a copy of the GNU General Public License
2005+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2006+ *
2007+ */
2008+
2009+import QtQuick 2.0
2010+import Ubuntu.Components 0.1
2011+import Ubuntu.Components.ListItems 0.1
2012+
2013+Column {
2014+ id: nowWatching
2015+
2016+ spacing: units.gu(1)
2017+
2018+ // Public properties to set the currently watched movie/tv
2019+ property alias backgroundFanArt: _backgroundFanArt.thumbSource
2020+ property alias posterArt: _poster.thumbSource
2021+ property alias title: _title.text
2022+ property alias subtitle: _subtitle.text
2023+ property alias extra: _extra.text
2024+ property bool showTrailer: false
2025+
2026+ // Signal triggered when a thumb is clicked
2027+ signal thumbClicked()
2028+
2029+ // Signal triggered when trailer is clicked
2030+ signal trailerClicked()
2031+
2032+ // Default width and height
2033+ property int backgroundWidth: units.gu(35)
2034+ property int backgroundHeight: units.gu(20)
2035+
2036+ Header { text: i18n.tr("Now Watching") }
2037+
2038+ DesaturatedThumbnail {
2039+ id: _backgroundFanArt
2040+
2041+ width: backgroundWidth
2042+ height: backgroundHeight
2043+
2044+ Thumbnail {
2045+ id: _poster
2046+ width: parent.width/3.3
2047+ z: parent.z + 1
2048+ visible: !_backgroundFanArt.ready
2049+ anchors {
2050+ left: parent.left
2051+ top: parent.top
2052+ bottom: _detailsContainer.top
2053+ margins: units.gu(0.5)
2054+ }
2055+ }
2056+
2057+ // Container to show more details like episode title or movie runtime etc
2058+ Rectangle {
2059+ id: _detailsContainer
2060+
2061+ color: "Black"
2062+ opacity: 0.7
2063+ z: parent.z + 1
2064+ radius: units.gu(1)
2065+ height: parent.height/5
2066+ visible: !_backgroundFanArt.ready
2067+ anchors {
2068+ left: parent.left
2069+ right: parent.right
2070+ bottom: parent.bottom
2071+ }
2072+
2073+ Label {
2074+ id: _subtitle
2075+ elide: Text.ElideRight
2076+ width: parent.width * (4/5)
2077+ anchors {
2078+ leftMargin: units.gu(1)
2079+ left: parent.left
2080+ verticalCenter: parent.verticalCenter
2081+ }
2082+ }
2083+
2084+ Label {
2085+ id: _extra
2086+ width: parent.width/5
2087+ elide: Text.ElideRight
2088+ visible: !nowWatching.showTrailer
2089+ horizontalAlignment: Text.AlignRight
2090+ anchors {
2091+ rightMargin: units.gu(1)
2092+ right: parent.right
2093+ verticalCenter: parent.verticalCenter
2094+ }
2095+ }
2096+
2097+ Image {
2098+ id: _trailer
2099+
2100+ width: units.gu(3)
2101+ height: width
2102+ visible: nowWatching.showTrailer
2103+ source: Qt.resolvedUrl("../graphics/trailer.png")
2104+ anchors {
2105+ rightMargin: units.gu(1)
2106+ right: parent.right
2107+ verticalCenter: parent.verticalCenter
2108+ }
2109+
2110+ MouseArea {
2111+ anchors.fill: parent
2112+ preventStealing: true
2113+ enabled: _trailer.visible
2114+ onClicked: nowWatching.trailerClicked()
2115+ }
2116+ }
2117+ }
2118+
2119+ MouseArea {
2120+ id: thumbArea
2121+ anchors.fill: parent
2122+ onClicked: nowWatching.thumbClicked()
2123+ }
2124+ }
2125+
2126+ Label {
2127+ id: _title
2128+ maximumLineCount: 2
2129+ elide: Text.ElideRight
2130+ wrapMode: Text.WordWrap
2131+ horizontalAlignment: Text.AlignHCenter
2132+ anchors {
2133+ left: _backgroundFanArt.left
2134+ right: _backgroundFanArt.right
2135+ }
2136+ }
2137+}
2138
2139=== added file 'components/RatingChooser.qml'
2140--- components/RatingChooser.qml 1970-01-01 00:00:00 +0000
2141+++ components/RatingChooser.qml 2014-05-14 17:33:57 +0000
2142@@ -0,0 +1,106 @@
2143+/*
2144+ * Flashback - Entertainment app for Ubuntu
2145+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2146+ *
2147+ * This program is free software: you can redistribute it and/or modify
2148+ * it under the terms of the GNU General Public License version 3 as
2149+ * published by the Free Software Foundation.
2150+ *
2151+ * This program is distributed in the hope that it will be useful,
2152+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2153+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2154+ * GNU General Public License for more details.
2155+ *
2156+ * You should have received a copy of the GNU General Public License
2157+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2158+ *
2159+ */
2160+
2161+import QtQuick 2.0
2162+import Ubuntu.Components 0.1
2163+import Ubuntu.Components.ListItems 0.1
2164+import "../backend/backend.js" as Backend
2165+import "../models"
2166+
2167+Rectangle {
2168+ id: ratingsChoice
2169+
2170+ // Public properties required for submitting a user rating to Trakt
2171+ property string type
2172+ property string type_id
2173+ property string name
2174+ property string year
2175+ property int season
2176+ property int episode
2177+
2178+ // Property to hold the user rating.
2179+ property int ratings: 0
2180+
2181+ // Signal triggered when ratings is successfully submitted
2182+ signal ratingClicked()
2183+
2184+ TraktUserRating {
2185+ id: traktUserRating
2186+ function updateJSONModel() {
2187+ if(reply.status === "success") {
2188+ console.log("[LOG]: " + type + " ratings success")
2189+ ratingsChoice.ratings = ratingListModel.get(ratingList.currentIndex).rating
2190+ ratingsChoice.ratingClicked()
2191+ }
2192+ }
2193+ }
2194+
2195+ color: "Black"
2196+ visible: false
2197+ radius: units.gu(2)
2198+ width: parent.width/1.6
2199+ height: parent.height/1.2
2200+
2201+ TraktRatingModel { id: ratingListModel }
2202+
2203+ ListView {
2204+ id: ratingList
2205+
2206+ clip: true
2207+ currentIndex: -1
2208+ model: ratingListModel
2209+ spacing: units.gu(1)
2210+ anchors {
2211+ top: parent.top
2212+ left: parent.left
2213+ right: parent.right
2214+ bottom: cancelButton.top
2215+ margins: units.gu(2)
2216+ }
2217+
2218+ delegate: Standard {
2219+ text: ratingDescription
2220+ iconFrame: false
2221+ iconSource: Qt.resolvedUrl(thumb_url)
2222+ onClicked: {
2223+ ratingList.currentIndex = index
2224+ ratingsChoice.visible = false
2225+ traktUserRating.source = Backend.traktAddRatingUrl(type)
2226+ if(type === "movie")
2227+ traktUserRating.createMovieMessage(traktLogin.contents.username, traktLogin.contents.password, type_id, name, year, rating)
2228+ else if(type === "episode")
2229+ traktUserRating.createEpisodeMessage(traktLogin.contents.username, traktLogin.contents.password, type_id, name, year, season, episode, rating)
2230+ else if(type === "show")
2231+ traktUserRating.createShowMessage(traktLogin.contents.username, traktLogin.contents.password, type_id, name, year, rating)
2232+ traktUserRating.sendMessage()
2233+ }
2234+ }
2235+ }
2236+
2237+ Button {
2238+ id: cancelButton
2239+ width: parent.width/2
2240+ text: i18n.tr("Cancel")
2241+ onClicked: ratingsChoice.visible = false
2242+ anchors {
2243+ horizontalCenter: parent.horizontalCenter
2244+ bottom: parent.bottom
2245+ bottomMargin: units.gu(2)
2246+ }
2247+ }
2248+}
2249
2250=== added file 'components/Rotater.qml'
2251--- components/Rotater.qml 1970-01-01 00:00:00 +0000
2252+++ components/Rotater.qml 2014-05-14 17:33:57 +0000
2253@@ -0,0 +1,66 @@
2254+/*
2255+ * Flashback - Entertainment app for Ubuntu
2256+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2257+ *
2258+ * This program is free software: you can redistribute it and/or modify
2259+ * it under the terms of the GNU General Public License version 3 as
2260+ * published by the Free Software Foundation.
2261+ *
2262+ * This program is distributed in the hope that it will be useful,
2263+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2264+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2265+ * GNU General Public License for more details.
2266+ *
2267+ * You should have received a copy of the GNU General Public License
2268+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2269+ *
2270+ */
2271+
2272+import QtQuick 2.0
2273+import Ubuntu.Components 0.1
2274+
2275+/*
2276+ Generic component to provide the capability to truncate text or data when space is limited and yet provide
2277+ allow viewing of lengthy text or data when required without using a page.
2278+ */
2279+Flipable {
2280+ id: _rotater
2281+
2282+ // Property to flip the component to view the full extensive text or data
2283+ property bool flipped: false
2284+
2285+ // Property to hold the height of the flipped component
2286+ property real flipHeight
2287+
2288+ z: parent.z + 1
2289+
2290+ transform: Rotation {
2291+ id: _rotation
2292+ origin { x: _rotater.width/2; y: _rotater.height/2 }
2293+ axis { x: 0; y: 1; z: 0 }
2294+ angle: 0
2295+ }
2296+
2297+ states: State {
2298+ name: "back"
2299+ PropertyChanges { target: _rotation; angle: 180 }
2300+ PropertyChanges { target: _rotater; height: flipHeight }
2301+ PropertyChanges { target: _rotater; anchors.topMargin: units.gu(0) }
2302+
2303+ AnchorChanges {
2304+ target: _rotater
2305+ anchors.top: parent.top
2306+ anchors.left: parent.left
2307+ anchors.right: parent.right
2308+ }
2309+
2310+ when: _rotater.flipped
2311+ }
2312+
2313+ transitions: Transition {
2314+ ParallelAnimation {
2315+ UbuntuNumberAnimation { target: _rotation; property: "angle"; duration: UbuntuAnimation.SlowDuration }
2316+ AnchorAnimation {}
2317+ }
2318+ }
2319+}
2320
2321=== added file 'components/SearchBox.qml'
2322--- components/SearchBox.qml 1970-01-01 00:00:00 +0000
2323+++ components/SearchBox.qml 2014-05-14 17:33:57 +0000
2324@@ -0,0 +1,57 @@
2325+/*
2326+ * Flashback - Entertainment app for Ubuntu
2327+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2328+ *
2329+ * This program is free software: you can redistribute it and/or modify
2330+ * it under the terms of the GNU General Public License version 3 as
2331+ * published by the Free Software Foundation.
2332+ *
2333+ * This program is distributed in the hope that it will be useful,
2334+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2335+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2336+ * GNU General Public License for more details.
2337+ *
2338+ * You should have received a copy of the GNU General Public License
2339+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2340+ *
2341+ */
2342+
2343+import QtQuick 2.0
2344+import Ubuntu.Components 0.1
2345+
2346+Item {
2347+ id: searchBox
2348+
2349+ property alias defaultText: searchField.placeholderText
2350+ property alias search_term: searchField.text
2351+ signal searchTriggered()
2352+
2353+ Component.onCompleted: search_timer.triggered.connect(searchTriggered)
2354+
2355+ TextField {
2356+ id: searchField
2357+ anchors {
2358+ left: parent.left
2359+ right: parent.right
2360+ top: parent.top
2361+ }
2362+
2363+ primaryItem: Image {
2364+ height: parent.height/1.5;
2365+ fillMode: Image.PreserveAspectFit
2366+ source: Qt.resolvedUrl("../graphics/search_icon.svg")
2367+ }
2368+
2369+ Timer {
2370+ id: search_timer
2371+ interval: 1100
2372+ repeat: false
2373+ }
2374+
2375+ placeholderText: i18n.tr("Search")
2376+ hasClearButton: true
2377+ inputMethodHints: Qt.ImhNoPredictiveText
2378+ onTextChanged: search_timer.restart()
2379+ }
2380+}
2381+
2382
2383=== added file 'components/SearchPage.qml'
2384--- components/SearchPage.qml 1970-01-01 00:00:00 +0000
2385+++ components/SearchPage.qml 2014-05-14 17:33:57 +0000
2386@@ -0,0 +1,74 @@
2387+/*
2388+ * Flashback - Entertainment app for Ubuntu
2389+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2390+ *
2391+ * This program is free software: you can redistribute it and/or modify
2392+ * it under the terms of the GNU General Public License version 3 as
2393+ * published by the Free Software Foundation.
2394+ *
2395+ * This program is distributed in the hope that it will be useful,
2396+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2397+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2398+ * GNU General Public License for more details.
2399+ *
2400+ * You should have received a copy of the GNU General Public License
2401+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2402+ *
2403+ */
2404+
2405+import QtQuick 2.0
2406+import Ubuntu.Components 0.1
2407+import Ubuntu.Components.ListItems 0.1
2408+import "../backend/backend.js" as Backend
2409+
2410+Item {
2411+ id: _searchTemplate
2412+
2413+ // Public Properties
2414+ property alias searchBoxText: _searchBox.defaultText
2415+ property string type
2416+ property variant search_model
2417+ signal resultClicked(var model)
2418+
2419+ // Search Box to enter search query along with the search button
2420+ SearchBox {
2421+ id: _searchBox
2422+ anchors {
2423+ top: parent.top
2424+ left: parent.left
2425+ right: parent.right
2426+ margins: units.gu(2)
2427+ }
2428+ onSearchTriggered: {
2429+ search_model.model.clear();
2430+ search_model.source = Backend.searchUrl(type, _searchBox.search_term);
2431+ if (type == "tv") {
2432+ search_model.createMessage(traktLogin.contents.username, traktLogin.contents.password)
2433+ search_model.sendMessage()
2434+ }
2435+ }
2436+ }
2437+
2438+ ListView {
2439+ id: _searchResultsList
2440+ clip: true
2441+ anchors {
2442+ left: parent.left
2443+ right: parent.right
2444+ bottom: parent.bottom
2445+ top: _searchBox.bottom
2446+ leftMargin: units.gu(2)
2447+ rightMargin: units.gu(2)
2448+ bottomMargin: units.gu(2)
2449+ topMargin: units.gu(5)
2450+ }
2451+
2452+ model: search_model.model
2453+
2454+ delegate: Standard {
2455+ text: name
2456+ iconSource: thumb_url
2457+ onClicked: _searchTemplate.resultClicked(model)
2458+ }
2459+ }
2460+}
2461
2462=== added file 'components/SidebarMenuItem.qml'
2463--- components/SidebarMenuItem.qml 1970-01-01 00:00:00 +0000
2464+++ components/SidebarMenuItem.qml 2014-05-14 17:33:57 +0000
2465@@ -0,0 +1,155 @@
2466+/*
2467+ * Flashback - Entertainment app for Ubuntu
2468+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2469+ *
2470+ * This program is free software: you can redistribute it and/or modify
2471+ * it under the terms of the GNU General Public License version 3 as
2472+ * published by the Free Software Foundation.
2473+ *
2474+ * This program is distributed in the hope that it will be useful,
2475+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2476+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2477+ * GNU General Public License for more details.
2478+ *
2479+ * You should have received a copy of the GNU General Public License
2480+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2481+ *
2482+ */
2483+
2484+import QtQuick 2.0
2485+import Ubuntu.Layouts 0.1
2486+import Ubuntu.Components 0.1
2487+import Ubuntu.Components.ListItems 0.1 as ListItem
2488+
2489+/*
2490+ Menu item component for the Sidebar
2491+ */
2492+ListItem.Empty {
2493+ id: _sidebarMenuItem
2494+
2495+ // Property to set the label of the menu item in tablet portrait form
2496+ property string shortenedMenuLabel
2497+
2498+ // Property to set the label of the menu item in tablet landscape form
2499+ property string menuLabel
2500+
2501+ // Property to set the icon of the menu item
2502+ property alias menuIcon: _menuIcon.source
2503+
2504+ // Property to store the menu status (selected or not selected)
2505+ property bool isSelected: false
2506+
2507+ // Property to show menu item count
2508+ property string menuCount: "0"
2509+
2510+ width: parent.width
2511+ height: tabletPortraitForm ? units.gu(10) : units.gu(8)
2512+
2513+ Rectangle {
2514+ id: _indicator
2515+
2516+ width: units.gu(0)
2517+ height: parent.height
2518+ color: UbuntuColors.orange
2519+ anchors {
2520+ left: parent.left
2521+ top: parent.top
2522+ bottom: parent.bottom
2523+ }
2524+
2525+ states: State {
2526+ name: "selected"
2527+ when: isSelected
2528+ PropertyChanges { target: _indicator; width: units.gu(1) }
2529+ }
2530+
2531+ transitions: Transition {
2532+ PropertyAnimation { target: _indicator; property: "width"; duration: UbuntuAnimation.FastDuration }
2533+ }
2534+ }
2535+
2536+ Layouts {
2537+ anchors.fill: parent
2538+ anchors.leftMargin: tabletPortraitForm ? units.gu(0) : units.gu(3)
2539+
2540+ layouts: [
2541+ ConditionalLayout {
2542+ name: "IconForm"
2543+ when: tabletPortraitForm
2544+
2545+ Column {
2546+ anchors.fill: parent
2547+ anchors.margins: units.gu(1.5)
2548+ spacing: units.gu(1)
2549+
2550+ ItemLayout {
2551+ item: "_menuIconItem"
2552+ width: units.gu(4)
2553+ height: units.gu(4)
2554+ anchors.horizontalCenter: parent.horizontalCenter
2555+
2556+ ItemLayout {
2557+ item: "menuCountItem"
2558+ width: units.gu(2.5)
2559+ height: units.gu(2.5)
2560+ anchors.top: parent.top
2561+ anchors.topMargin: -units.gu(0.5)
2562+ anchors.left: parent.right
2563+ anchors.leftMargin: units.gu(1)
2564+ }
2565+ }
2566+
2567+ ItemLayout {
2568+ item: "_menuLabelItem"
2569+ width: _menuLabel.width
2570+ height: _menuLabel.height
2571+ anchors.horizontalCenter: parent.horizontalCenter
2572+ }
2573+ }
2574+ }
2575+ ]
2576+
2577+ Row {
2578+ anchors.fill: parent
2579+ spacing: units.gu(2)
2580+
2581+ Image {
2582+ id: _menuIcon
2583+ Layouts.item: "_menuIconItem"
2584+ antialiasing: true
2585+ height: parent.height/2.5
2586+ fillMode: Image.PreserveAspectFit
2587+ anchors.verticalCenter: parent.verticalCenter
2588+ }
2589+
2590+ Label {
2591+ id: _menuLabel
2592+ Layouts.item: "_menuLabelItem"
2593+ width: units.gu(18)
2594+ anchors.verticalCenter: parent.verticalCenter
2595+ color: isSelected ? UbuntuColors.orange : "White"
2596+ text: tabletPortraitForm ? shortenedMenuLabel : menuLabel
2597+ horizontalAlignment: tabletPortraitForm ? Text.AlignHCenter : 0
2598+
2599+ }
2600+
2601+ Rectangle {
2602+ id: _menuCount
2603+ Layouts.item: "menuCountItem"
2604+ opacity: menuCount !== "0" ? 1 : 0
2605+ color: UbuntuColors.orange
2606+ width: units.gu(5)
2607+ height: units.gu(3)
2608+ radius: height
2609+ anchors.verticalCenter: parent.verticalCenter
2610+
2611+ Label {
2612+ anchors.centerIn: parent
2613+ text: menuCount
2614+ }
2615+ }
2616+ }
2617+
2618+
2619+ }
2620+}
2621
2622=== added file 'components/StatusIcons.qml'
2623--- components/StatusIcons.qml 1970-01-01 00:00:00 +0000
2624+++ components/StatusIcons.qml 2014-05-14 17:33:57 +0000
2625@@ -0,0 +1,68 @@
2626+/*
2627+ * Flashback - Entertainment app for Ubuntu
2628+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2629+ *
2630+ * This program is free software: you can redistribute it and/or modify
2631+ * it under the terms of the GNU General Public License version 3 as
2632+ * published by the Free Software Foundation.
2633+ *
2634+ * This program is distributed in the hope that it will be useful,
2635+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2636+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2637+ * GNU General Public License for more details.
2638+ *
2639+ * You should have received a copy of the GNU General Public License
2640+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2641+ *
2642+ */
2643+
2644+import QtQuick 2.0
2645+import Ubuntu.Components 0.1
2646+
2647+/*
2648+ Component to show movie/show status icons such as watched status, watchlist, etc.
2649+ */
2650+Rectangle {
2651+ id: _statusIconsContainer
2652+
2653+ property real iconWidth: units.gu(2)
2654+ property bool showWatchedIcon: false
2655+ property bool showWatchListIcon: false
2656+
2657+ color: "black"
2658+ opacity: 0.7
2659+ smooth: true
2660+ z: parent.z + 1
2661+ radius: units.gu(0.5)
2662+ width: _iconColumn.width + units.gu(0.5)
2663+ height: showWatchedIcon || showWatchListIcon ? _iconColumn.height + units.gu(0.5) : 0
2664+
2665+ Column {
2666+ id: _iconColumn
2667+ anchors {
2668+ top: parent.top
2669+ left: parent.left
2670+ margins: units.gu(0.2)
2671+ }
2672+
2673+ spacing: units.gu(0.2)
2674+
2675+ Image {
2676+ id: _watchPic
2677+ source: Qt.resolvedUrl("../graphics/watched.png")
2678+ fillMode: Image.PreserveAspectFit
2679+ visible: showWatchedIcon
2680+ width: iconWidth
2681+ smooth: true
2682+ }
2683+
2684+ Image {
2685+ id: _watchListPic
2686+ source: Qt.resolvedUrl("../graphics/watchlist.png")
2687+ fillMode: Image.PreserveAspectFit
2688+ visible: showWatchListIcon
2689+ width: iconWidth
2690+ smooth: true
2691+ }
2692+ }
2693+}
2694
2695=== added file 'components/TabletSidebar.qml'
2696--- components/TabletSidebar.qml 1970-01-01 00:00:00 +0000
2697+++ components/TabletSidebar.qml 2014-05-14 17:33:57 +0000
2698@@ -0,0 +1,58 @@
2699+/*
2700+ * Flashback - Entertainment app for Ubuntu
2701+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2702+ *
2703+ * This program is free software: you can redistribute it and/or modify
2704+ * it under the terms of the GNU General Public License version 3 as
2705+ * published by the Free Software Foundation.
2706+ *
2707+ * This program is distributed in the hope that it will be useful,
2708+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2709+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2710+ * GNU General Public License for more details.
2711+ *
2712+ * You should have received a copy of the GNU General Public License
2713+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2714+ *
2715+ */
2716+
2717+import QtQuick 2.0
2718+import QtQuick.Layouts 1.1
2719+import Ubuntu.Components 0.1
2720+
2721+// Sidebar Component shown on the left side and can be used to house various options
2722+Rectangle {
2723+ id: sidebar
2724+
2725+ width: units.gu(0)
2726+ Layout.minimumWidth: units.gu(0)
2727+ Layout.maximumWidth: units.gu(0)
2728+
2729+ color: Qt.rgba(0,0,0,0.4)
2730+ anchors.top: parent.top
2731+ anchors.bottom: parent.bottom
2732+
2733+ states: [
2734+ State {
2735+ name: "IconForm"
2736+ when: tabletPortraitForm
2737+ PropertyChanges { target: sidebar; width: units.gu(15) }
2738+ PropertyChanges { target: sidebar; Layout.minimumWidth: units.gu(15) }
2739+ PropertyChanges { target: sidebar; Layout.maximumWidth: units.gu(15) }
2740+ },
2741+
2742+ State {
2743+ name: "FullForm"
2744+ when: tabletLandscapeForm
2745+ PropertyChanges { target: sidebar; width: units.gu(35) }
2746+ PropertyChanges { target: sidebar; Layout.minimumWidth: units.gu(35) }
2747+ PropertyChanges { target: sidebar; Layout.maximumWidth: units.gu(35) }
2748+ }
2749+ ]
2750+
2751+ transitions: Transition {
2752+ PropertyAnimation { target: sidebar; property: "width"; duration: UbuntuAnimation.FastDuration }
2753+ PropertyAnimation { target: sidebar; property: "Layout.minimumWidth"; duration: UbuntuAnimation.FastDuration }
2754+ PropertyAnimation { target: sidebar; property: "Layout.maximumWidth"; duration: UbuntuAnimation.FastDuration }
2755+ }
2756+}
2757
2758=== added file 'components/Thumbnail.qml'
2759--- components/Thumbnail.qml 1970-01-01 00:00:00 +0000
2760+++ components/Thumbnail.qml 2014-05-14 17:33:57 +0000
2761@@ -0,0 +1,41 @@
2762+/*
2763+ * Flashback - Entertainment app for Ubuntu
2764+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2765+ *
2766+ * This program is free software: you can redistribute it and/or modify
2767+ * it under the terms of the GNU General Public License version 3 as
2768+ * published by the Free Software Foundation.
2769+ *
2770+ * This program is distributed in the hope that it will be useful,
2771+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2772+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2773+ * GNU General Public License for more details.
2774+ *
2775+ * You should have received a copy of the GNU General Public License
2776+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2777+ *
2778+ */
2779+
2780+import QtQuick 2.0
2781+import Ubuntu.Components 0.1
2782+
2783+/*
2784+ Thumbnail wraps up an image in a ubuntu shape container.
2785+ */
2786+UbuntuShape {
2787+ id: carouselThumb
2788+
2789+ property alias thumbSource: thumbPic.source
2790+ radius: "medium"
2791+
2792+ image: Image {
2793+ id: thumbPic
2794+ fillMode: Image.PreserveAspectCrop
2795+ smooth: true
2796+ }
2797+
2798+ ActivityIndicator {
2799+ running: thumbPic.status != Image.Ready
2800+ anchors.centerIn: parent
2801+ }
2802+}
2803
2804=== added file 'components/TraktAction.qml'
2805--- components/TraktAction.qml 1970-01-01 00:00:00 +0000
2806+++ components/TraktAction.qml 2014-05-14 17:33:57 +0000
2807@@ -0,0 +1,28 @@
2808+/*
2809+ * Flashback - Entertainment app for Ubuntu
2810+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2811+ *
2812+ * This program is free software: you can redistribute it and/or modify
2813+ * it under the terms of the GNU General Public License version 3 as
2814+ * published by the Free Software Foundation.
2815+ *
2816+ * This program is distributed in the hope that it will be useful,
2817+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2818+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2819+ * GNU General Public License for more details.
2820+ *
2821+ * You should have received a copy of the GNU General Public License
2822+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2823+ *
2824+ */
2825+
2826+import QtQuick 2.0
2827+import Ubuntu.Components 0.1
2828+
2829+Action {
2830+ id: shareEpisodeAction
2831+ text: i18n.tr("Trakt")
2832+ keywords: i18n.tr("Trakt;Account;Watched;Seen;Share;Checkin;Social")
2833+ description: i18n.tr("Show Trakt Actions")
2834+ iconSource: Qt.resolvedUrl("../graphics/trakt.png")
2835+}
2836
2837=== added file 'components/TraktPopup.qml'
2838--- components/TraktPopup.qml 1970-01-01 00:00:00 +0000
2839+++ components/TraktPopup.qml 2014-05-14 17:33:57 +0000
2840@@ -0,0 +1,123 @@
2841+/*
2842+ * Flashback - Entertainment app for Ubuntu
2843+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2844+ *
2845+ * This program is free software: you can redistribute it and/or modify
2846+ * it under the terms of the GNU General Public License version 3 as
2847+ * published by the Free Software Foundation.
2848+ *
2849+ * This program is distributed in the hope that it will be useful,
2850+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2851+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2852+ * GNU General Public License for more details.
2853+ *
2854+ * You should have received a copy of the GNU General Public License
2855+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2856+ *
2857+ */
2858+
2859+import QtQuick 2.0
2860+import Ubuntu.Components 0.1
2861+import Ubuntu.Components.Popups 0.1
2862+import Ubuntu.Components.ListItems 0.1
2863+
2864+/*
2865+ Popup component to expose Trakt actions such as check-in, seen and configuring account.
2866+ */
2867+Popover {
2868+ id: popover
2869+
2870+ // Property to set the check-in message
2871+ property alias checkInMessage: _checkInAction.text
2872+
2873+ // Property to set the seen message
2874+ property alias seenMessage: _seenAction.text
2875+
2876+ // Property to set the watchlist message
2877+ property alias watchlistMessage: _watchlistAction.text
2878+
2879+ // Properties to set the visibility of the individual actions
2880+ property bool showConfigureAction: traktLogin.contents.status === "disabled"
2881+ property bool showCheckInAction: traktLogin.contents.status !== "disabled"
2882+ property bool showSeenAction: traktLogin.contents.status !== "disabled"
2883+ property bool showWatchlistAction: traktLogin.contents.status !== "disabled"
2884+ property bool showCommentAction: true
2885+
2886+ // Signal triggered when the checked-in action is triggered
2887+ signal checkedIn()
2888+
2889+ // Signal triggered when the watched action is triggered
2890+ signal watched()
2891+
2892+ // Signal triggered when the comments action is triggered
2893+ signal commented()
2894+
2895+ // Signal triggered when the watchlist action is triggered
2896+ signal watchlisted()
2897+
2898+ Column {
2899+ id: containerLayout
2900+ anchors {
2901+ left: parent.left
2902+ top: parent.top
2903+ right: parent.right
2904+ }
2905+
2906+ Standard {
2907+ id: _configureTraktAction
2908+ text: i18n.tr("Authenticate Trakt to perform \ncheck-ins, comment and rating.")
2909+ visible: showConfigureAction
2910+ iconSource: Qt.resolvedUrl("../graphics/trakt_logo.png")
2911+ onClicked: {
2912+ pagestack.push(Qt.resolvedUrl("../ui/Trakt.qml"))
2913+ PopupUtils.close(popover)
2914+ }
2915+ }
2916+
2917+ Standard {
2918+ id: _checkInAction
2919+ visible: showCheckInAction
2920+ iconSource: Qt.resolvedUrl("../graphics/checkmark_black.png")
2921+ iconFrame: false
2922+ onClicked: {
2923+ popover.checkedIn()
2924+ PopupUtils.close(popover)
2925+ }
2926+ }
2927+
2928+ Standard {
2929+ id: _watchlistAction
2930+ visible: showWatchlistAction
2931+ iconSource: Qt.resolvedUrl("../graphics/watchlist_black.png")
2932+ iconFrame: false
2933+ onClicked: {
2934+ popover.watchlisted()
2935+ PopupUtils.close(popover)
2936+ }
2937+ }
2938+
2939+ Standard {
2940+ id: _seenAction
2941+ visible: showSeenAction
2942+ iconSource: Qt.resolvedUrl("../graphics/watched_black.png")
2943+ iconFrame: false
2944+ onClicked: {
2945+ popover.watched()
2946+ PopupUtils.close(popover)
2947+ }
2948+ }
2949+
2950+ Standard {
2951+ id: _commentAction
2952+ visible: showCommentAction
2953+ iconSource: Qt.resolvedUrl("../graphics/comment.png")
2954+ text: traktLogin.contents.status !== "disabled" ? i18n.tr("View/Add comments") : i18n.tr("View comments")
2955+ iconFrame: false
2956+ onClicked: {
2957+ popover.commented()
2958+ PopupUtils.close(popover)
2959+ }
2960+ }
2961+ }
2962+}
2963+
2964
2965=== added file 'components/TraktRating.qml'
2966--- components/TraktRating.qml 1970-01-01 00:00:00 +0000
2967+++ components/TraktRating.qml 2014-05-14 17:33:57 +0000
2968@@ -0,0 +1,56 @@
2969+/*
2970+ * Flashback - Entertainment app for Ubuntu
2971+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
2972+ *
2973+ * This program is free software: you can redistribute it and/or modify
2974+ * it under the terms of the GNU General Public License version 3 as
2975+ * published by the Free Software Foundation.
2976+ *
2977+ * This program is distributed in the hope that it will be useful,
2978+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2979+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2980+ * GNU General Public License for more details.
2981+ *
2982+ * You should have received a copy of the GNU General Public License
2983+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
2984+ *
2985+ */
2986+
2987+import QtQuick 2.0
2988+import Ubuntu.Components 0.1
2989+import "../components"
2990+
2991+Item {
2992+ id: ratings
2993+
2994+ property alias rating: _rating.label
2995+ property alias personal: _personalRating.label
2996+ property alias personalIcon: _personalRating.image
2997+
2998+ height: _overallRating.height
2999+
3000+ signal clicked()
3001+
3002+ Row {
3003+ id: _overallRating
3004+
3005+ spacing: units.gu(2)
3006+ anchors {
3007+ horizontalCenter: parent.horizontalCenter
3008+ verticalCenter: parent.verticalCenter
3009+ }
3010+
3011+ ImageLabel {
3012+ id: _rating
3013+ image: Qt.resolvedUrl("../graphics/star.png")
3014+ }
3015+
3016+ ImageLabel {
3017+ id: _personalRating
3018+ MouseArea {
3019+ anchors.fill: parent
3020+ onClicked: ratings.clicked()
3021+ }
3022+ }
3023+ }
3024+}
3025
3026=== added directory 'debian'
3027=== renamed directory 'debian' => 'debian.moved'
3028=== added file 'debian/changelog'
3029--- debian/changelog 1970-01-01 00:00:00 +0000
3030+++ debian/changelog 2014-05-14 17:33:57 +0000
3031@@ -0,0 +1,27 @@
3032+flashback (0.4~alpha1) trusty; urgency=medium
3033+
3034+ [Nekhelesh Ramananthan]
3035+ * Fixed blurry actor placeholder image (LP: #1293787)
3036+ * Added placeholder text to the actors page biography if none are found (LP: #1292891)
3037+ * Made the ratings chooser opaque (LP: #1292884)
3038+ * Replace acting and production listview in actors page wth expandables (LP: #1292882)
3039+ * In the phone form factor, carousel now only shows 2 and 2/3rd cover art (LP: #1292878)
3040+
3041+ -- Nekhelesh Ramananthan <krnekhelesh@gmail.com> Sat, 22 Mar 2014 15:04:33 +0100
3042+
3043+flashback (0.3.2ubuntu1) trusty; urgency=medium
3044+
3045+ [Nekhelesh Ramananthan]
3046+ * Fixed debian packaing failnig due to missing flashback executable file
3047+
3048+ -- Nekhelesh Ramananthan <krnekhelesh@gmail.com> Mon, 17 Mar 2014 13:51:18 +0100
3049+
3050+flashback (0.3.2) trusty; urgency=medium
3051+
3052+ [Nekhelesh Ramananthan]
3053+ * Added walkthrough feature
3054+ * Added new home page search function
3055+ * Improved the visual of detail carousel corner radius
3056+ * Improved TV Show experience
3057+
3058+ -- Nekhelesh Ramananthan <krnekhelesh@gmail.com> Mon, 17 Mar 2014 09:43:01 +0100
3059
3060=== added file 'debian/compat'
3061--- debian/compat 1970-01-01 00:00:00 +0000
3062+++ debian/compat 2014-05-14 17:33:57 +0000
3063@@ -0,0 +1,1 @@
3064+9
3065
3066=== added file 'debian/control'
3067--- debian/control 1970-01-01 00:00:00 +0000
3068+++ debian/control 2014-05-14 17:33:57 +0000
3069@@ -0,0 +1,23 @@
3070+Source: flashback
3071+Section: utils
3072+Priority: extra
3073+Maintainer: Nekhelesh Ramananthan <nik90@ubuntu.com>
3074+Build-Depends: debhelper (>= 9.0.0)
3075+Standards-Version: 3.9.5
3076+Homepage: http://launchpad.net/cliffhanger
3077+Vcs-Bzr: https://code.launchpad.net/~cliffhanger-dev/cliffhanger/trunk
3078+
3079+Package: flashback
3080+Architecture: all
3081+Depends: ${misc:Depends},
3082+ qtdeclarative5-hud1.0,
3083+ qtdeclarative5-qtquick2-plugin,
3084+ qtdeclarative5-ubuntu-ui-toolkit-plugin,
3085+ qtdeclarative5-u1db1.0,
3086+ qmlscene
3087+Description: Flashback application
3088+ Flashback is an entertainment application that helps you manage your movie
3089+ and TV show cravings. It integrates with Trakt and TMDB online services to
3090+ provide a variety of features such as discovering new movie, keeping track
3091+ of tv shows, adding movies and tv shows to your watchlist to watch later.
3092+
3093
3094=== added file 'debian/copyright'
3095--- debian/copyright 1970-01-01 00:00:00 +0000
3096+++ debian/copyright 2014-05-14 17:33:57 +0000
3097@@ -0,0 +1,28 @@
3098+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
3099+Upstream-Name: flashback
3100+Source: https://launchpad.net/cliffhanger
3101+
3102+Files: *
3103+Copyright: 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
3104+License: GPL-3.0
3105+
3106+Files: debian/*
3107+Copyright: 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
3108+License: GPL-3.0
3109+
3110+License: GPL-3.0
3111+ This program is free software: you can redistribute it and/or modify
3112+ it under the terms of the GNU General Public License as published by
3113+ the Free Software Foundation, either version 3 of the License, or
3114+ (at your option) any later version.
3115+ .
3116+ This package is distributed in the hope that it will be useful,
3117+ but WITHOUT ANY WARRANTY; without even the implied warranty of
3118+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3119+ GNU General Public License for more details.
3120+ .
3121+ You should have received a copy of the GNU General Public License
3122+ along with this program. If not, see <http://www.gnu.org/licenses/>.
3123+ .
3124+ On Debian systems, the complete text of the GNU General
3125+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
3126
3127=== added file 'debian/install'
3128--- debian/install 1970-01-01 00:00:00 +0000
3129+++ debian/install 2014-05-14 17:33:57 +0000
3130@@ -0,0 +1,9 @@
3131+Flashback.desktop usr/share/applications/
3132+Flashback.qml usr/share/flashback/
3133+flashback.png usr/share/icons/hicolor/256x256/apps/
3134+backend usr/share/flashback/
3135+components usr/share/flashback/
3136+graphics usr/share/flashback/
3137+models usr/share/flashback/
3138+ui usr/share/flashback/
3139+walkthrough usr/share/flashback/
3140
3141=== added file 'debian/rules'
3142--- debian/rules 1970-01-01 00:00:00 +0000
3143+++ debian/rules 2014-05-14 17:33:57 +0000
3144@@ -0,0 +1,7 @@
3145+#!/usr/bin/make -f
3146+# -*- makefile -*-
3147+# Uncomment this to turn on verbose mode.
3148+#export DH_VERBOSE=1
3149+
3150+%:
3151+ dh $@
3152
3153=== added directory 'debian/source'
3154=== added file 'debian/source/format'
3155--- debian/source/format 1970-01-01 00:00:00 +0000
3156+++ debian/source/format 2014-05-14 17:33:57 +0000
3157@@ -0,0 +1,1 @@
3158+3.0 (native)
3159
3160=== added file 'design.jpg'
3161Binary files design.jpg 1970-01-01 00:00:00 +0000 and design.jpg 2014-05-14 17:33:57 +0000 differ
3162=== renamed file 'design.jpg' => 'design.jpg.moved'
3163=== added file 'flashback.png'
3164Binary files flashback.png 1970-01-01 00:00:00 +0000 and flashback.png 2014-05-14 17:33:57 +0000 differ
3165=== renamed file 'flashback.png' => 'flashback.png.moved'
3166=== added directory 'graphics'
3167=== renamed directory 'graphics' => 'graphics.moved'
3168=== added file 'graphics/add@8.png'
3169Binary files graphics/add@8.png 1970-01-01 00:00:00 +0000 and graphics/add@8.png 2014-05-14 17:33:57 +0000 differ
3170=== added file 'graphics/arrow.png'
3171Binary files graphics/arrow.png 1970-01-01 00:00:00 +0000 and graphics/arrow.png 2014-05-14 17:33:57 +0000 differ
3172=== added file 'graphics/author.jpg'
3173Binary files graphics/author.jpg 1970-01-01 00:00:00 +0000 and graphics/author.jpg 2014-05-14 17:33:57 +0000 differ
3174=== added file 'graphics/bookmark.png'
3175Binary files graphics/bookmark.png 1970-01-01 00:00:00 +0000 and graphics/bookmark.png 2014-05-14 17:33:57 +0000 differ
3176=== added file 'graphics/calendar.png'
3177Binary files graphics/calendar.png 1970-01-01 00:00:00 +0000 and graphics/calendar.png 2014-05-14 17:33:57 +0000 differ
3178=== added file 'graphics/centerImage.png'
3179Binary files graphics/centerImage.png 1970-01-01 00:00:00 +0000 and graphics/centerImage.png 2014-05-14 17:33:57 +0000 differ
3180=== added file 'graphics/checkmark.png'
3181Binary files graphics/checkmark.png 1970-01-01 00:00:00 +0000 and graphics/checkmark.png 2014-05-14 17:33:57 +0000 differ
3182=== added file 'graphics/checkmark_black.png'
3183Binary files graphics/checkmark_black.png 1970-01-01 00:00:00 +0000 and graphics/checkmark_black.png 2014-05-14 17:33:57 +0000 differ
3184=== added file 'graphics/close.png'
3185Binary files graphics/close.png 1970-01-01 00:00:00 +0000 and graphics/close.png 2014-05-14 17:33:57 +0000 differ
3186=== added file 'graphics/comment.png'
3187Binary files graphics/comment.png 1970-01-01 00:00:00 +0000 and graphics/comment.png 2014-05-14 17:33:57 +0000 differ
3188=== added file 'graphics/credits.png'
3189Binary files graphics/credits.png 1970-01-01 00:00:00 +0000 and graphics/credits.png 2014-05-14 17:33:57 +0000 differ
3190=== added file 'graphics/designer.jpg'
3191Binary files graphics/designer.jpg 1970-01-01 00:00:00 +0000 and graphics/designer.jpg 2014-05-14 17:33:57 +0000 differ
3192=== added file 'graphics/duration.png'
3193Binary files graphics/duration.png 1970-01-01 00:00:00 +0000 and graphics/duration.png 2014-05-14 17:33:57 +0000 differ
3194=== added file 'graphics/email.png'
3195Binary files graphics/email.png 1970-01-01 00:00:00 +0000 and graphics/email.png 2014-05-14 17:33:57 +0000 differ
3196=== added file 'graphics/error.png'
3197Binary files graphics/error.png 1970-01-01 00:00:00 +0000 and graphics/error.png 2014-05-14 17:33:57 +0000 differ
3198=== added file 'graphics/facebook_logo.png'
3199Binary files graphics/facebook_logo.png 1970-01-01 00:00:00 +0000 and graphics/facebook_logo.png 2014-05-14 17:33:57 +0000 differ
3200=== added file 'graphics/find@32.svg'
3201--- graphics/find@32.svg 1970-01-01 00:00:00 +0000
3202+++ graphics/find@32.svg 2014-05-14 17:33:57 +0000
3203@@ -0,0 +1,140 @@
3204+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3205+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3206+
3207+<svg
3208+ xmlns:dc="http://purl.org/dc/elements/1.1/"
3209+ xmlns:cc="http://creativecommons.org/ns#"
3210+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3211+ xmlns:svg="http://www.w3.org/2000/svg"
3212+ xmlns="http://www.w3.org/2000/svg"
3213+ xmlns:xlink="http://www.w3.org/1999/xlink"
3214+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
3215+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
3216+ width="90"
3217+ height="90.000015"
3218+ id="svg3133"
3219+ version="1.1"
3220+ inkscape:version="0.48.3.1 r9886"
3221+ sodipodi:docname="search@30.svg">
3222+ <defs
3223+ id="defs3135">
3224+ <linearGradient
3225+ inkscape:collect="always"
3226+ id="linearGradient3803">
3227+ <stop
3228+ style="stop-color:#e7e5e5;stop-opacity:1;"
3229+ offset="0"
3230+ id="stop3805" />
3231+ <stop
3232+ style="stop-color:#e2dfdf;stop-opacity:1"
3233+ offset="1"
3234+ id="stop3807" />
3235+ </linearGradient>
3236+ <linearGradient
3237+ inkscape:collect="always"
3238+ xlink:href="#linearGradient3803"
3239+ id="linearGradient3809"
3240+ x1="53.012165"
3241+ y1="-102.79017"
3242+ x2="53.012165"
3243+ y2="-66.661224"
3244+ gradientUnits="userSpaceOnUse" />
3245+ <linearGradient
3246+ inkscape:collect="always"
3247+ xlink:href="#linearGradient3803"
3248+ id="linearGradient3813"
3249+ gradientUnits="userSpaceOnUse"
3250+ x1="53.012165"
3251+ y1="-102.79017"
3252+ x2="53.012165"
3253+ y2="-66.661224"
3254+ gradientTransform="translate(-625,0)" />
3255+ </defs>
3256+ <sodipodi:namedview
3257+ id="base"
3258+ pagecolor="#ffffff"
3259+ bordercolor="#666666"
3260+ borderopacity="1.0"
3261+ inkscape:pageopacity="0.0"
3262+ inkscape:pageshadow="2"
3263+ inkscape:zoom="4.074536"
3264+ inkscape:cx="65.661925"
3265+ inkscape:cy="-9.5470961"
3266+ inkscape:document-units="px"
3267+ inkscape:current-layer="g3842"
3268+ showgrid="true"
3269+ inkscape:window-width="1920"
3270+ inkscape:window-height="1029"
3271+ inkscape:window-x="0"
3272+ inkscape:window-y="24"
3273+ inkscape:window-maximized="1"
3274+ inkscape:snap-grids="true"
3275+ inkscape:snap-global="true"
3276+ fit-margin-top="0"
3277+ fit-margin-left="0"
3278+ fit-margin-right="0"
3279+ fit-margin-bottom="0">
3280+ <inkscape:grid
3281+ type="xygrid"
3282+ id="grid3016"
3283+ empspacing="6"
3284+ visible="true"
3285+ enabled="true"
3286+ snapvisiblegridlinesonly="true"
3287+ originx="-2.98e-06px"
3288+ originy="2.6171874e-06px" />
3289+ </sodipodi:namedview>
3290+ <metadata
3291+ id="metadata3138">
3292+ <rdf:RDF>
3293+ <cc:Work
3294+ rdf:about="">
3295+ <dc:format>image/svg+xml</dc:format>
3296+ <dc:type
3297+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
3298+ <dc:title />
3299+ </cc:Work>
3300+ </rdf:RDF>
3301+ </metadata>
3302+ <g
3303+ inkscape:label="Layer 1"
3304+ inkscape:groupmode="layer"
3305+ id="layer1"
3306+ transform="translate(-2.98e-6,-962.36219)"
3307+ style="display:inline">
3308+ <g
3309+ transform="matrix(0.99934414,0,0,1,-106.92982,549.00002)"
3310+ id="g3842"
3311+ style="display:inline">
3312+ <rect
3313+ style="opacity:0.05;color:#000000;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3314+ id="rect3844"
3315+ width="90.059067"
3316+ height="90.000015"
3317+ x="107"
3318+ y="-503.36218"
3319+ transform="scale(1,-1)" />
3320+ <path
3321+ sodipodi:type="arc"
3322+ style="color:#000000;fill:none;stroke:#808080;stroke-width:9.49973201999999972;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3323+ id="path2995"
3324+ sodipodi:cx="35.999996"
3325+ sodipodi:cy="36.500011"
3326+ sodipodi:rx="33"
3327+ sodipodi:ry="33.5"
3328+ d="m 68.999996,36.500011 a 33,33.5 0 1 1 -65.9999998,0 33,33.5 0 1 1 65.9999998,0 z"
3329+ transform="matrix(0.9551718,0,0,0.94029844,108.63744,415.04128)" />
3330+ <path
3331+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#808080;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
3332+ d="m 168.16512,470.23717 -4.25279,4.25 21.01378,21 4.25279,-4.25 -21.01378,-21 z"
3333+ id="path3765"
3334+ inkscape:connector-curvature="0" />
3335+ <path
3336+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#808080;fill-opacity:1;stroke:none;stroke-width:11.80387211;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
3337+ d="m 175.96875,476.40625 c -2.32437,0.012 -4.57033,1.53501 -5.44162,3.68994 -0.87128,2.15492 -0.31496,4.81092 1.34787,6.43506 l 13.7996,13.79991 c 4.02735,4.27401 4.89575,3.69726 8.46955,0.1258 3.57381,-3.57146 4.15747,-4.18909 -0.1258,-8.46955 l -13.7996,-13.79991 c -1.10179,-1.12969 -2.672,-1.78779 -4.25,-1.78125 z"
3338+ id="path3767"
3339+ inkscape:connector-curvature="0"
3340+ sodipodi:nodetypes="cscczccc" />
3341+ </g>
3342+ </g>
3343+</svg>
3344
3345=== added file 'graphics/fusion.png'
3346Binary files graphics/fusion.png 1970-01-01 00:00:00 +0000 and graphics/fusion.png 2014-05-14 17:33:57 +0000 differ
3347=== added file 'graphics/guide.png'
3348Binary files graphics/guide.png 1970-01-01 00:00:00 +0000 and graphics/guide.png 2014-05-14 17:33:57 +0000 differ
3349=== added file 'graphics/heart-0.png'
3350Binary files graphics/heart-0.png 1970-01-01 00:00:00 +0000 and graphics/heart-0.png 2014-05-14 17:33:57 +0000 differ
3351=== added file 'graphics/heart-1.png'
3352Binary files graphics/heart-1.png 1970-01-01 00:00:00 +0000 and graphics/heart-1.png 2014-05-14 17:33:57 +0000 differ
3353=== added file 'graphics/heart-10.png'
3354Binary files graphics/heart-10.png 1970-01-01 00:00:00 +0000 and graphics/heart-10.png 2014-05-14 17:33:57 +0000 differ
3355=== added file 'graphics/heart-2.png'
3356Binary files graphics/heart-2.png 1970-01-01 00:00:00 +0000 and graphics/heart-2.png 2014-05-14 17:33:57 +0000 differ
3357=== added file 'graphics/heart-3.png'
3358Binary files graphics/heart-3.png 1970-01-01 00:00:00 +0000 and graphics/heart-3.png 2014-05-14 17:33:57 +0000 differ
3359=== added file 'graphics/heart-4.png'
3360Binary files graphics/heart-4.png 1970-01-01 00:00:00 +0000 and graphics/heart-4.png 2014-05-14 17:33:57 +0000 differ
3361=== added file 'graphics/heart-5.png'
3362Binary files graphics/heart-5.png 1970-01-01 00:00:00 +0000 and graphics/heart-5.png 2014-05-14 17:33:57 +0000 differ
3363=== added file 'graphics/heart-6.png'
3364Binary files graphics/heart-6.png 1970-01-01 00:00:00 +0000 and graphics/heart-6.png 2014-05-14 17:33:57 +0000 differ
3365=== added file 'graphics/heart-7.png'
3366Binary files graphics/heart-7.png 1970-01-01 00:00:00 +0000 and graphics/heart-7.png 2014-05-14 17:33:57 +0000 differ
3367=== added file 'graphics/heart-8.png'
3368Binary files graphics/heart-8.png 1970-01-01 00:00:00 +0000 and graphics/heart-8.png 2014-05-14 17:33:57 +0000 differ
3369=== added file 'graphics/heart-9.png'
3370Binary files graphics/heart-9.png 1970-01-01 00:00:00 +0000 and graphics/heart-9.png 2014-05-14 17:33:57 +0000 differ
3371=== added file 'graphics/help.png'
3372Binary files graphics/help.png 1970-01-01 00:00:00 +0000 and graphics/help.png 2014-05-14 17:33:57 +0000 differ
3373=== added file 'graphics/home.png'
3374Binary files graphics/home.png 1970-01-01 00:00:00 +0000 and graphics/home.png 2014-05-14 17:33:57 +0000 differ
3375=== added file 'graphics/icon_designer.jpg'
3376Binary files graphics/icon_designer.jpg 1970-01-01 00:00:00 +0000 and graphics/icon_designer.jpg 2014-05-14 17:33:57 +0000 differ
3377=== added file 'graphics/list.png'
3378Binary files graphics/list.png 1970-01-01 00:00:00 +0000 and graphics/list.png 2014-05-14 17:33:57 +0000 differ
3379=== added file 'graphics/network.png'
3380Binary files graphics/network.png 1970-01-01 00:00:00 +0000 and graphics/network.png 2014-05-14 17:33:57 +0000 differ
3381=== added file 'graphics/no-passport@8.png'
3382Binary files graphics/no-passport@8.png 1970-01-01 00:00:00 +0000 and graphics/no-passport@8.png 2014-05-14 17:33:57 +0000 differ
3383=== added file 'graphics/no-poster.jpg'
3384Binary files graphics/no-poster.jpg 1970-01-01 00:00:00 +0000 and graphics/no-poster.jpg 2014-05-14 17:33:57 +0000 differ
3385=== added file 'graphics/now_playing@48.png'
3386Binary files graphics/now_playing@48.png 1970-01-01 00:00:00 +0000 and graphics/now_playing@48.png 2014-05-14 17:33:57 +0000 differ
3387=== added file 'graphics/password.png'
3388Binary files graphics/password.png 1970-01-01 00:00:00 +0000 and graphics/password.png 2014-05-14 17:33:57 +0000 differ
3389=== added file 'graphics/play@32.svg'
3390--- graphics/play@32.svg 1970-01-01 00:00:00 +0000
3391+++ graphics/play@32.svg 2014-05-14 17:33:57 +0000
3392@@ -0,0 +1,98 @@
3393+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3394+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3395+
3396+<svg
3397+ xmlns:dc="http://purl.org/dc/elements/1.1/"
3398+ xmlns:cc="http://creativecommons.org/ns#"
3399+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3400+ xmlns:svg="http://www.w3.org/2000/svg"
3401+ xmlns="http://www.w3.org/2000/svg"
3402+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
3403+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
3404+ width="90"
3405+ height="90"
3406+ id="svg3747"
3407+ version="1.1"
3408+ inkscape:version="0.48.3.1 r9886"
3409+ sodipodi:docname="media-play@30.svg">
3410+ <defs
3411+ id="defs3749" />
3412+ <sodipodi:namedview
3413+ id="base"
3414+ pagecolor="#ffffff"
3415+ bordercolor="#666666"
3416+ borderopacity="1.0"
3417+ inkscape:pageopacity="0.0"
3418+ inkscape:pageshadow="2"
3419+ inkscape:zoom="3.259629"
3420+ inkscape:cx="64.301793"
3421+ inkscape:cy="-13.007581"
3422+ inkscape:document-units="px"
3423+ inkscape:current-layer="g4171"
3424+ showgrid="true"
3425+ fit-margin-top="0"
3426+ fit-margin-left="0"
3427+ fit-margin-right="0"
3428+ fit-margin-bottom="0"
3429+ inkscape:window-width="1920"
3430+ inkscape:window-height="1029"
3431+ inkscape:window-x="0"
3432+ inkscape:window-y="24"
3433+ inkscape:window-maximized="1">
3434+ <inkscape:grid
3435+ type="xygrid"
3436+ id="grid3012"
3437+ empspacing="6"
3438+ visible="true"
3439+ enabled="true"
3440+ snapvisiblegridlinesonly="true"
3441+ originx="0px"
3442+ originy="1.3134766e-05px" />
3443+ </sodipodi:namedview>
3444+ <metadata
3445+ id="metadata3752">
3446+ <rdf:RDF>
3447+ <cc:Work
3448+ rdf:about="">
3449+ <dc:format>image/svg+xml</dc:format>
3450+ <dc:type
3451+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
3452+ <dc:title />
3453+ </cc:Work>
3454+ </rdf:RDF>
3455+ </metadata>
3456+ <g
3457+ inkscape:label="Layer 1"
3458+ inkscape:groupmode="layer"
3459+ id="layer1"
3460+ transform="translate(-144,-962.36221)">
3461+ <g
3462+ transform="translate(-198,611)"
3463+ id="g4171">
3464+ <path
3465+ sodipodi:type="star"
3466+ style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3467+ id="path4984"
3468+ sodipodi:sides="3"
3469+ sodipodi:cx="111"
3470+ sodipodi:cy="174.09448"
3471+ sodipodi:r1="5.8309517"
3472+ sodipodi:r2="2.9154758"
3473+ sodipodi:arg1="1.0471976"
3474+ sodipodi:arg2="2.0943951"
3475+ inkscape:flatsided="true"
3476+ inkscape:rounded="0.06"
3477+ inkscape:randomized="0"
3478+ d="m 113.91548,179.14423 c -0.52479,0.30299 -8.74643,-4.44378 -8.74643,-5.04975 0,-0.60597 8.22164,-5.35273 8.74643,-5.04975 0.52478,0.30299 0.52478,9.79652 0,10.0995 z"
3479+ transform="matrix(-5.9080854,0,0,5.9245853,1038.3477,-635.0754)"
3480+ inkscape:transform-center-x="-5.7056976" />
3481+ <rect
3482+ style="color:#000000;fill:none;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3483+ id="rect2986"
3484+ width="90"
3485+ height="90"
3486+ x="342"
3487+ y="351.36221" />
3488+ </g>
3489+ </g>
3490+</svg>
3491
3492=== added file 'graphics/rating@8.png'
3493Binary files graphics/rating@8.png 1970-01-01 00:00:00 +0000 and graphics/rating@8.png 2014-05-14 17:33:57 +0000 differ
3494=== added file 'graphics/recommended@48.png'
3495Binary files graphics/recommended@48.png 1970-01-01 00:00:00 +0000 and graphics/recommended@48.png 2014-05-14 17:33:57 +0000 differ
3496=== added file 'graphics/search_icon@8.svg'
3497--- graphics/search_icon@8.svg 1970-01-01 00:00:00 +0000
3498+++ graphics/search_icon@8.svg 2014-05-14 17:33:57 +0000
3499@@ -0,0 +1,153 @@
3500+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3501+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3502+
3503+<svg
3504+ xmlns:dc="http://purl.org/dc/elements/1.1/"
3505+ xmlns:cc="http://creativecommons.org/ns#"
3506+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3507+ xmlns:svg="http://www.w3.org/2000/svg"
3508+ xmlns="http://www.w3.org/2000/svg"
3509+ xmlns:xlink="http://www.w3.org/1999/xlink"
3510+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
3511+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
3512+ width="32"
3513+ height="32"
3514+ id="svg3133"
3515+ version="1.1"
3516+ inkscape:version="0.48.4 r9939"
3517+ sodipodi:docname="search.svg">
3518+ <defs
3519+ id="defs3135">
3520+ <linearGradient
3521+ inkscape:collect="always"
3522+ id="linearGradient3803">
3523+ <stop
3524+ style="stop-color:#e7e5e5;stop-opacity:1;"
3525+ offset="0"
3526+ id="stop3805" />
3527+ <stop
3528+ style="stop-color:#e2dfdf;stop-opacity:1"
3529+ offset="1"
3530+ id="stop3807" />
3531+ </linearGradient>
3532+ <linearGradient
3533+ inkscape:collect="always"
3534+ xlink:href="#linearGradient3803"
3535+ id="linearGradient3809"
3536+ x1="53.012165"
3537+ y1="-102.79017"
3538+ x2="53.012165"
3539+ y2="-66.661224"
3540+ gradientUnits="userSpaceOnUse" />
3541+ <linearGradient
3542+ inkscape:collect="always"
3543+ xlink:href="#linearGradient3803"
3544+ id="linearGradient3813"
3545+ gradientUnits="userSpaceOnUse"
3546+ x1="53.012165"
3547+ y1="-102.79017"
3548+ x2="53.012165"
3549+ y2="-66.661224"
3550+ gradientTransform="translate(-625,0)" />
3551+ </defs>
3552+ <sodipodi:namedview
3553+ id="base"
3554+ pagecolor="#ffffff"
3555+ bordercolor="#666666"
3556+ borderopacity="1.0"
3557+ inkscape:pageopacity="0.0"
3558+ inkscape:pageshadow="2"
3559+ inkscape:zoom="11.313708"
3560+ inkscape:cx="27.957393"
3561+ inkscape:cy="7.2819708"
3562+ inkscape:document-units="px"
3563+ inkscape:current-layer="g3842"
3564+ showgrid="true"
3565+ inkscape:window-width="1855"
3566+ inkscape:window-height="1056"
3567+ inkscape:window-x="65"
3568+ inkscape:window-y="24"
3569+ inkscape:window-maximized="1"
3570+ inkscape:snap-grids="true"
3571+ inkscape:snap-global="true"
3572+ fit-margin-top="0"
3573+ fit-margin-left="0"
3574+ fit-margin-right="0"
3575+ fit-margin-bottom="0"
3576+ inkscape:snap-bbox="true"
3577+ inkscape:bbox-paths="true"
3578+ inkscape:bbox-nodes="true"
3579+ inkscape:snap-bbox-edge-midpoints="true"
3580+ inkscape:snap-bbox-midpoints="true"
3581+ inkscape:object-paths="true"
3582+ inkscape:snap-intersection-paths="true"
3583+ inkscape:snap-midpoints="true"
3584+ inkscape:snap-smooth-nodes="true"
3585+ inkscape:object-nodes="true"
3586+ inkscape:snap-object-midpoints="true"
3587+ inkscape:snap-center="true">
3588+ <inkscape:grid
3589+ type="xygrid"
3590+ id="grid3016"
3591+ empspacing="6"
3592+ visible="true"
3593+ enabled="true"
3594+ snapvisiblegridlinesonly="true"
3595+ originx="-2.98e-06px"
3596+ originy="2.6171874e-06px" />
3597+ </sodipodi:namedview>
3598+ <metadata
3599+ id="metadata3138">
3600+ <rdf:RDF>
3601+ <cc:Work
3602+ rdf:about="">
3603+ <dc:format>image/svg+xml</dc:format>
3604+ <dc:type
3605+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
3606+ <dc:title></dc:title>
3607+ </cc:Work>
3608+ </rdf:RDF>
3609+ </metadata>
3610+ <g
3611+ inkscape:label="Layer 1"
3612+ inkscape:groupmode="layer"
3613+ id="layer1"
3614+ transform="translate(-2.98e-6,-1020.3622)"
3615+ style="display:inline">
3616+ <g
3617+ transform="matrix(0.99934414,0,0,1,-106.92982,549.00002)"
3618+ id="g3842"
3619+ style="display:inline">
3620+ <rect
3621+ style="opacity:0.05;color:#000000;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3622+ id="rect3844"
3623+ width="32.021008"
3624+ height="32.000011"
3625+ x="107"
3626+ y="-503.36218"
3627+ transform="scale(1,-1)" />
3628+ <path
3629+ sodipodi:type="arc"
3630+ style="color:#000000;fill:none;stroke:#808080;stroke-width:10.49972248;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3631+ id="path2995"
3632+ sodipodi:cx="35.999996"
3633+ sodipodi:cy="36.500011"
3634+ sodipodi:rx="33"
3635+ sodipodi:ry="33.5"
3636+ d="m 68.999996,36.500011 a 33,33.5 0 1 1 -65.9999998,0 33,33.5 0 1 1 65.9999998,0 z"
3637+ transform="matrix(0.30695569,0,0,0.30279797,111.9601,476.31005)" />
3638+ <path
3639+ style="font-size:xx-small;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#808080;fill-opacity:1;stroke:none;stroke-width:6;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
3640+ d="m 131.23812,494.07329 -1.51211,1.51111 4.26947,4.26666 1.5121,-1.5111 z"
3641+ id="path3765"
3642+ inkscape:connector-curvature="0"
3643+ sodipodi:nodetypes="ccccc" />
3644+ <path
3645+ style="font-size:xx-small;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#808080;fill-opacity:1;stroke:none;stroke-width:11.80387211;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
3646+ d="m 133.30117,495.55563 c -0.82645,0.004 -1.62501,0.54578 -1.9348,1.31198 -0.30979,0.7662 -0.11199,1.71055 0.47924,2.28802 l 3.12758,3.12885 c 1.43195,1.51965 1.74071,1.31459 3.0114,0.0447 1.27069,-1.26986 1.47821,-1.48946 -0.0447,-3.01141 l -3.12758,-3.12885 c -0.39175,-0.40166 -0.95004,-0.63566 -1.51111,-0.63333 z"
3647+ id="path3767"
3648+ inkscape:connector-curvature="0"
3649+ sodipodi:nodetypes="cscczccc" />
3650+ </g>
3651+ </g>
3652+</svg>
3653
3654=== added file 'graphics/settings@32.svg'
3655--- graphics/settings@32.svg 1970-01-01 00:00:00 +0000
3656+++ graphics/settings@32.svg 2014-05-14 17:33:57 +0000
3657@@ -0,0 +1,138 @@
3658+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3659+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3660+
3661+<svg
3662+ xmlns:dc="http://purl.org/dc/elements/1.1/"
3663+ xmlns:cc="http://creativecommons.org/ns#"
3664+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3665+ xmlns:svg="http://www.w3.org/2000/svg"
3666+ xmlns="http://www.w3.org/2000/svg"
3667+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
3668+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
3669+ width="90"
3670+ height="90"
3671+ id="svg3133"
3672+ version="1.1"
3673+ inkscape:version="0.48.3.1 r9886"
3674+ sodipodi:docname="settings@30.svg">
3675+ <defs
3676+ id="defs3135" />
3677+ <sodipodi:namedview
3678+ id="base"
3679+ pagecolor="#ffffff"
3680+ bordercolor="#666666"
3681+ borderopacity="1.0"
3682+ inkscape:pageopacity="0.0"
3683+ inkscape:pageshadow="2"
3684+ inkscape:zoom="6.3664628"
3685+ inkscape:cx="93.340685"
3686+ inkscape:cy="27.377839"
3687+ inkscape:document-units="px"
3688+ inkscape:current-layer="g4674"
3689+ showgrid="true"
3690+ inkscape:window-width="1920"
3691+ inkscape:window-height="1029"
3692+ inkscape:window-x="0"
3693+ inkscape:window-y="24"
3694+ inkscape:window-maximized="1"
3695+ fit-margin-top="0"
3696+ fit-margin-left="0"
3697+ fit-margin-right="0"
3698+ fit-margin-bottom="0"
3699+ showguides="true"
3700+ inkscape:guide-bbox="true">
3701+ <inkscape:grid
3702+ type="xygrid"
3703+ id="grid2992"
3704+ empspacing="6"
3705+ visible="true"
3706+ enabled="true"
3707+ snapvisiblegridlinesonly="true"
3708+ originx="4.2039363e-07px"
3709+ originy="0px" />
3710+ <sodipodi:guide
3711+ orientation="1,0"
3712+ position="45,11"
3713+ id="guide3763" />
3714+ <sodipodi:guide
3715+ orientation="0,1"
3716+ position="48,45"
3717+ id="guide3765" />
3718+ </sodipodi:namedview>
3719+ <metadata
3720+ id="metadata3138">
3721+ <rdf:RDF>
3722+ <cc:Work
3723+ rdf:about="">
3724+ <dc:format>image/svg+xml</dc:format>
3725+ <dc:type
3726+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
3727+ <dc:title />
3728+ </cc:Work>
3729+ </rdf:RDF>
3730+ </metadata>
3731+ <g
3732+ inkscape:label="Layer 1"
3733+ inkscape:groupmode="layer"
3734+ id="layer1"
3735+ transform="translate(4.2039363e-7,-962.3622)">
3736+ <g
3737+ id="g4978"
3738+ transform="matrix(0.99934414,0,0,1,-106.92982,549.00002)">
3739+ <g
3740+ id="g4674"
3741+ transform="matrix(1.0006563,0,0,1,-155.17195,-2.6171874e-6)">
3742+ <rect
3743+ y="431.36218"
3744+ x="262"
3745+ height="72"
3746+ width="72"
3747+ id="rect4869"
3748+ style="opacity:0.01000001;color:#000000;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
3749+ <path
3750+ style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3751+ d="m 320.5,419.36218 c 6.5,0 7.49965,0 7.49979,7 l 2.1e-4,10 c 1.5e-4,7 -1,7 -7.5,7 -6.5,0 -7.50015,0 -7.5,-7 l 2.1e-4,-9.99997 c 1.4e-4,-7.00003 0.99979,-7.00003 7.49979,-7.00003 z"
3752+ id="rect4871"
3753+ inkscape:connector-curvature="0"
3754+ sodipodi:nodetypes="zsszssz" />
3755+ <path
3756+ style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3757+ d="m 262,428.36218 0,6 45,0 0,-6 z m 72,0 0,6 18,0 0,-6 z"
3758+ id="rect4882"
3759+ inkscape:connector-curvature="0"
3760+ sodipodi:nodetypes="cccccccccc" />
3761+ <path
3762+ id="path4887"
3763+ d="m 262,455.36218 0,6 18,0 0,-6 z m 45,0 0,6 45,0 0,-6 z"
3764+ style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3765+ inkscape:connector-curvature="0"
3766+ sodipodi:nodetypes="cccccccccc" />
3767+ <path
3768+ sodipodi:nodetypes="cccccccccc"
3769+ inkscape:connector-curvature="0"
3770+ style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3771+ d="m 262,482.36218 0,6 45,0 0,-6 z m 72,0 0,6 18,0 0,-6 z"
3772+ id="path4889" />
3773+ <rect
3774+ y="413.36218"
3775+ x="262"
3776+ height="90"
3777+ width="90"
3778+ id="rect2993"
3779+ style="color:#000000;fill:none;stroke:none;stroke-width:11.80000019;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
3780+ <path
3781+ sodipodi:nodetypes="zsszssz"
3782+ inkscape:connector-curvature="0"
3783+ id="path3775"
3784+ d="m 293.5,446.36218 c 6.5,0 7.49965,0 7.49979,7 l 2.1e-4,10 c 1.5e-4,7 -1,7 -7.5,7 -6.5,0 -7.50015,0 -7.5,-7 l 2.1e-4,-9.99997 c 1.4e-4,-7.00003 0.99979,-7.00003 7.49979,-7.00003 z"
3785+ style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
3786+ <path
3787+ style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3788+ d="m 320.5,473.36218 c 6.5,0 7.49965,0 7.49979,7 l 2.1e-4,10 c 1.5e-4,7 -1,7 -7.5,7 -6.5,0 -7.50015,0 -7.5,-7 l 2.1e-4,-9.99997 c 1.4e-4,-7.00003 0.99979,-7.00003 7.49979,-7.00003 z"
3789+ id="path3777"
3790+ inkscape:connector-curvature="0"
3791+ sodipodi:nodetypes="zsszssz" />
3792+ </g>
3793+ </g>
3794+ </g>
3795+</svg>
3796
3797=== added file 'graphics/share.png'
3798Binary files graphics/share.png 1970-01-01 00:00:00 +0000 and graphics/share.png 2014-05-14 17:33:57 +0000 differ
3799=== added file 'graphics/share@32.svg'
3800--- graphics/share@32.svg 1970-01-01 00:00:00 +0000
3801+++ graphics/share@32.svg 2014-05-14 17:33:57 +0000
3802@@ -0,0 +1,96 @@
3803+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3804+<!-- Created with Inkscape (http://www.inkscape.org/) -->
3805+
3806+<svg
3807+ xmlns:dc="http://purl.org/dc/elements/1.1/"
3808+ xmlns:cc="http://creativecommons.org/ns#"
3809+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3810+ xmlns:svg="http://www.w3.org/2000/svg"
3811+ xmlns="http://www.w3.org/2000/svg"
3812+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
3813+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
3814+ width="90"
3815+ height="90"
3816+ id="svg3140"
3817+ version="1.1"
3818+ inkscape:version="0.48.3.1 r9886"
3819+ sodipodi:docname="share@30.svg">
3820+ <defs
3821+ id="defs3142" />
3822+ <sodipodi:namedview
3823+ id="base"
3824+ pagecolor="#ffffff"
3825+ bordercolor="#666666"
3826+ borderopacity="1.0"
3827+ inkscape:pageopacity="0.0"
3828+ inkscape:pageshadow="2"
3829+ inkscape:zoom="6.3664629"
3830+ inkscape:cx="42.15056"
3831+ inkscape:cy="44.663717"
3832+ inkscape:document-units="px"
3833+ inkscape:current-layer="g3441-4"
3834+ showgrid="true"
3835+ inkscape:window-width="1920"
3836+ inkscape:window-height="1029"
3837+ inkscape:window-x="0"
3838+ inkscape:window-y="24"
3839+ inkscape:window-maximized="1"
3840+ inkscape:snap-global="true"
3841+ fit-margin-top="0"
3842+ fit-margin-left="0"
3843+ fit-margin-right="0"
3844+ fit-margin-bottom="0">
3845+ <inkscape:grid
3846+ type="xygrid"
3847+ id="grid3178"
3848+ empspacing="6"
3849+ visible="true"
3850+ enabled="true"
3851+ snapvisiblegridlinesonly="true"
3852+ originx="0px"
3853+ originy="-1.7382813e-05px" />
3854+ </sodipodi:namedview>
3855+ <metadata
3856+ id="metadata3145">
3857+ <rdf:RDF>
3858+ <cc:Work
3859+ rdf:about="">
3860+ <dc:format>image/svg+xml</dc:format>
3861+ <dc:type
3862+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
3863+ <dc:title />
3864+ </cc:Work>
3865+ </rdf:RDF>
3866+ </metadata>
3867+ <g
3868+ inkscape:label="Layer 1"
3869+ inkscape:groupmode="layer"
3870+ id="layer1"
3871+ transform="translate(0,-962.36218)">
3872+ <g
3873+ id="g4978"
3874+ transform="translate(-60,548.00002)">
3875+ <g
3876+ style="display:inline"
3877+ inkscape:label="Layer 1"
3878+ id="g3441-4"
3879+ transform="matrix(0.99999833,0,0,1,60,-548.00002)">
3880+ <path
3881+ sodipodi:type="inkscape:offset"
3882+ inkscape:radius="-0.31838349"
3883+ inkscape:original="M 24.5 1017.375 C 21.683495 1017.386 19.129252 1019.8328 19.15625 1022.6875 C 19.10523 1024.7025 18.477924 1026.8931 16.6875 1028.0312 C 14.928548 1029.3646 12.623753 1028.7898 10.59375 1028.875 C 8.0503952 1029.1104 6.0137365 1031.4714 5.875 1033.9375 C 5.5443658 1036.9979 8.260099 1040.0778 11.40625 1039.875 C 13.365705 1039.7298 15.622444 1039.6396 17.15625 1041.0938 C 18.814084 1042.3961 19.09263 1044.5982 19.21875 1046.5625 C 19.461671 1049.9937 23.46779 1052.2857 26.59375 1051 C 29.575663 1049.9779 31.072138 1046.1852 29.59375 1043.4062 C 28.600866 1041.3589 26.30781 1040.0344 24.03125 1040.3438 C 22.04021 1040.5857 19.786406 1040.2924 18.40625 1038.6875 C 16.702625 1036.8125 16.61443 1033.9255 17.40625 1031.625 C 18.25454 1029.3292 20.800946 1027.9984 23.1875 1028.3125 C 24.95755 1028.5278 26.909137 1028.3777 28.25 1027.0625 C 30.728542 1025.0571 30.788794 1020.8982 28.375 1018.8125 C 27.334787 1017.8485 25.916691 1017.3405 24.5 1017.375 z "
3884+ style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3885+ id="path2991"
3886+ d="m 24.5,1017.6875 c -2.632867,0.01 -5.056436,2.3369 -5.03125,5 -0.05219,2.0614 -0.70521,4.3682 -2.59375,5.5937 -0.01213,0.01 -0.01908,0.022 -0.03125,0.031 -0.941881,0.6982 -2.026015,0.9033 -3.09375,0.9375 -1.07083,0.034 -2.152687,-0.1001 -3.125,-0.062 -0.0097,4e-4 -0.02155,-4e-4 -0.03125,0 -2.3505987,0.2351 -4.2772414,2.4881 -4.40625,4.7813 -0.3081864,2.8526 2.2595836,5.7824 5.1875,5.5937 1.954564,-0.1448 4.318532,-0.252 5.96875,1.2813 0.01112,0.01 0.0202,0.021 0.03125,0.031 1.748744,1.4022 2.030053,3.6908 2.15625,5.6562 0.226212,3.1952 4.023145,5.3862 6.9375,4.1876 a 0.31841532,0.31841532 0 0 1 0.03125,-0.031 c 2.784288,-0.9544 4.192635,-4.5307 2.8125,-7.125 a 0.31841532,0.31841532 0 0 1 0,-0.031 c -0.932425,-1.9226 -3.121855,-3.1642 -5.25,-2.875 -2.050184,0.2491 -4.426871,-0.03 -5.90625,-1.75 -1.809332,-1.9913 -1.883366,-4.9901 -1.0625,-7.375 a 0.31841532,0.31841532 0 0 1 0,-0.031 c 0.906221,-2.4526 3.594049,-3.8331 6.125,-3.5 1.724598,0.2098 3.573245,0.059 4.8125,-1.1562 a 0.31841532,0.31841532 0 0 1 0.03125,-0.031 c 2.31317,-1.8716 2.347131,-5.8029 0.09375,-7.75 a 0.31841532,0.31841532 0 0 1 0,-0.031 c -0.975302,-0.9038 -2.320772,-1.3762 -3.65625,-1.3437 z"
3887+ transform="matrix(2.5495252,0,0,2.5175823,-0.90522399,-1596.7459)" />
3888+ <rect
3889+ style="opacity:0.1;color:#000000;fill:none;stroke:none;stroke-width:4;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
3890+ id="rect2988"
3891+ width="90.000153"
3892+ height="90"
3893+ x="0"
3894+ y="962.36218" />
3895+ </g>
3896+ </g>
3897+ </g>
3898+</svg>
3899
3900=== added file 'graphics/smile.png'
3901Binary files graphics/smile.png 1970-01-01 00:00:00 +0000 and graphics/smile.png 2014-05-14 17:33:57 +0000 differ
3902=== added file 'graphics/spoiler.png'
3903Binary files graphics/spoiler.png 1970-01-01 00:00:00 +0000 and graphics/spoiler.png 2014-05-14 17:33:57 +0000 differ
3904=== added file 'graphics/star.png'
3905Binary files graphics/star.png 1970-01-01 00:00:00 +0000 and graphics/star.png 2014-05-14 17:33:57 +0000 differ
3906=== added file 'graphics/time@64.png'
3907Binary files graphics/time@64.png 1970-01-01 00:00:00 +0000 and graphics/time@64.png 2014-05-14 17:33:57 +0000 differ
3908=== added file 'graphics/tmdb.png'
3909Binary files graphics/tmdb.png 1970-01-01 00:00:00 +0000 and graphics/tmdb.png 2014-05-14 17:33:57 +0000 differ
3910=== added file 'graphics/today_sidebar@48.png'
3911Binary files graphics/today_sidebar@48.png 1970-01-01 00:00:00 +0000 and graphics/today_sidebar@48.png 2014-05-14 17:33:57 +0000 differ
3912=== added file 'graphics/top_rated@48.png'
3913Binary files graphics/top_rated@48.png 1970-01-01 00:00:00 +0000 and graphics/top_rated@48.png 2014-05-14 17:33:57 +0000 differ
3914=== added file 'graphics/trailer.png'
3915Binary files graphics/trailer.png 1970-01-01 00:00:00 +0000 and graphics/trailer.png 2014-05-14 17:33:57 +0000 differ
3916=== added file 'graphics/trailer2.png'
3917Binary files graphics/trailer2.png 1970-01-01 00:00:00 +0000 and graphics/trailer2.png 2014-05-14 17:33:57 +0000 differ
3918=== added file 'graphics/trakt@16.png'
3919Binary files graphics/trakt@16.png 1970-01-01 00:00:00 +0000 and graphics/trakt@16.png 2014-05-14 17:33:57 +0000 differ
3920=== added file 'graphics/trakt_logo.png'
3921Binary files graphics/trakt_logo.png 1970-01-01 00:00:00 +0000 and graphics/trakt_logo.png 2014-05-14 17:33:57 +0000 differ
3922=== added file 'graphics/trending_icon@48.png'
3923Binary files graphics/trending_icon@48.png 1970-01-01 00:00:00 +0000 and graphics/trending_icon@48.png 2014-05-14 17:33:57 +0000 differ
3924=== added file 'graphics/twitter_logo.png'
3925Binary files graphics/twitter_logo.png 1970-01-01 00:00:00 +0000 and graphics/twitter_logo.png 2014-05-14 17:33:57 +0000 differ
3926=== added file 'graphics/unwatched_gray.png'
3927Binary files graphics/unwatched_gray.png 1970-01-01 00:00:00 +0000 and graphics/unwatched_gray.png 2014-05-14 17:33:57 +0000 differ
3928=== added file 'graphics/unwatched_sidebar@48.png'
3929Binary files graphics/unwatched_sidebar@48.png 1970-01-01 00:00:00 +0000 and graphics/unwatched_sidebar@48.png 2014-05-14 17:33:57 +0000 differ
3930=== added file 'graphics/upcoming@48.png'
3931Binary files graphics/upcoming@48.png 1970-01-01 00:00:00 +0000 and graphics/upcoming@48.png 2014-05-14 17:33:57 +0000 differ
3932=== added file 'graphics/user.png'
3933Binary files graphics/user.png 1970-01-01 00:00:00 +0000 and graphics/user.png 2014-05-14 17:33:57 +0000 differ
3934=== added file 'graphics/votedown.png'
3935Binary files graphics/votedown.png 1970-01-01 00:00:00 +0000 and graphics/votedown.png 2014-05-14 17:33:57 +0000 differ
3936=== added file 'graphics/voteup.png'
3937Binary files graphics/voteup.png 1970-01-01 00:00:00 +0000 and graphics/voteup.png 2014-05-14 17:33:57 +0000 differ
3938=== added file 'graphics/watched.png'
3939Binary files graphics/watched.png 1970-01-01 00:00:00 +0000 and graphics/watched.png 2014-05-14 17:33:57 +0000 differ
3940=== added file 'graphics/watched_black.png'
3941Binary files graphics/watched_black.png 1970-01-01 00:00:00 +0000 and graphics/watched_black.png 2014-05-14 17:33:57 +0000 differ
3942=== added file 'graphics/watched_gray.png'
3943Binary files graphics/watched_gray.png 1970-01-01 00:00:00 +0000 and graphics/watched_gray.png 2014-05-14 17:33:57 +0000 differ
3944=== added file 'graphics/watchlist.png'
3945Binary files graphics/watchlist.png 1970-01-01 00:00:00 +0000 and graphics/watchlist.png 2014-05-14 17:33:57 +0000 differ
3946=== added file 'graphics/watchlist_black.png'
3947Binary files graphics/watchlist_black.png 1970-01-01 00:00:00 +0000 and graphics/watchlist_black.png 2014-05-14 17:33:57 +0000 differ
3948=== added file 'graphics/watchlist_sidebar@48.png'
3949Binary files graphics/watchlist_sidebar@48.png 1970-01-01 00:00:00 +0000 and graphics/watchlist_sidebar@48.png 2014-05-14 17:33:57 +0000 differ
3950=== added file 'manifest.json'
3951--- manifest.json 1970-01-01 00:00:00 +0000
3952+++ manifest.json 2014-05-14 17:33:57 +0000
3953@@ -0,0 +1,15 @@
3954+{
3955+ "architecture": "all",
3956+ "description": "description of Flashback",
3957+ "framework": "ubuntu-sdk-14.04-qml-dev1",
3958+ "hooks": {
3959+ "Cliffhanger": {
3960+ "apparmor": "Flashback.json",
3961+ "desktop": "Flashback.desktop"
3962+ }
3963+ },
3964+ "maintainer": "Nekhelesh Ramananthan <krnekhelesh@gmail.com>",
3965+ "name": "com.ubuntu.developer.nik90.flashback",
3966+ "title": "Flashback",
3967+ "version": "0.3.3"
3968+}
3969\ No newline at end of file
3970
3971=== renamed file 'manifest.json' => 'manifest.json.moved'
3972=== added directory 'models'
3973=== renamed directory 'models' => 'models.moved'
3974=== added file 'models/Activity.qml'
3975--- models/Activity.qml 1970-01-01 00:00:00 +0000
3976+++ models/Activity.qml 2014-05-14 17:33:57 +0000
3977@@ -0,0 +1,97 @@
3978+/*
3979+ * Flashback - Entertainment app for Ubuntu
3980+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
3981+ *
3982+ * This program is free software: you can redistribute it and/or modify
3983+ * it under the terms of the GNU General Public License version 3 as
3984+ * published by the Free Software Foundation.
3985+ *
3986+ * This program is distributed in the hope that it will be useful,
3987+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3988+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3989+ * GNU General Public License for more details.
3990+ *
3991+ * You should have received a copy of the GNU General Public License
3992+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3993+ *
3994+ */
3995+
3996+import QtQuick 2.0
3997+import Ubuntu.Components 0.1
3998+import "../backend/backend.js" as Backend
3999+
4000+/*
4001+ Component to keep track of user activity (movies and tv show) and update the document automatically
4002+ */
4003+BasePostModel {
4004+ id: userActivity
4005+
4006+ property string username
4007+ property string password
4008+ property var activityDocument
4009+
4010+ Component.onCompleted: getUserActivityOnline()
4011+ Component.onDestruction: setDefaultDatabase()
4012+
4013+ // Function to get user's movie activity online. It automatically updates the local database if there is user activity
4014+ function getUserActivityOnline() {
4015+ console.log("[LOG]: Checking for user activity")
4016+ source = Backend.userActivity(username)
4017+ createMessage(username, password)
4018+ sendMessage()
4019+ }
4020+
4021+ // Function here to set the user movie activity database to defaults.
4022+ function setDefaultDatabase() {
4023+ console.log("[LOG]: Resetting user activity documents")
4024+ activityDocument = {
4025+ type: "default",
4026+ name: "default",
4027+ id: "default",
4028+ imdb: "default",
4029+ runtime: "default",
4030+ trailer: "default",
4031+ year: "default",
4032+ episode_title: "default",
4033+ season: "default",
4034+ number: "default",
4035+ poster: "default",
4036+ fanart: "default"
4037+ }
4038+ }
4039+
4040+ function updateJSONModel() {
4041+ if(reply.type === "movie") {
4042+ console.log("[LOG]: User is watching a movie -> " + reply.movie.title)
4043+ activityDocument = {
4044+ type: "movie",
4045+ name: reply.movie.title,
4046+ id: reply.movie.tmdb_id,
4047+ imdb: reply.movie.imdb_id,
4048+ runtime: reply.movie.runtime,
4049+ trailer: reply.movie.trailer,
4050+ year: reply.movie.year,
4051+ poster: get_thumb(reply.movie.images.poster, '-138'),
4052+ fanart: get_thumb(reply.movie.images.fanart, '-940')
4053+ }
4054+ }
4055+ else if(reply.type === "episode") {
4056+ console.log("[LOG]: User is watching a tv show -> " + reply.show.title)
4057+ activityDocument = {
4058+ type: "episode",
4059+ name: reply.show.title,
4060+ id: reply.show.tvdb_id,
4061+ imdb: reply.show.imdb_id,
4062+ episode_title: reply.episode.title,
4063+ season: reply.episode.season,
4064+ number: reply.episode.number,
4065+ poster: get_thumb(reply.show.images.poster, '-138'),
4066+ fanart: get_thumb(reply.show.images.fanart, '-940')
4067+ }
4068+ }
4069+ else {
4070+ console.log("[LOG]: User is not watching anything")
4071+ setDefaultDatabase()
4072+ }
4073+ }
4074+}
4075
4076=== added file 'models/AiringShows.qml'
4077--- models/AiringShows.qml 1970-01-01 00:00:00 +0000
4078+++ models/AiringShows.qml 2014-05-14 17:33:57 +0000
4079@@ -0,0 +1,66 @@
4080+/*
4081+ * Flashback - Entertainment app for Ubuntu
4082+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4083+ *
4084+ * This program is free software: you can redistribute it and/or modify
4085+ * it under the terms of the GNU General Public License version 3 as
4086+ * published by the Free Software Foundation.
4087+ *
4088+ * This program is distributed in the hope that it will be useful,
4089+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4090+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4091+ * GNU General Public License for more details.
4092+ *
4093+ * You should have received a copy of the GNU General Public License
4094+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4095+ *
4096+ */
4097+
4098+import QtQuick 2.0
4099+import "../backend/backend.js" as Backend
4100+
4101+BasePostModel {
4102+ id: airingShowsModel
4103+
4104+ // Property to store the time when the model was updated
4105+ property string lastUpdated: "default"
4106+
4107+ // Property to store the last action performed
4108+ property string lastAction: "default"
4109+
4110+ // Property to control if watched episodes should be hidden or not
4111+ property bool hideWatched: false
4112+
4113+ function fetchData(username, password, date, days) {
4114+ source = Backend.userShows(username, date, days)
4115+ createMessage(username, password)
4116+ sendMessage()
4117+ }
4118+
4119+ function updateJSONModel() {
4120+ model.clear()
4121+ for ( var key in reply ) {
4122+ var jo = reply[key];
4123+ for( var innerkey in jo.episodes ) {
4124+ var mo = jo.episodes[innerkey]
4125+ if (hideWatched && mo.episode.watched == true)
4126+ continue
4127+ // Only show episodes airing of tv shows that are watchlisted by the user
4128+ if (mo.show.in_watchlist == true) {
4129+ model.append({
4130+ 'name': mo.show.title,
4131+ 'year': mo.show.year,
4132+ 'id': mo.show.tvdb_id,
4133+ 'imdb_id': mo.show.imdb_id,
4134+ 'season': mo.episode.season,
4135+ 'episode': mo.episode.number,
4136+ 'episode_name': mo.episode.title,
4137+ 'episode_air_date': mo.episode.first_aired_iso,
4138+ 'watched': mo.episode.watched ? mo.episode.watched.toString() : "",
4139+ 'thumb_url': get_thumb(mo.show.images.poster, '-300')
4140+ });
4141+ }
4142+ }
4143+ }
4144+ }
4145+}
4146
4147=== added file 'models/BaseModel.qml'
4148--- models/BaseModel.qml 1970-01-01 00:00:00 +0000
4149+++ models/BaseModel.qml 2014-05-14 17:33:57 +0000
4150@@ -0,0 +1,58 @@
4151+/*
4152+ * Flashback - Entertainment app for Ubuntu
4153+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4154+ *
4155+ * This program is free software: you can redistribute it and/or modify
4156+ * it under the terms of the GNU General Public License version 3 as
4157+ * published by the Free Software Foundation.
4158+ *
4159+ * This program is distributed in the hope that it will be useful,
4160+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4161+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4162+ * GNU General Public License for more details.
4163+ *
4164+ * You should have received a copy of the GNU General Public License
4165+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4166+ *
4167+ */
4168+
4169+import QtQuick 2.0
4170+
4171+Item {
4172+ id: baseModel
4173+ property string source: ""
4174+ property string json: ""
4175+ property int status: XMLHttpRequest.UNSENT
4176+
4177+ property ListModel model: ListModel { id: model }
4178+ property alias count: model.count
4179+
4180+ signal updated()
4181+
4182+ onSourceChanged: {
4183+ var xhr = new XMLHttpRequest;
4184+ xhr.open("GET", source);
4185+ xhr.onreadystatechange = function() {
4186+ status = xhr.readyState;
4187+ if (xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200)
4188+ json = xhr.responseText;
4189+ }
4190+ xhr.send();
4191+ }
4192+
4193+ onJsonChanged: {
4194+ if ( json != "" ) {
4195+ updateJSONModel();
4196+ updated();
4197+ }
4198+ }
4199+
4200+ function thumbnail_url(thumb_path, type) {
4201+ if (thumb_path)
4202+ return "http://d3gtl9l2a4fn1j.cloudfront.net/t/p/" + "w185/" + thumb_path;
4203+ else if (type !== "person")
4204+ return Qt.resolvedUrl("../graphics/no-poster.jpg");
4205+ else if (type === "person")
4206+ return Qt.resolvedUrl("../graphics/no-passport.png");
4207+ }
4208+}
4209
4210=== added file 'models/BasePostModel.qml'
4211--- models/BasePostModel.qml 1970-01-01 00:00:00 +0000
4212+++ models/BasePostModel.qml 2014-05-14 17:33:57 +0000
4213@@ -0,0 +1,64 @@
4214+/*
4215+ * Flashback - Entertainment app for Ubuntu
4216+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4217+ *
4218+ * This program is free software: you can redistribute it and/or modify
4219+ * it under the terms of the GNU General Public License version 3 as
4220+ * published by the Free Software Foundation.
4221+ *
4222+ * This program is distributed in the hope that it will be useful,
4223+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4224+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4225+ * GNU General Public License for more details.
4226+ *
4227+ * You should have received a copy of the GNU General Public License
4228+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4229+ *
4230+ */
4231+
4232+import QtQuick 2.0
4233+
4234+Item {
4235+ id: basePostModel
4236+ property string source: ""
4237+ property string json: ""
4238+ property int status: XMLHttpRequest.UNSENT
4239+
4240+ property var reply
4241+ property var message
4242+
4243+ property string username
4244+ property string password
4245+
4246+ property ListModel model: ListModel { id: model }
4247+ property alias count: model.count
4248+
4249+ signal updated()
4250+
4251+ function createMessage(username, password) {
4252+ message = JSON.stringify({username: username, password: password})
4253+ }
4254+
4255+ function get_thumb(thumb_url, size) {
4256+ return thumb_url.split('.jpg')[0] + size + '.jpg'
4257+ }
4258+
4259+ function sendMessage() {
4260+ var xhr = new XMLHttpRequest();
4261+ xhr.open("POST", source);
4262+
4263+ xhr.onreadystatechange = function() {
4264+ status = xhr.readyState;
4265+ if (xhr.readyState == XMLHttpRequest.DONE)
4266+ getReply(json = xhr.responseText);
4267+ }
4268+ xhr.send(message);
4269+ }
4270+
4271+ function getReply(json) {
4272+ if ( json != "" ) {
4273+ reply = JSON.parse(json)
4274+ updateJSONModel();
4275+ }
4276+ }
4277+}
4278
4279=== added file 'models/Cast.qml'
4280--- models/Cast.qml 1970-01-01 00:00:00 +0000
4281+++ models/Cast.qml 2014-05-14 17:33:57 +0000
4282@@ -0,0 +1,38 @@
4283+/*
4284+ * Flashback - Entertainment app for Ubuntu
4285+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4286+ *
4287+ * This program is free software: you can redistribute it and/or modify
4288+ * it under the terms of the GNU General Public License version 3 as
4289+ * published by the Free Software Foundation.
4290+ *
4291+ * This program is distributed in the hope that it will be useful,
4292+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4293+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4294+ * GNU General Public License for more details.
4295+ *
4296+ * You should have received a copy of the GNU General Public License
4297+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4298+ *
4299+ */
4300+
4301+import QtQuick 2.0
4302+
4303+BaseModel {
4304+ id: cast
4305+
4306+ function updateJSONModel() {
4307+ model.clear();
4308+
4309+ var objectArray = JSON.parse(json).cast;
4310+ for ( var key in objectArray ) {
4311+ var jo = objectArray[key];
4312+ model.append({
4313+ 'name': jo.name,
4314+ 'character': jo.character,
4315+ 'id': jo.id,
4316+ 'thumb_url': thumbnail_url(jo.profile_path, "person")
4317+ });
4318+ }
4319+ }
4320+}
4321
4322=== added file 'models/Crew.qml'
4323--- models/Crew.qml 1970-01-01 00:00:00 +0000
4324+++ models/Crew.qml 2014-05-14 17:33:57 +0000
4325@@ -0,0 +1,37 @@
4326+/*
4327+ * Flashback - Entertainment app for Ubuntu
4328+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4329+ *
4330+ * This program is free software: you can redistribute it and/or modify
4331+ * it under the terms of the GNU General Public License version 3 as
4332+ * published by the Free Software Foundation.
4333+ *
4334+ * This program is distributed in the hope that it will be useful,
4335+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4336+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4337+ * GNU General Public License for more details.
4338+ *
4339+ * You should have received a copy of the GNU General Public License
4340+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4341+ *
4342+ */
4343+
4344+import QtQuick 2.0
4345+
4346+BaseModel {
4347+ id: crew
4348+ function updateJSONModel() {
4349+ model.clear();
4350+
4351+ var objectArray = JSON.parse(json).crew;
4352+ for ( var key in objectArray ) {
4353+ var jo = objectArray[key];
4354+ model.append({
4355+ 'name': jo.name,
4356+ 'department': jo.department,
4357+ 'id': jo.id,
4358+ 'thumb_url': thumbnail_url(jo.profile_path, "person")
4359+ });
4360+ }
4361+ }
4362+}
4363
4364=== added file 'models/Episode.qml'
4365--- models/Episode.qml 1970-01-01 00:00:00 +0000
4366+++ models/Episode.qml 2014-05-14 17:33:57 +0000
4367@@ -0,0 +1,55 @@
4368+/*
4369+ * Flashback - Entertainment app for Ubuntu
4370+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4371+ *
4372+ * This program is free software: you can redistribute it and/or modify
4373+ * it under the terms of the GNU General Public License version 3 as
4374+ * published by the Free Software Foundation.
4375+ *
4376+ * This program is distributed in the hope that it will be useful,
4377+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4378+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4379+ * GNU General Public License for more details.
4380+ *
4381+ * You should have received a copy of the GNU General Public License
4382+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4383+ *
4384+ */
4385+
4386+import QtQuick 2.0
4387+
4388+BasePostModel {
4389+ id: episodeDetails
4390+
4391+ property variant attributes: {
4392+ 'name': '',
4393+ 'year': 0,
4394+ 'episode_name': '',
4395+ 'overview': '',
4396+ 'episode_air_date': '',
4397+ 'voteAverage': 0.0,
4398+ 'voteCount': 0,
4399+ 'userVote': 0,
4400+ 'thumb_url': ''
4401+ }
4402+
4403+ function updateJSONModel() {
4404+ attributes = {
4405+ 'name': reply.show.title,
4406+ 'year': parseInt(reply.show.year),
4407+ 'id': reply.show.tvdb_id,
4408+ 'imdb_id': reply.show.imdb_id,
4409+ 'season': parseInt(reply.episode.season),
4410+ 'episode': parseInt(reply.episode.number),
4411+ 'episode_name': reply.episode.title,
4412+ 'overview': reply.episode.overview,
4413+ 'episode_air_date': reply.episode.first_aired_utc,
4414+ 'voteAverage': parseFloat(reply.episode.ratings.percentage),
4415+ 'voteCount': parseInt(reply.episode.ratings.votes),
4416+ 'userVote': parseInt(reply.episode.rating_advanced),
4417+ 'watched': reply.episode.watched ? reply.episode.watched.toString() : "",
4418+ 'thumb_url': reply.episode.images.screen
4419+ };
4420+ updated()
4421+ }
4422+}
4423
4424=== added file 'models/Genres.qml'
4425--- models/Genres.qml 1970-01-01 00:00:00 +0000
4426+++ models/Genres.qml 2014-05-14 17:33:57 +0000
4427@@ -0,0 +1,35 @@
4428+/*
4429+ * Flashback - Entertainment app for Ubuntu
4430+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4431+ *
4432+ * This program is free software: you can redistribute it and/or modify
4433+ * it under the terms of the GNU General Public License version 3 as
4434+ * published by the Free Software Foundation.
4435+ *
4436+ * This program is distributed in the hope that it will be useful,
4437+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4438+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4439+ * GNU General Public License for more details.
4440+ *
4441+ * You should have received a copy of the GNU General Public License
4442+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4443+ *
4444+ */
4445+
4446+import QtQuick 2.0
4447+
4448+BaseModel {
4449+ id: genres
4450+ function updateJSONModel() {
4451+ model.clear();
4452+
4453+ var objectArray = JSON.parse(json).genres;
4454+ for ( var key in objectArray ) {
4455+ var jo = objectArray[key];
4456+ model.append({
4457+ 'name': jo.name,
4458+ 'id': jo.id
4459+ });
4460+ }
4461+ }
4462+}
4463
4464=== added file 'models/Movie.qml'
4465--- models/Movie.qml 1970-01-01 00:00:00 +0000
4466+++ models/Movie.qml 2014-05-14 17:33:57 +0000
4467@@ -0,0 +1,57 @@
4468+/*
4469+ * Flashback - Entertainment app for Ubuntu
4470+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4471+ *
4472+ * This program is free software: you can redistribute it and/or modify
4473+ * it under the terms of the GNU General Public License version 3 as
4474+ * published by the Free Software Foundation.
4475+ *
4476+ * This program is distributed in the hope that it will be useful,
4477+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4478+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4479+ * GNU General Public License for more details.
4480+ *
4481+ * You should have received a copy of the GNU General Public License
4482+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4483+ *
4484+ */
4485+
4486+import QtQuick 2.0
4487+
4488+BaseModel {
4489+ id: movie
4490+
4491+ property variant attributes: {
4492+ 'title': '',
4493+ 'homepage': '',
4494+ 'tagline': '',
4495+ 'overview': '',
4496+ 'releaseDate': '',
4497+ 'runtime': 0,
4498+ 'voteAverage': 0.0,
4499+ 'voteCount': 0,
4500+ 'genres': [],
4501+ 'thumb_url': ''
4502+ }
4503+
4504+ function updateJSONModel() {
4505+ var ob = JSON.parse(json);
4506+ attributes = {
4507+ 'id': ob.id,
4508+ 'imdb_id': ob.imdb_id,
4509+ 'title': ob.title,
4510+ 'homepage': (ob.homepage || "") ,
4511+ 'tagline': (ob.tagline || ""),
4512+ 'overview': (ob.overview || ""),
4513+ 'releaseDate': (ob.release_date || ""),
4514+ 'runtime': parseInt(ob.runtime),
4515+ 'voteAverage': parseFloat(ob.vote_average),
4516+ 'voteCount': parseInt(ob.vote_count),
4517+ 'genres': ob.genres,
4518+ 'thumb_url': thumbnail_url(ob.poster_path, "movie"),
4519+ 'creditsJson': JSON.stringify(ob.credits || {}),
4520+ 'trailersJson': JSON.stringify(ob.trailers || {}),
4521+ 'similarMoviesJson': JSON.stringify(ob.similar_movies || {})
4522+ };
4523+ }
4524+}
4525
4526=== added file 'models/Movies.qml'
4527--- models/Movies.qml 1970-01-01 00:00:00 +0000
4528+++ models/Movies.qml 2014-05-14 17:33:57 +0000
4529@@ -0,0 +1,37 @@
4530+/*
4531+ * Flashback - Entertainment app for Ubuntu
4532+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4533+ *
4534+ * This program is free software: you can redistribute it and/or modify
4535+ * it under the terms of the GNU General Public License version 3 as
4536+ * published by the Free Software Foundation.
4537+ *
4538+ * This program is distributed in the hope that it will be useful,
4539+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4540+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4541+ * GNU General Public License for more details.
4542+ *
4543+ * You should have received a copy of the GNU General Public License
4544+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4545+ *
4546+ */
4547+
4548+import QtQuick 2.0
4549+
4550+BaseModel {
4551+ id: movies
4552+
4553+ function updateJSONModel() {
4554+ model.clear();
4555+
4556+ var objectArray = JSON.parse(json).results;
4557+ for ( var key in objectArray ) {
4558+ var jo = objectArray[key];
4559+ model.append({
4560+ 'name': jo.title,
4561+ 'id': jo.id,
4562+ 'thumb_url': thumbnail_url(jo.poster_path, "movie")
4563+ });
4564+ }
4565+ }
4566+}
4567
4568=== added file 'models/People.qml'
4569--- models/People.qml 1970-01-01 00:00:00 +0000
4570+++ models/People.qml 2014-05-14 17:33:57 +0000
4571@@ -0,0 +1,36 @@
4572+/*
4573+ * Flashback - Entertainment app for Ubuntu
4574+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4575+ *
4576+ * This program is free software: you can redistribute it and/or modify
4577+ * it under the terms of the GNU General Public License version 3 as
4578+ * published by the Free Software Foundation.
4579+ *
4580+ * This program is distributed in the hope that it will be useful,
4581+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4582+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4583+ * GNU General Public License for more details.
4584+ *
4585+ * You should have received a copy of the GNU General Public License
4586+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4587+ *
4588+ */
4589+
4590+import QtQuick 2.0
4591+
4592+BaseModel {
4593+ id: people
4594+ function updateJSONModel() {
4595+ model.clear();
4596+
4597+ var objectArray = JSON.parse(json).results;
4598+ for ( var key in objectArray ) {
4599+ var jo = objectArray[key];
4600+ model.append({
4601+ 'name': jo.name,
4602+ 'id': jo.id,
4603+ 'thumb_url': thumbnail_url(jo.profile_path, "person")
4604+ });
4605+ }
4606+ }
4607+}
4608
4609=== added file 'models/Person.qml'
4610--- models/Person.qml 1970-01-01 00:00:00 +0000
4611+++ models/Person.qml 2014-05-14 17:33:57 +0000
4612@@ -0,0 +1,48 @@
4613+/*
4614+ * Flashback - Entertainment app for Ubuntu
4615+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4616+ *
4617+ * This program is free software: you can redistribute it and/or modify
4618+ * it under the terms of the GNU General Public License version 3 as
4619+ * published by the Free Software Foundation.
4620+ *
4621+ * This program is distributed in the hope that it will be useful,
4622+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4623+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4624+ * GNU General Public License for more details.
4625+ *
4626+ * You should have received a copy of the GNU General Public License
4627+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4628+ *
4629+ */
4630+
4631+import QtQuick 2.0
4632+
4633+BaseModel {
4634+ id: person
4635+
4636+ property variant attributes: {
4637+ 'name': '',
4638+ 'biography': '',
4639+ 'birthday': '',
4640+ 'deathday': '',
4641+ 'homepage': '',
4642+ 'placeOfBirth': '',
4643+ 'thumb_url': ''
4644+ }
4645+
4646+ function updateJSONModel() {
4647+ var ob = JSON.parse(json);
4648+ attributes = {
4649+ 'id': ob.id,
4650+ 'name': ob.name,
4651+ 'biography': ob.biography || "",
4652+ 'birthday': ob.birthday || "",
4653+ 'deathday': ob.deathday || "",
4654+ 'homepage': ob.homepage || "",
4655+ 'placeOfBirth': ob.place_of_birth || "",
4656+ 'thumb_url': thumbnail_url(ob.profile_path, "person"),
4657+ 'combinedCreditsJson': JSON.stringify(ob.combined_credits || {})
4658+ };
4659+ }
4660+}
4661
4662=== added file 'models/PersonCast.qml'
4663--- models/PersonCast.qml 1970-01-01 00:00:00 +0000
4664+++ models/PersonCast.qml 2014-05-14 17:33:57 +0000
4665@@ -0,0 +1,40 @@
4666+/*
4667+ * Flashback - Entertainment app for Ubuntu
4668+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4669+ *
4670+ * This program is free software: you can redistribute it and/or modify
4671+ * it under the terms of the GNU General Public License version 3 as
4672+ * published by the Free Software Foundation.
4673+ *
4674+ * This program is distributed in the hope that it will be useful,
4675+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4676+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4677+ * GNU General Public License for more details.
4678+ *
4679+ * You should have received a copy of the GNU General Public License
4680+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4681+ *
4682+ */
4683+
4684+import QtQuick 2.0
4685+
4686+BaseModel {
4687+ id: personCast
4688+
4689+ function updateJSONModel() {
4690+ model.clear();
4691+
4692+ var objectArray = JSON.parse(json).cast;
4693+ for ( var key in objectArray ) {
4694+ var jo = objectArray[key];
4695+ model.append({
4696+ 'id': jo.id,
4697+ 'title': jo.title || jo.name || "",
4698+ 'character': jo.character || "",
4699+ 'releaseDate': jo.release_date || "",
4700+ 'mediaType': jo.media_type,
4701+ 'thumb_url': thumbnail_url(jo.poster_path, "person")
4702+ });
4703+ }
4704+ }
4705+}
4706
4707=== added file 'models/PersonCrew.qml'
4708--- models/PersonCrew.qml 1970-01-01 00:00:00 +0000
4709+++ models/PersonCrew.qml 2014-05-14 17:33:57 +0000
4710@@ -0,0 +1,40 @@
4711+/*
4712+ * Flashback - Entertainment app for Ubuntu
4713+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4714+ *
4715+ * This program is free software: you can redistribute it and/or modify
4716+ * it under the terms of the GNU General Public License version 3 as
4717+ * published by the Free Software Foundation.
4718+ *
4719+ * This program is distributed in the hope that it will be useful,
4720+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4721+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4722+ * GNU General Public License for more details.
4723+ *
4724+ * You should have received a copy of the GNU General Public License
4725+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4726+ *
4727+ */
4728+
4729+import QtQuick 2.0
4730+
4731+BaseModel {
4732+ id: personCrew
4733+ function updateJSONModel() {
4734+ model.clear();
4735+
4736+ var objectArray = JSON.parse(json).crew;
4737+ for ( var key in objectArray ) {
4738+ var jo = objectArray[key];
4739+ model.append({
4740+ 'id': jo.id,
4741+ 'title': jo.title || jo.name || "",
4742+ 'department': jo.department || "",
4743+ 'job': jo.job || "",
4744+ 'releaseDate': jo.release_date || "",
4745+ 'mediaType': jo.media_type,
4746+ 'thumb_url': thumbnail_url(jo.poster_path, "person")
4747+ });
4748+ }
4749+ }
4750+}
4751
4752=== added file 'models/SeasonEpisodes.qml'
4753--- models/SeasonEpisodes.qml 1970-01-01 00:00:00 +0000
4754+++ models/SeasonEpisodes.qml 2014-05-14 17:33:57 +0000
4755@@ -0,0 +1,38 @@
4756+/*
4757+ * Flashback - Entertainment app for Ubuntu
4758+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4759+ *
4760+ * This program is free software: you can redistribute it and/or modify
4761+ * it under the terms of the GNU General Public License version 3 as
4762+ * published by the Free Software Foundation.
4763+ *
4764+ * This program is distributed in the hope that it will be useful,
4765+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4766+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4767+ * GNU General Public License for more details.
4768+ *
4769+ * You should have received a copy of the GNU General Public License
4770+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4771+ *
4772+ */
4773+
4774+import QtQuick 2.0
4775+
4776+BasePostModel {
4777+ id: episodeList
4778+
4779+ function updateJSONModel() {
4780+ model.clear()
4781+ for ( var key in reply ) {
4782+ var jo = reply[key];
4783+ model.append({
4784+ 'episode_name': jo.title || "",
4785+ 'season': parseInt(jo.season),
4786+ 'episode': parseInt(jo.episode),
4787+ 'watched': jo.watched ? jo.watched.toString() : "",
4788+ 'thumb_url': jo.images.screen
4789+ });
4790+ }
4791+ updated()
4792+ }
4793+}
4794
4795=== added file 'models/Show.qml'
4796--- models/Show.qml 1970-01-01 00:00:00 +0000
4797+++ models/Show.qml 2014-05-14 17:33:57 +0000
4798@@ -0,0 +1,65 @@
4799+/*
4800+ * Flashback - Entertainment app for Ubuntu
4801+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4802+ *
4803+ * This program is free software: you can redistribute it and/or modify
4804+ * it under the terms of the GNU General Public License version 3 as
4805+ * published by the Free Software Foundation.
4806+ *
4807+ * This program is distributed in the hope that it will be useful,
4808+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4809+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4810+ * GNU General Public License for more details.
4811+ *
4812+ * You should have received a copy of the GNU General Public License
4813+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4814+ *
4815+ */
4816+
4817+import QtQuick 2.0
4818+
4819+BasePostModel {
4820+ id: show
4821+
4822+ property variant attributes: {
4823+ 'name': '',
4824+ 'year': 0,
4825+ 'overview': '',
4826+ 'first_air_date': '',
4827+ 'air_day_utc': '',
4828+ 'air_time_utc': '',
4829+ 'episode_run_time': 0,
4830+ 'voteAverage': 0.0,
4831+ 'voteCount': 0,
4832+ 'userVote': 0,
4833+ 'in_watchlist': '',
4834+ 'number_of_seasons': 0,
4835+ 'networks': '',
4836+ 'genres': [],
4837+ 'thumb_url': ''
4838+ }
4839+
4840+ function updateJSONModel() {
4841+ attributes = {
4842+ 'name': reply.title,
4843+ 'year': reply.year,
4844+ 'id': reply.tvdb_id,
4845+ 'imdb_id': reply.imdb_id,
4846+ 'overview': reply.overview,
4847+ 'first_air_date': reply.first_aired_utc,
4848+ 'air_day_utc': reply.air_day_utc,
4849+ 'air_time_utc': reply.air_time_utc,
4850+ 'episode_run_time': parseInt(reply.runtime),
4851+ 'voteAverage': parseFloat(reply.ratings.percentage),
4852+ 'voteCount': parseInt(reply.ratings.votes),
4853+ 'userVote': parseInt(reply.rating_advanced),
4854+ 'in_watchlist': reply.in_watchlist ? reply.in_watchlist.toString() : "",
4855+ 'in_production': reply.status,
4856+ 'networks': reply.network,
4857+ 'genres': reply.genres,
4858+ 'thumb_url': get_thumb(reply.images.poster, '-138'),
4859+ 'creditsJson': JSON.stringify(reply.people.actors || {})
4860+ };
4861+ updated();
4862+ }
4863+}
4864
4865=== added file 'models/ShowSeasons.qml'
4866--- models/ShowSeasons.qml 1970-01-01 00:00:00 +0000
4867+++ models/ShowSeasons.qml 2014-05-14 17:33:57 +0000
4868@@ -0,0 +1,37 @@
4869+/*
4870+ * Flashback - Entertainment app for Ubuntu
4871+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4872+ *
4873+ * This program is free software: you can redistribute it and/or modify
4874+ * it under the terms of the GNU General Public License version 3 as
4875+ * published by the Free Software Foundation.
4876+ *
4877+ * This program is distributed in the hope that it will be useful,
4878+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4879+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4880+ * GNU General Public License for more details.
4881+ *
4882+ * You should have received a copy of the GNU General Public License
4883+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4884+ *
4885+ */
4886+
4887+import QtQuick 2.0
4888+
4889+BaseModel {
4890+ id: seasons
4891+
4892+ function updateJSONModel() {
4893+ model.clear();
4894+
4895+ var objectArray = JSON.parse(json);
4896+ for ( var key in objectArray ) {
4897+ var jo = objectArray[key];
4898+ model.append({
4899+ 'season': parseInt(jo.season),
4900+ 'no_of_episodes': parseInt(jo.episodes),
4901+ 'thumb_url': jo.images.poster
4902+ });
4903+ }
4904+ }
4905+}
4906
4907=== added file 'models/Shows.qml'
4908--- models/Shows.qml 1970-01-01 00:00:00 +0000
4909+++ models/Shows.qml 2014-05-14 17:33:57 +0000
4910@@ -0,0 +1,42 @@
4911+/*
4912+ * Flashback - Entertainment app for Ubuntu
4913+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4914+ *
4915+ * This program is free software: you can redistribute it and/or modify
4916+ * it under the terms of the GNU General Public License version 3 as
4917+ * published by the Free Software Foundation.
4918+ *
4919+ * This program is distributed in the hope that it will be useful,
4920+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4921+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4922+ * GNU General Public License for more details.
4923+ *
4924+ * You should have received a copy of the GNU General Public License
4925+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4926+ *
4927+ */
4928+
4929+import QtQuick 2.0
4930+import "../backend/backend.js" as Backend
4931+
4932+BasePostModel {
4933+ id: shows
4934+
4935+ source: Backend.trendingShowsUrl()
4936+
4937+ function updateJSONModel() {
4938+ model.clear()
4939+ for ( var key in reply ) {
4940+ var jo = reply[key];
4941+ model.append({
4942+ 'name': jo.title,
4943+ 'year': jo.year,
4944+ 'id': jo.tvdb_id,
4945+ 'imdb_id': jo.imdb_id,
4946+ 'watched': jo.watched ? jo.watched.toString() : "",
4947+ 'watchlist': jo.in_watchlist ? jo.in_watchlist.toString() : "",
4948+ 'thumb_url': jo.images.poster !== "http://slurm.trakt.us/images/poster-dark.jpg" ? get_thumb(jo.images.poster, '-138') : jo.images.poster
4949+ });
4950+ }
4951+ }
4952+}
4953
4954=== added file 'models/Trailer.qml'
4955--- models/Trailer.qml 1970-01-01 00:00:00 +0000
4956+++ models/Trailer.qml 2014-05-14 17:33:57 +0000
4957@@ -0,0 +1,37 @@
4958+/*
4959+ * Flashback - Entertainment app for Ubuntu
4960+ * Copyright (C) 2013, 2014 Nekhelesh Ramananthan <nik90@ubuntu.com>
4961+ *
4962+ * This program is free software: you can redistribute it and/or modify
4963+ * it under the terms of the GNU General Public License version 3 as
4964+ * published by the Free Software Foundation.
4965+ *
4966+ * This program is distributed in the hope that it will be useful,
4967+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4968+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4969+ * GNU General Public License for more details.
4970+ *
4971+ * You should have received a copy of the GNU General Public License
4972+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4973+ *
4974+ */
4975+
4976+import QtQuick 2.0
4977+
4978+BaseModel {
4979+ id: trailer
4980+
4981+ function updateJSONModel() {
4982+ model.clear();
4983+
4984+ var objectArray = JSON.parse(json).youtube;
4985+ for ( var key in objectArray ) {
4986+ var jo = objectArray[key];
4987+ model.append({
4988+ 'name': jo.name,
4989+ 'type': jo.type,
4990+ 'url': jo.source
4991+ });
4992+ }
4993+ }
4994+}
4995
4996=== added file 'models/TraktAccount.qml'
4997--- models/TraktAccount.qml 1970-01-01 00:00:00 +0000
4998+++ models/TraktAccount.qml 2014-05-14 17:33:57 +0000
4999@@ -0,0 +1,28 @@
5000+/*
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: