From c5a40e961614c151b2f416fa16c729581b7e1d8a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 15 Jul 2014 15:16:16 -0400 Subject: [PATCH] create localStorage abstraction --- dashboard-ui/css/images/media/audioflyout.png | Bin 1497 -> 0 bytes .../css/images/media/qualityflyout.png | Bin 1301 -> 0 bytes dashboard-ui/css/images/media/selected.png | Bin 1216 -> 0 bytes .../css/images/media/subtitleflyout.png | Bin 789 -> 0 bytes dashboard-ui/css/images/media/tvflyout.png | Bin 916 -> 0 bytes dashboard-ui/scripts/backdrops.js | 6 +- dashboard-ui/scripts/extensions.js | 63 ++++++++++++------ dashboard-ui/scripts/librarybrowser.js | 18 ++--- dashboard-ui/scripts/librarylist.js | 6 +- dashboard-ui/scripts/librarymenu.js | 4 +- dashboard-ui/scripts/localsettings.js | 30 --------- dashboard-ui/scripts/mediacontroller.js | 6 +- dashboard-ui/scripts/mediaplayer-video.js | 2 +- dashboard-ui/scripts/mediaplayer.js | 16 +++-- .../scripts/mypreferenceswebclient.js | 8 +-- dashboard-ui/scripts/site.js | 25 ++----- dashboard-ui/scripts/thememediaplayer.js | 6 +- dashboard-ui/scripts/tvlatest.js | 2 +- dashboard-ui/thirdparty/cast_sender.js | 49 ++++++++++++++ 19 files changed, 138 insertions(+), 103 deletions(-) delete mode 100644 dashboard-ui/css/images/media/audioflyout.png delete mode 100644 dashboard-ui/css/images/media/qualityflyout.png delete mode 100644 dashboard-ui/css/images/media/selected.png delete mode 100644 dashboard-ui/css/images/media/subtitleflyout.png delete mode 100644 dashboard-ui/css/images/media/tvflyout.png delete mode 100644 dashboard-ui/scripts/localsettings.js create mode 100644 dashboard-ui/thirdparty/cast_sender.js diff --git a/dashboard-ui/css/images/media/audioflyout.png b/dashboard-ui/css/images/media/audioflyout.png deleted file mode 100644 index cd13df0978d21b30457a6a0a1866020ebf788679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1497 zcmV;~1t$85P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1#U@1K~#8N?U`Fh zWmOo*y)p{t#5@?ND9yt>iGz2Ui2+A&m~KLW10&Q!G%ryPLNm}nQ8C3d&`>cDJqQ&M z1wJSgR3xM!Dc%@qu!p2E8q^2F11c(c>G$7f?ZfeS^qjNzK60S-gXQ|x+G}su_pNVz z>vHle7K_DVu~;k?i^XF3|B-LtYxL0ot-7uc*KgmoHBq>{4K=iqc!P)g7;AL9oG=X04fhT4GzJN0RoQ! zbmnzB{TpIN$_w7BC+nBuOqr5sZFULF0O~Nxe~EYtMZ9)?jMP3oJ>5P$JiHmL$}WKz zKml%bb@f}sj7QxC_wU7x&!uvA7wr+6o13rTEzg)LPXuCswY4>kdWR`y49X9N!{L`D zqf`gVeNUP&Q{n(EEiLuD^Ec^h+Q{&p@ofN&0@<}_$r}XB+qnF;QLLY;CrHgC?f&*r zQ&SUSXQ&NQY?|?o=jr0h0Gjvw^IN9q3Ep3toSYn#%+hw3EF?J*8Ao|>aj`Z>rzOXs z*x?CZ2Eg@u$WBE|-e4pT9X*UQ7z%|(%&7M(H*5cQ(H2gd`-O#t-KLl^z6`)Wf5nKN z;Ts`$$wPjT^bO)X`KOzko6l)#l$4an%TAS+mO4R}K-r1mE+V!QI~pb?CYDt11nrem&e`B&xp-Y&-AUS?=lj}CDj3G|D8`a81HsP}s5N;i zA{>Ca4|7wk`xxjtVh`;eV2~B^6_nTVmZ-dpnHT_l;n@Imu-u5LxHCRJ{!oH8Oeokz z`p}K)0=MoZn~RnXE`9Oji~;C~jtlt^pSd4@*7zTctnbtr@kreN8x($40q4F>3KQV&nd%tYw6K1!AoeoHoqfKL+iT>d zynEs^Z6ENxlviLFpp);#HbQ>!GX-Xpa$=RMl3F=~B^{-!#HMjlVPOPg0sRVv2Z6(uNqU5TO8 zA7o|B`D%@Lv^I(v_0LH0X9XQv6zvu8nlMZU%BQ=Uh&S<`ca0nfg(mkzWo6~RWL?_0 zEG{nosydBob#?U}6#Il?;+igHA16IUs;A8(s!Wpz-uBYM!oog7`^A?BXk){P@OMVC zimmH8f}0dh9QB~k<>=c+4h&xg5W2y^06!sW-9K^{=Yu&`jWgM}C-gN11TOg}Q$dE* zElxJjYI1RObacU#1I4!i1oMBWqN1Xfj@Fo}K)|!M`DQn+|BI;#9M8*OBH?gYw=y3@ zOa4LmWrE(5+B2A{tl&EaB%(`Ff}z%S&p&LU{0N7o7moVfFem~yfG`&tuOVK;5Sjc) zq9gJ3Y>#?8Suuc%_5>$RoOl*jzQm|rz!>{BJ=7_xOX&fg{fOde9f^Y^s|H9$Yin!O z*4CDO9*^MS&XL(-u~;k?i^XEGSS*&~Broqj&3H4tI=&}v00000NkvXXu0mjfBYVd> diff --git a/dashboard-ui/css/images/media/qualityflyout.png b/dashboard-ui/css/images/media/qualityflyout.png deleted file mode 100644 index da7ab544c90830290e7ab13cf9e703e0fc86f2e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1301 zcmV+w1?u{VP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1gc3yK~#8N?U_wz zTvZf+C&?fQj1tQTozRI9YAB(QW-Ffi?+1_bGjHC!d+xdS zo_iuwnt|JL ze-b1bfI^}0It{#}rXMr2v$F%LH=JgbNzt#e9>-NCLec>^p|T$B{r&w})f-M?0Vo!W zClO%+kYboTu4=<+QEAQa@Nhbt&A!pm(Xqa|y1K6J)WE>NQMklJ_X!QVN8Lf3$>nk< z^7;Jt%gf7usILOqahl&K^BaGu%Zk`0L0;@V#A}|Fnxw%W)8M1%Z*sL)yb<9UTRh`k zR*oCHySvZfI){A>d6S9q$;wTZ#1a4+e+Kb|XC=lML3l@XW2^%}<7He=b7d-ygdjV1 z$cD!V!i2hvu$}~Yk+%_vHeR6dQb2vGrZH9-(A(SF)zZ@Ple~<&qOd^&W{_pBqK<77 zBn!S(Ju+4qkWQ!18#MmP&d$z5y!8EZb8}B{Jsb>sv2RO0W5p1 z<#KryHPj5xiRoMqfCd7c_Bmqw!6E#uWxT}--kKmd40J;!-6(J2du2Dlqh!O-A;QR zUls{~45J^^j!ay2z{`k_JgXW>(W$8^+46=)hS;CrH^-16w<(TB=jZ1))MZ30djVd? zw+HxaJ!<2H@$vC3#2wG7$u--?3$X-%Uh*A-d^V}73H9cfSaytY1;C^Z2!!WKjZl-g zelxBi;JXCzSnmbEXCtXOG|s|j*Rg#I5;?X zi~{5qFA{jlLja_xc~puV&r=`SV^C)Qh#F>-b#rrbb97;0!FRr>hw%`g4Bnvep(-%$ zOLJXiDEOxIzi8v-Y$5CpbEK`U?Z2r6Nx@DU<~vax;s_Jhi&Ei{wiAcbR*%$Pp$wKG zCI1(MMNWr4P(3nMm7pASlHQW4k>ERW)O81084~D2=qHh_l^Y_!_nr>3$MD0t6lSve z4q?31S+Yp)KdibD*2^GieSuzxw14{&tpbD;W-T7{~R%fyz6-?zKKjGGp42$v22G0male}ud}FM(lZBt zjOahY(o<10L?+0KJnP`pm-*%q8vg>@>$gl#fDRK|0D@q}kiW&Rt63NBlhdQm)NCk; z1wbei3V$;+f_8Cbdi`G28%|uCp|C8ftjEDvPl7}PK<@_zfb=&$-!s8_8H@sD@Foph zClJ4@>j<{|#q|qv4*MJQYwR3<^*(ku91e%W;cz${4u>OtQmKCcm3_7n4-Qe+00000 LNkvXXu0mjfFVth2 diff --git a/dashboard-ui/css/images/media/selected.png b/dashboard-ui/css/images/media/selected.png deleted file mode 100644 index 00d65f8fc328804a4f01436327820886589d00de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 zcmV;x1V8(UP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1XW2yK~!i%?U_GF z8*voJ?=GQLNQ$FlhYlhZ&A-}0K?Dn3q!jGnP*6~)gHWMD1Cduh#8XL@-RzcNZ#I1Z(LkUJN~Y4(#}RL5Sbb6A$$#IhSj&SUk}*0YLnHMNw8EzLQ-A zP_Sq4-|LS=ezU7UQv^W8>XPMe$Y&3`3P5}k{^4LOcFZmfmmWYQ5O{^vrD83d?*)X& z;QKhlZ{{84Tv`!RbMhn-^Rg^Yu&WHL{&Xl7`^cs)ml6Pp_a+k5oJQDHju3Bf*3YqJ zh~oiR5f4$zfmm#u&5Af$0~S~Q@Mn^tq|OBjKI{R%)#Af1| za6QBm3UYNEt9`Vv2V zez*KWQUU@no$u{Z2!M`KoJOli1M|~|F4&4Pi-KK4F>c_GR7@`wqz(>*LAL5fApin} zcs=8G$KmW?S7n4qW93Z?oZg3Sd$V4JTa2a?Q}cp&>p5ygJjhAXTqDF2WwQ{9`YTp! zfz6sh-f#c$df&5IcXWq2wL_v)vROTpI@r;{^>yPDu10hNzz3#Lq>t&?V^>vB>KHxG zsTaBd5PUP5&0F?qbn0B7Ife8Ub40oV_EKfm@;izH2 zq7&i?(*S7Hz-msiX^Ify6rDNDX2UVx0f5!~0cBQ4fbhkb;RKcfAaJzK(mxp3G$NYx zdTl>hs0Gs^F2;0lL*ZiH*=EZTEbjo(ABpTkyzT>6?9QUo;t5*;5DAax9sQ$?O%o%LM2i@ZM e<$tO}lKuh~P{H{Ihj{S{_mKgbt*gpY43AD7UJDPQz>onBlxxX_uE zowK!M$LXJc@BS64Qd@h^`hC-$`|NV}@4vsR`u?8z{_pF)JY{hdfFfSQh^Z^CW__={ zU+=atQKEfklCe;ShA4aQB_Dk@vZ3*l%J6@=I z%=IS2n%%RPXdIQj%B#V-H}1Va@?_4=05gW>$-nOhu%1rz|CZn!bFjF^?T6u;PX9&M z7ij%per5K=dq%J2SJN3{p7)vl+a@ur-qyjm=9UuMhOBOh1FLkg3YUs#;?|$9p7&ieaS2yKL$<^*+1uN;@6Z-DGHy_Nx9c6V z&nL@EncfNpjGx%P@6i_FijJIPwlvRSXN=y=Wk2O6cgZaN&sy?n^FxbsLeE!D=wzIh zx>Zo_{u4ffo%j1scpGT0;E9>-p5s`ac;M=TRSFzUQ1nN+XlJ}d!n>+VQtw-VNtwaZ L)z4*}Q$iB}Rq$d+ diff --git a/dashboard-ui/css/images/media/tvflyout.png b/dashboard-ui/css/images/media/tvflyout.png deleted file mode 100644 index af467a9de86e783d778813c87fe98f4f789dc2e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 916 zcmV;F18e+=P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D11U*FK~#8N?U_wz z6G0TmH_0BFFDRsnCJKT*lpw@pL$G>?2M>x~6c6G}Jg8tnQNe?t)k~p>h!+on7e&EK z@dNBZY`n&NiA20Lm!xP99s)^Vv++Oe(~H)oo!Lzm-w%fO=FM)%{AcFPWTG()!!QiP zFbu;m{~q9e4w!Hc*!cmvaI(gCBraI zQfOV`@p#DN@w|e&59Pp0&>@ry03M+;dau`e){h9;Y*zRC{V(v&1m0OPP4faZIfC*f zfa&`V(|8me+K&#Mfd2)tDmDK>BoeugXHVl<6ZUASRQg0sj-Xrs0XjV2j|i9{=kd&K zs-7(ti!aG{3|j;ctS17J#zWRt(BXS9mmq>z=Tq>npp2vbx!rD0R;$&fcy16lB7oqR2&*+sL+6*e-R@+i zQdy+XK#&puoq9}ezld!yBpe7(#%w4HUzS3laE9CsBP&3U+<^iCHr)?f1iC-%CO|M4oFi8W*d2brEUeb-LzMuFxm>PIzA~@`zLIMjcKjN26)XT*x6njlRJzpM zB*1hi6xxEkuoEIYr$-joF_W65;2c19sKK-!Yc`wLv)SxO zB9Rz1O;el_b!wJks0F|@kC7|52@$^ge7*)ce~Mz#47C7%8D(*OK0>|{T$2MZ8^qm# zxH6xHuk1I1D+CZ3A5;Gbc7TT{w=fIDwVD##k_5~7eE#>Sw_2^YZ`W`K^ZFK-yejZ`Z2z_P53-bJp7DgnmG+6F|}26G4YB8sw|K$QR?@wYhn zN)U%0O#Q=DwGCxU0AF@i{LM{OX>jPdN~3NoN^gZ}e_p^Bm$}K=Ek+)n(f6_%id*49 qG8DJM48t%C!!QiPFbv}sH0>t<3q~F-H7OPV0000').text(value).html(); @@ -539,4 +518,44 @@ function ticks_to_human(str) { } }; +})(window); + +(function (window) { + + function myStore(defaultObject) { + + var self = this; + self.localData = {}; + + self.setItem = function (name, value) { + + if (defaultObject) { + defaultObject.setItem(name, value); + } else { + self.localData[name] = value; + } + }; + + self.getItem = function (name) { + + if (defaultObject) { + return defaultObject.getItem(name); + } + + return self.localData[name]; + }; + + self.removeItem = function (name) { + + if (defaultObject) { + defaultObject.removeItem(name); + } else { + self.localData[name] = null; + } + }; + } + + window.store = new myStore(window.localStorage); + window.sessionStore = new myStore(window.sessionStorage); + })(window); \ No newline at end of file diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 029fd31349..087a99b6f6 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -1,4 +1,4 @@ -var LibraryBrowser = (function (window, document, $, screen, localStorage) { +var LibraryBrowser = (function (window, document, $, screen, store) { $(function () { $("body").on("create", function () { @@ -12,7 +12,7 @@ getDefaultPageSize: function () { - var saved = localStorage.getItem('pagesize_'); + var saved = store.getItem('pagesize_'); if (saved) { return parseInt(saved); @@ -32,7 +32,7 @@ loadSavedQueryValues: function (key, query) { - var values = localStorage.getItem(key + '_' + Dashboard.getCurrentUserId()); + var values = store.getItem(key + '_' + Dashboard.getCurrentUserId()); if (values) { @@ -56,7 +56,7 @@ } try { - localStorage.setItem(key + '_' + Dashboard.getCurrentUserId(), JSON.stringify(values)); + store.setItem(key + '_' + Dashboard.getCurrentUserId(), JSON.stringify(values)); } catch (e) { } @@ -65,7 +65,7 @@ saveViewSetting: function (key, value) { try { - localStorage.setItem(key + '_' + Dashboard.getCurrentUserId() + '_view', value); + store.setItem(key + '_' + Dashboard.getCurrentUserId() + '_view', value); } catch (e) { } @@ -74,7 +74,7 @@ getSavedViewSetting: function (key) { var deferred = $.Deferred(); - var val = localStorage.getItem(key + '_' + Dashboard.getCurrentUserId() + '_view'); + var val = store.getItem(key + '_' + Dashboard.getCurrentUserId() + '_view'); deferred.resolveWith(null, [val]); return deferred.promise(); @@ -325,7 +325,7 @@ html += '
  • Resume
  • '; } - if (MediaController.canQueueMediaType(mediaType)) { + if (MediaController.canQueueMediaType(mediaType, itemType)) { html += '
  • Queue
  • '; } @@ -1507,7 +1507,7 @@ if (query.Limit && updatePageSizeSetting !== false) { try { - localStorage.setItem('pagesize_', query.Limit); + store.setItem('pagesize_', query.Limit); } catch (e) { } @@ -2279,4 +2279,4 @@ }; -})(window, document, jQuery, screen, localStorage); \ No newline at end of file +})(window, document, jQuery, screen, window.store); \ No newline at end of file diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js index 3e17690c4b..770931610a 100644 --- a/dashboard-ui/scripts/librarylist.js +++ b/dashboard-ui/scripts/librarylist.js @@ -241,7 +241,7 @@ html += '
  • ' + Globalize.translate('HeaderMenu') + '
  • '; var href = posterItem.getAttribute('data-href') || posterItem.href; - + html += '
  • ' + Globalize.translate('ButtonOpen') + '
  • '; html += '
  • ' + Globalize.translate('ButtonOpenInNewTab') + '
  • '; @@ -261,7 +261,7 @@ html += '
  • ' + Globalize.translate('ButtonPlayTrailer') + '
  • '; } - if (MediaController.canQueueMediaType(item.MediaType)) { + if (MediaController.canQueueMediaType(item.MediaType, item.Type)) { html += '
  • ' + Globalize.translate('ButtonQueue') + '
  • '; } @@ -313,7 +313,7 @@ var posterItem = this; var itemId = posterItem.getAttribute('data-itemid'); - + $(posterItem).addClass('hasContextMenu'); var userId = Dashboard.getCurrentUserId(); diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index 677b733d15..487eaa1825 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -223,7 +223,7 @@ function getTopParentId() { - return getParameterByName('topParentId') || sessionStorage.getItem('topParentId') || null; + return getParameterByName('topParentId') || sessionStore.getItem('topParentId') || null; } window.LibraryMenu = { @@ -263,7 +263,7 @@ '' : getTopParentId() || ''; - sessionStorage.setItem('topParentId', id); + sessionStore.setItem('topParentId', id); $('.lnkMediaFolder').each(function () { diff --git a/dashboard-ui/scripts/localsettings.js b/dashboard-ui/scripts/localsettings.js deleted file mode 100644 index b06d11bf77..0000000000 --- a/dashboard-ui/scripts/localsettings.js +++ /dev/null @@ -1,30 +0,0 @@ -(function ($, window, document) { - - function get(key, userId) { - - return localStorage.getItem(key + '-' + userId); - } - - function set(key, userId, value) { - - localStorage.setItem(key + '-' + userId, value); - } - - function localSettings() { - - var self = this; - - self.val = function (key, userId, value) { - - if (arguments.length < 3) { - - return get(key, userId); - } - - set(key, userId, value); - }; - } - - window.LocalSettings = new localSettings(); - -})(jQuery, window, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js index cbc0e7b7b6..0cdbdd3c88 100644 --- a/dashboard-ui/scripts/mediacontroller.js +++ b/dashboard-ui/scripts/mediacontroller.js @@ -203,7 +203,11 @@ return self.getPlayerInfo().playableMediaTypes.indexOf(item.MediaType) != -1; }; - self.canQueueMediaType = function (mediaType) { + self.canQueueMediaType = function (mediaType, itemType) { + + if (itemType == 'MusicAlbum' || itemType == 'MusicArtist' || itemType == 'MusicGenre') { + mediaType = 'Audio'; + } return currentPlayer.canQueueMediaType(mediaType); }; diff --git a/dashboard-ui/scripts/mediaplayer-video.js b/dashboard-ui/scripts/mediaplayer-video.js index eefe103152..426ba09fb2 100644 --- a/dashboard-ui/scripts/mediaplayer-video.js +++ b/dashboard-ui/scripts/mediaplayer-video.js @@ -398,7 +398,7 @@ var maxWidth = parseInt(this.getAttribute('data-maxwidth')); var bitrate = parseInt(this.getAttribute('data-bitrate')); - localStorage.setItem('preferredVideoBitrate', bitrate); + store.setItem('preferredVideoBitrate', bitrate); self.changeStream(self.getCurrentTicks(), { diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js index fdb295c1ad..edb3a73291 100644 --- a/dashboard-ui/scripts/mediaplayer.js +++ b/dashboard-ui/scripts/mediaplayer.js @@ -1,4 +1,4 @@ -(function (document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window) { +(function (document, setTimeout, clearTimeout, screen, store, $, setInterval, window) { function mediaPlayer() { @@ -116,11 +116,13 @@ var currentSrc = element.currentSrc; - var transcodingExtension = self.getTranscodingExtension(); + var transcodingExtension; var isStatic; if (self.currentItem.MediaType == "Video") { + transcodingExtension = self.getTranscodingExtension(); + if (params.AudioStreamIndex != null) { currentSrc = replaceQueryString(currentSrc, 'AudioStreamIndex', params.AudioStreamIndex); } @@ -155,6 +157,8 @@ currentSrc = replaceQueryString(currentSrc, 'Static', finalParams.isStatic); currentSrc = replaceQueryString(currentSrc, 'AudioCodec', finalParams.audioCodec); isStatic = finalParams.isStatic; + } else { + transcodingExtension = '.mp3'; } var isSeekableMedia = self.currentMediaSource.RunTimeTicks; @@ -436,7 +440,7 @@ }; self.getBitrateSetting = function () { - return parseInt(localStorage.getItem('preferredVideoBitrate') || '') || 1500000; + return parseInt(store.getItem('preferredVideoBitrate') || '') || 1500000; }; function getOptimalMediaSource(mediaType, versions) { @@ -768,13 +772,13 @@ self.saveVolume = function (val) { if (val) { - localStorage.setItem("volume", val); + store.setItem("volume", val); } }; self.getSavedVolume = function () { - return localStorage.getItem("volume") || 0.5; + return store.getItem("volume") || 0.5; }; self.shuffle = function (id) { @@ -1291,4 +1295,4 @@ window.MediaController.setActivePlayer(window.MediaPlayer); -})(document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window); \ No newline at end of file +})(document, setTimeout, clearTimeout, screen, window.store, $, setInterval, window); \ No newline at end of file diff --git a/dashboard-ui/scripts/mypreferenceswebclient.js b/dashboard-ui/scripts/mypreferenceswebclient.js index c9943d9048..c0254a604c 100644 --- a/dashboard-ui/scripts/mypreferenceswebclient.js +++ b/dashboard-ui/scripts/mypreferenceswebclient.js @@ -2,8 +2,8 @@ function loadForm(page, userId, displayPreferences) { - $('#selectThemeSong', page).val(LocalSettings.val('enableThemeSongs', userId) || '').selectmenu("refresh"); - $('#selectBackdrop', page).val(LocalSettings.val('enableBackdrops', userId) || '').selectmenu("refresh"); + $('#selectThemeSong', page).val(store.getItem('enableThemeSongs', userId) || '').selectmenu("refresh"); + $('#selectBackdrop', page).val(store.getItem('enableBackdrops', userId) || '').selectmenu("refresh"); $('#selectHomeSection1', page).val(displayPreferences.CustomPrefs.home0 || '').selectmenu("refresh"); $('#selectHomeSection2', page).val(displayPreferences.CustomPrefs.home1 || '').selectmenu("refresh"); @@ -15,8 +15,8 @@ function saveUser(page, userId, displayPreferences) { - LocalSettings.val('enableThemeSongs', userId, $('#selectThemeSong', page).val()); - LocalSettings.val('enableBackdrops', userId, $('#selectBackdrop', page).val()); + store.setItem('enableThemeSongs', userId, $('#selectThemeSong', page).val()); + store.setItem('enableBackdrops', userId, $('#selectBackdrop', page).val()); displayPreferences.CustomPrefs.home0 = $('#selectHomeSection1', page).val(); displayPreferences.CustomPrefs.home1 = $('#selectHomeSection2', page).val(); diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 5ec0816083..ab77860771 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -95,17 +95,14 @@ var Dashboard = { getAccessToken: function () { - return localStorage.getItem('token'); + return store.getItem('token'); }, getCurrentUserId: function () { - if (!window.localStorage) { - return null; - } - var autoLoginUserId = getParameterByName('u'); - var storedUserId = localStorage.getItem("userId"); + + var storedUserId = store.getItem("userId"); if (autoLoginUserId && autoLoginUserId != storedUserId) { @@ -118,10 +115,8 @@ var Dashboard = { setCurrentUser: function (userId, token) { - if (window.localStorage) { - localStorage.setItem("userId", userId); - localStorage.setItem("token", token); - } + store.setItem("userId", userId); + store.setItem("token", token); ApiClient.setCurrentUserId(userId, token); Dashboard.getUserPromise = null; @@ -129,10 +124,8 @@ var Dashboard = { logout: function (logoutWithServer) { - if (window.localStorage) { - localStorage.removeItem("userId"); - localStorage.removeItem("token"); - } + store.removeItem("userId"); + store.removeItem("token"); if (logoutWithServer === false) { window.location = "login.html"; @@ -1228,10 +1221,6 @@ var Dashboard = { alert("This browser does not support web sockets. For a better experience, try a newer browser such as Chrome, Firefox, IE10+, Safari (iOS) or Opera."); } - else if (!IsStorageEnabled()) { - alert("This browser does not support local storage or is running in private mode. For a better experience, try a newer browser such as Chrome, Firefox, IE10+, Safari (iOS) or Opera."); - } - window.ApiClient = MediaBrowser.ApiClient.create("Dashboard", window.dashboardVersion); $(ApiClient).on("websocketopen", Dashboard.onWebSocketOpened) diff --git a/dashboard-ui/scripts/thememediaplayer.js b/dashboard-ui/scripts/thememediaplayer.js index 574b243869..8d3f955c3e 100644 --- a/dashboard-ui/scripts/thememediaplayer.js +++ b/dashboard-ui/scripts/thememediaplayer.js @@ -1,4 +1,4 @@ -(function (document, $, localStorage) { +(function (document, $) { var currentOwnerId; var currentThemeIds = []; @@ -44,7 +44,7 @@ var userId = Dashboard.getCurrentUserId(); - var val = LocalSettings.val('enableThemeSongs', userId); + var val = store.getItem('enableThemeSongs', userId); // For bandwidth return val == '1' || (val != '0' && !$.browser.mobile); @@ -67,4 +67,4 @@ } }); -})(document, jQuery, window.localStorage); \ No newline at end of file +})(document, jQuery); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvlatest.js b/dashboard-ui/scripts/tvlatest.js index 851fda5c11..fc01feb6dc 100644 --- a/dashboard-ui/scripts/tvlatest.js +++ b/dashboard-ui/scripts/tvlatest.js @@ -25,7 +25,7 @@ shape: "backdrop", preferThumb: true, inheritThumb: false, - showParentTitle: true, + showParentTitle: false, showUnplayedIndicator: false, showChildCountIndicator: true, overlayText: screenWidth >= 600, diff --git a/dashboard-ui/thirdparty/cast_sender.js b/dashboard-ui/thirdparty/cast_sender.js new file mode 100644 index 0000000000..5d5ec38860 --- /dev/null +++ b/dashboard-ui/thirdparty/cast_sender.js @@ -0,0 +1,49 @@ +(function() {var chrome = window.chrome || {}; +chrome.cast = chrome.cast || {}; +chrome.cast.media = chrome.cast.media || {}; +chrome.cast.ApiBootstrap_ = function() { +}; +chrome.cast.ApiBootstrap_.EXTENSION_IDS = ["boadgeojelhgndaghljhdicfkmllpafd", "dliochdbjfkdbacpmhlcpmleaejidimm", "hfaagokkkhdbgiakmmlclaapfelnkoah", "fmfcbgogabcbclcofgocippekhfcmgfj", "enhhojjnijigcajfphajepfemndkmdlo"]; +chrome.cast.ApiBootstrap_.findInstalledExtension_ = function(callback) { + //chrome.cast.ApiBootstrap_.findInstalledExtensionHelper_(0, callback); +}; +chrome.cast.ApiBootstrap_.findInstalledExtensionHelper_ = function(index, callback) { + index == chrome.cast.ApiBootstrap_.EXTENSION_IDS.length ? callback(null) : chrome.cast.ApiBootstrap_.isExtensionInstalled_(chrome.cast.ApiBootstrap_.EXTENSION_IDS[index], function(installed) { + installed ? callback(chrome.cast.ApiBootstrap_.EXTENSION_IDS[index]) : chrome.cast.ApiBootstrap_.findInstalledExtensionHelper_(index + 1, callback); + }); +}; +chrome.cast.ApiBootstrap_.getCastSenderUrl_ = function(extensionId) { + return "chrome-extension://" + extensionId + "/cast_sender.js"; +}; +chrome.cast.ApiBootstrap_.isExtensionInstalled_ = function(extensionId, callback) { + var xmlhttp = new XMLHttpRequest; + xmlhttp.onreadystatechange = function() { + 4 == xmlhttp.readyState && 200 == xmlhttp.status && callback(!0); + }; + xmlhttp.onerror = function() { + callback(!1); + }; + + try { + // Throws an error in other browsers + xmlhttp.open("GET", chrome.cast.ApiBootstrap_.getCastSenderUrl_(extensionId), !0); + xmlhttp.send(); + } catch (ex) { + + } +}; +chrome.cast.ApiBootstrap_.findInstalledExtension_(function(extensionId) { + if (extensionId) { + console.log("Found cast extension: " + extensionId); + chrome.cast.extensionId = extensionId; + var apiScript = document.createElement("script"); + apiScript.src = chrome.cast.ApiBootstrap_.getCastSenderUrl_(extensionId); + (document.head || document.documentElement).appendChild(apiScript); + } else { + var msg = "No cast extension found"; + console.log(msg); + var callback = window.__onGCastApiAvailable; + callback && "function" == typeof callback && callback(!1, msg); + } +}); +})();