From fb0308b8d8ca41613daedef0d5322733f399afe0 Mon Sep 17 00:00:00 2001 From: lukeIam Date: Sun, 6 Oct 2013 15:13:33 +0200 Subject: [PATCH] Song information over Webserver --- ClientServerLib/ClientServerLib/CServer.cs | 24 +++++-- .../ClientServerLib/CWebservice.cs | 31 ++++++-- .../ClientServerLib/DataStructs.cs | 10 ++- Vocaluxe/Base/Server/CVocaluxeServer.cs | 38 ++++++++-- Vocaluxe/Vocaluxe.csproj | 7 +- Vocaluxe/Website/img/playlist.png | Bin 0 -> 10721 bytes Vocaluxe/Website/index.html | 21 +++++- Vocaluxe/Website/js/main.js | 67 ++++++++++++++++-- 8 files changed, 172 insertions(+), 26 deletions(-) create mode 100644 Vocaluxe/Website/img/playlist.png diff --git a/ClientServerLib/ClientServerLib/CServer.cs b/ClientServerLib/ClientServerLib/CServer.cs index b661b3ed..282498c2 100644 --- a/ClientServerLib/ClientServerLib/CServer.cs +++ b/ClientServerLib/ClientServerLib/CServer.cs @@ -43,7 +43,6 @@ namespace ClientServerLib set { CServer.getProfileList = value; } } - #endregion #region photo @@ -69,13 +68,28 @@ namespace ClientServerLib #region songs - private static GetCurrentSongDelegate getCurrentSong; - public static GetCurrentSongDelegate GetCurrentSong + private static GetSongDelegate getSong; + public static GetSongDelegate GetSong { - internal get { return CServer.getCurrentSong; } - set { CServer.getCurrentSong = value; } + internal get { return CServer.getSong; } + set { CServer.getSong = value; } } + private static GetAllSongsDelegate getAllSongs; + public static GetAllSongsDelegate GetAllSongs + { + get { return CServer.getAllSongs; } + set { CServer.getAllSongs = value; } + } + + private static GetCurrentSongIdDelegate getCurrentSongId; + public static GetCurrentSongIdDelegate GetCurrentSongId + { + get { return CServer.getCurrentSongId; } + set { CServer.getCurrentSongId = value; } + } + + #endregion public CServer(int port) diff --git a/ClientServerLib/ClientServerLib/CWebservice.cs b/ClientServerLib/ClientServerLib/CWebservice.cs index bb6e7584..332426f2 100644 --- a/ClientServerLib/ClientServerLib/CWebservice.cs +++ b/ClientServerLib/ClientServerLib/CWebservice.cs @@ -90,8 +90,20 @@ namespace ClientServerLib [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, - UriTemplate = "/getCurrentSong")] - SongInfo getCurrentSong(); + UriTemplate = "/getSong?songId={songId}")] + SongInfo getSong(int songId); + + [OperationContract] + [WebInvoke(Method = "GET", + ResponseFormat = WebMessageFormat.Json, + UriTemplate = "/getCurrentSongId")] + int getCurrentSongId(); + + [OperationContract] + [WebInvoke(Method = "GET", + ResponseFormat = WebMessageFormat.Json, + UriTemplate = "/getAllSongs")] + SongInfo[] getAllSongs(); #endregion } @@ -249,11 +261,22 @@ namespace ClientServerLib #region songs - public SongInfo getCurrentSong() + public SongInfo getSong(int songId) { - return CServer.GetCurrentSong(); + return CServer.GetSong(songId); + } + + public int getCurrentSongId() + { + return CServer.GetCurrentSongId(); + } + + public SongInfo[] getAllSongs() + { + return CServer.GetAllSongs(); } #endregion + } } diff --git a/ClientServerLib/ClientServerLib/DataStructs.cs b/ClientServerLib/ClientServerLib/DataStructs.cs index 49d441fb..c93a89e3 100644 --- a/ClientServerLib/ClientServerLib/DataStructs.cs +++ b/ClientServerLib/ClientServerLib/DataStructs.cs @@ -11,7 +11,7 @@ using System.Text.RegularExpressions; namespace ClientServerLib { public delegate bool SendKeyEventDelegate(string key); - + #region profile @@ -93,7 +93,11 @@ namespace ClientServerLib #region songs - public delegate SongInfo GetCurrentSongDelegate(); + public delegate SongInfo GetSongDelegate(int songId); + + public delegate SongInfo[] GetAllSongsDelegate(); + + public delegate int GetCurrentSongIdDelegate(); [DataContract] public struct SongInfo @@ -112,6 +116,8 @@ namespace ClientServerLib public string Year { get; set; } [DataMember] public bool IsDuet { get; set; } + [DataMember] + public int SongId { get; set; } } #endregion diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 02ff9332..94d9a32e 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -60,7 +60,9 @@ namespace Vocaluxe.Base.Server CServer.GetProfileList = getProfileList; CServer.SendPhoto = sendPhoto; CServer.GetSiteFile = getSiteFile; - CServer.GetCurrentSong = getCurrentSong; + CServer.GetSong = getSong; + CServer.GetAllSongs = getAllSongs; + CServer.GetCurrentSongId = getCurrentSongId; _Discover = new CDiscover(CConfig.ServerPort, CCommands.BroadcastKeyword); Controller.Init(); @@ -328,10 +330,32 @@ namespace Vocaluxe.Base.Server #region songs - private static SongInfo getCurrentSong() + private static SongInfo getSong(int songId) + { + CSong song = CSongs.GetSong(songId); + return getSongInfo(song, true); + } + + private static SongInfo[] getAllSongs() + { + var songs = CSongs.Songs; + return (from s in songs + select getSongInfo(s, false)).ToArray(); + } + + private static int getCurrentSongId() + { + CSong song = CGame.GetSong(); + if (song == null) + { + return -1; + } + return song.ID; + } + + private static SongInfo getSongInfo(CSong song, bool includeCover) { SongInfo result = new SongInfo(); - CSong song = CGame.GetSong(); if (song != null) { result.Title = song.Title; @@ -340,8 +364,12 @@ namespace Vocaluxe.Base.Server result.Language = song.Language.FirstOrDefault(); result.Year = song.Year; result.IsDuet = song.IsDuet; - Image cover = Image.FromFile(song.Folder + "\\" + song.CoverFileName); - result.Cover = new Base64Image(cover, cover.RawFormat); + result.SongId = song.ID; + if (includeCover) + { + Image cover = Image.FromFile(song.Folder + "\\" + song.CoverFileName); + result.Cover = new Base64Image(cover, cover.RawFormat); + } } return result; } diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index f37c5aa4..a966bc45 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -175,10 +175,6 @@ ..\Output\AForge.Video.DirectShow.dll False - - ..\ClientServerLib\ClientServerLib\bin\ClientServerLib.dll - True - ..\Output\Community.CsharpSqlite.dll @@ -350,6 +346,9 @@ Always + + Always + Always diff --git a/Vocaluxe/Website/img/playlist.png b/Vocaluxe/Website/img/playlist.png new file mode 100644 index 0000000000000000000000000000000000000000..370a115ebbe37cdfee9f6b79586ef3171515391e GIT binary patch literal 10721 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 OkW@e#ijDFX5&r`QuYm9X literal 0 HcmV?d00001 diff --git a/Vocaluxe/Website/index.html b/Vocaluxe/Website/index.html index 4c8ffafe..e3efa819 100644 --- a/Vocaluxe/Website/index.html +++ b/Vocaluxe/Website/index.html @@ -42,12 +42,19 @@
  • - +

    Current Song

    Display informations about the current song

  • +
  • + + +

    All songs

    +

    List all available songs

    +
    +
  • @@ -154,6 +161,18 @@ +
    +
    +

    All songs

    +
    + + +
    +
      +
      + +
      +
      diff --git a/Vocaluxe/Website/js/main.js b/Vocaluxe/Website/js/main.js index bd9ee378..96e70ae7 100644 --- a/Vocaluxe/Website/js/main.js +++ b/Vocaluxe/Website/js/main.js @@ -1,5 +1,7 @@ -var ownProfileId = 1; -var profileIdRequest = 1; +var ownProfileId = -1; +var profileIdRequest = -1; +var songIdRequest = -1 +var allSongsCache = null; $(document).ready(function () { replaceTransitionHandler(); @@ -135,7 +137,7 @@ function initPageLoadHandler() { //pageLoadHandler for displaySong $(document).on('pagebeforeshow', '#displaySong', function () { var promise = $.ajax({ - url: "getCurrentSong" + url: "getSong?songId=" + songIdRequest }).done(function (result) { if (result.Title != null) { $('#displaySongTitle').text(result.Title); @@ -178,13 +180,48 @@ function initPageLoadHandler() { else { $('#displaySongLanguage').text("-"); } - - $('#displaySongIsDuet').text(result.IsDuet?"Yes":"No"); + + $('#displaySongIsDuet').text(result.IsDuet ? "Yes" : "No"); }); // Save promise on page so the transition handler can find it. $(this).data('promise', promise); }); + + //pageLoadHandler for selectSong + $(document).on('pagebeforeshow', '#selectSong', function () { + function handleGetAllSongs() { + $('#selectSongList').children().remove(); + + function handleSelectSongLineClick(e) { + songIdRequest = parseInt(e.currentTarget.id.replace("selectSongLine_", "")); + $.mobile.changePage("#displaySong", { transition: "slidefade" }); + } + + for (var id in allSongsCache) { + $('
    • '/*+' '*/ + '

      ' + allSongsCache[id].Artist + '

      ' + allSongsCache[id].Title + '

    • ') + .appendTo('#selectSongList') + .click(handleSelectSongLineClick); + } + + $('#selectSongList').listview('refresh'); + } + + if (allSongsCache == null) { + var promise = $.ajax({ + url: "getAllSongs" + }).done(function (data) { + allSongsCache = data; + handleGetAllSongs() + }); + + // Save promise on page so the transition handler can find it. + $(this).data('promise', promise); + } + else { + handleGetAllSongs() + } + }); } function initLoginPageHandler() { @@ -202,6 +239,26 @@ function initMainPageHandler() { $.mobile.changePage("#displayProfile", { transition: "slidefade" }); }); + $('#currentSongLink').click(function () { + $('#content').wrap('
      '); + $.mobile.loading('show', { + text: 'Getting current song...', + textVisible: true + }); + + $.ajax({ + url: "getCurrentSongId" + }).done(function (result) { + songIdRequest = parseInt(result); + $.mobile.loading('hide'); + $('#content').unwrap(); + $.mobile.changePage("#displaySong", { transition: "slidefade" }); + }).fail(function (result) { + $.mobile.loading('hide'); + $('#content').unwrap(); + }); + }); + $('#mainPageTakePhotoLink').click(function () { if ($('#captureContainer').length > 0) { $('#captureContainer').remove();