diff --git a/ClientServerLib/ClientServerLib/CServer.cs b/ClientServerLib/ClientServerLib/CServer.cs index d52929f0..b661b3ed 100644 --- a/ClientServerLib/ClientServerLib/CServer.cs +++ b/ClientServerLib/ClientServerLib/CServer.cs @@ -67,6 +67,17 @@ namespace ClientServerLib #endregion + #region songs + + private static GetCurrentSongDelegate getCurrentSong; + public static GetCurrentSongDelegate GetCurrentSong + { + internal get { return CServer.getCurrentSong; } + set { CServer.getCurrentSong = value; } + } + + #endregion + public CServer(int port) { baseAddress = new Uri("http://localhost:" + port + "/"); diff --git a/ClientServerLib/ClientServerLib/CWebservice.cs b/ClientServerLib/ClientServerLib/CWebservice.cs index 3dea559f..bb6e7584 100644 --- a/ClientServerLib/ClientServerLib/CWebservice.cs +++ b/ClientServerLib/ClientServerLib/CWebservice.cs @@ -84,6 +84,16 @@ namespace ClientServerLib Stream GetImgFile(String filename); #endregion + + #region songs + + [OperationContract] + [WebInvoke(Method = "GET", + ResponseFormat = WebMessageFormat.Json, + UriTemplate = "/getCurrentSong")] + SongInfo getCurrentSong(); + + #endregion } class CWebservice : ICWebservice @@ -135,7 +145,7 @@ namespace ClientServerLib #region photo public bool sendPhoto(PhotoData photo) - { + { return CServer.SendPhoto(photo); } @@ -236,5 +246,14 @@ namespace ClientServerLib } #endregion + + #region songs + + public SongInfo getCurrentSong() + { + return CServer.GetCurrentSong(); + } + + #endregion } } diff --git a/ClientServerLib/ClientServerLib/DataStructs.cs b/ClientServerLib/ClientServerLib/DataStructs.cs index e5d5f5b4..49d441fb 100644 --- a/ClientServerLib/ClientServerLib/DataStructs.cs +++ b/ClientServerLib/ClientServerLib/DataStructs.cs @@ -90,4 +90,29 @@ namespace ClientServerLib } + + #region songs + + public delegate SongInfo GetCurrentSongDelegate(); + + [DataContract] + public struct SongInfo + { + [DataMember] + public string Title; + [DataMember] + public string Artist; + [DataMember] + public Base64Image Cover; + [DataMember] + public string Genre { get; set; } + [DataMember] + public string Language { get; set; } + [DataMember] + public string Year { get; set; } + [DataMember] + public bool IsDuet { get; set; } + } + + #endregion } diff --git a/Vocaluxe/Base/Server/CVocaluxeServer.cs b/Vocaluxe/Base/Server/CVocaluxeServer.cs index 991a3139..02ff9332 100644 --- a/Vocaluxe/Base/Server/CVocaluxeServer.cs +++ b/Vocaluxe/Base/Server/CVocaluxeServer.cs @@ -28,6 +28,7 @@ using ClientServerLib; using Vocaluxe.Lib.Input; using VocaluxeLib; using VocaluxeLib.Profile; +using VocaluxeLib.Songs; namespace Vocaluxe.Base.Server { @@ -59,6 +60,7 @@ namespace Vocaluxe.Base.Server CServer.GetProfileList = getProfileList; CServer.SendPhoto = sendPhoto; CServer.GetSiteFile = getSiteFile; + CServer.GetCurrentSong = getCurrentSong; _Discover = new CDiscover(CConfig.ServerPort, CCommands.BroadcastKeyword); Controller.Init(); @@ -324,6 +326,28 @@ namespace Vocaluxe.Base.Server #endregion + #region songs + + private static SongInfo getCurrentSong() + { + SongInfo result = new SongInfo(); + CSong song = CGame.GetSong(); + if (song != null) + { + result.Title = song.Title; + result.Artist = song.Artist; + result.Genre = song.Genre.FirstOrDefault(); + 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); + } + return result; + } + + #endregion + private static string _SaveImage(Base64Image imageDate, string name, string folder) { Image avatarImage = imageDate.getImage(); diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 0bf1a344..f37c5aa4 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -344,6 +344,12 @@ css Always + + Always + + + Always + Always diff --git a/Vocaluxe/Website/css/style.css b/Vocaluxe/Website/css/style.css index b6af6570..8eb2a62b 100644 --- a/Vocaluxe/Website/css/style.css +++ b/Vocaluxe/Website/css/style.css @@ -39,3 +39,18 @@ .ui-loading .ui-loader-background { display: block; } + +#displaySongCover { + height: 75%; + max-height: 250px; + width: auto; +} + +#displaySongContent { + text-align: center; +} + +#displaySongContent span { + font-size: 18px; + font-weight: bold; +} diff --git a/Vocaluxe/Website/img/music.png b/Vocaluxe/Website/img/music.png new file mode 100644 index 00000000..3c4d28fd Binary files /dev/null and b/Vocaluxe/Website/img/music.png differ diff --git a/Vocaluxe/Website/img/noCover.png b/Vocaluxe/Website/img/noCover.png new file mode 100644 index 00000000..d57d9e73 Binary files /dev/null and b/Vocaluxe/Website/img/noCover.png differ diff --git a/Vocaluxe/Website/index.html b/Vocaluxe/Website/index.html index 67df92ef..4c8ffafe 100644 --- a/Vocaluxe/Website/index.html +++ b/Vocaluxe/Website/index.html @@ -41,6 +41,13 @@

Edit your profile

+
  • + + +

    Current Song

    +

    Display informations about the current song

    +
    +
  • @@ -117,6 +124,37 @@ +
    +
    +

    No current song

    +
    + + +
    + Cover +
    +
    +
    + + - +
    + + - +
    + + - +
    + + - +
    + + - +
    + +
    + + +

    Keyboard

    diff --git a/Vocaluxe/Website/js/main.js b/Vocaluxe/Website/js/main.js index 2178679d..bd9ee378 100644 --- a/Vocaluxe/Website/js/main.js +++ b/Vocaluxe/Website/js/main.js @@ -28,6 +28,7 @@ function replaceTransitionHandler() { } function initPageLoadHandler() { + //pageLoadHandler for displayProfile $(document).on('pagebeforeshow', '#displayProfile', function () { var promise = $.ajax({ url: "getProfile?profileId=" + profileIdRequest @@ -106,6 +107,7 @@ function initPageLoadHandler() { $(this).data('promise', promise); }); + //pageLoadHandler for selectProfile $(document).on('pagebeforeshow', '#selectProfile', function () { var promise = $.ajax({ url: "getProfileList" @@ -130,6 +132,59 @@ function initPageLoadHandler() { $(this).data('promise', promise); }); + //pageLoadHandler for displaySong + $(document).on('pagebeforeshow', '#displaySong', function () { + var promise = $.ajax({ + url: "getCurrentSong" + }).done(function (result) { + if (result.Title != null) { + $('#displaySongTitle').text(result.Title); + } + else { + $('#displaySongTitle').text("No current song"); + } + + if (result.Cover && result.Cover.base64Data) { + $('#displaySongCover').prop("src", result.Cover.base64Data); + } + else { + $('#displaySongCover').prop("src", "img/noCover.png"); + } + + if (result.Artist != null) { + $('#displaySongArtist').text(result.Artist); + } + else { + $('#displaySongArtist').text("-"); + } + + if (result.Genre != null) { + $('#displaySongGenre').text(result.Genre); + } + else { + $('#displaySongGenre').text("-"); + } + + if (result.Year != null && result.Year != "") { + $('#displaySongYear').text(result.Year); + } + else { + $('#displaySongYear').text("-"); + } + + if (result.Language != null) { + $('#displaySongLanguage').text(result.Language); + } + else { + $('#displaySongLanguage').text("-"); + } + + $('#displaySongIsDuet').text(result.IsDuet?"Yes":"No"); + }); + + // Save promise on page so the transition handler can find it. + $(this).data('promise', promise); + }); } function initLoginPageHandler() { @@ -137,13 +192,13 @@ function initLoginPageHandler() { ownProfileId = parseInt($('#playerId').prop("value")); if (ownProfileId != "NaN") { $.mobile.changePage("#main", { transition: "slidefade" }); - } + } }); } function initMainPageHandler() { $('#yourProfileLink').click(function () { - profileIdRequest = ownProfileId; + profileIdRequest = ownProfileId; $.mobile.changePage("#displayProfile", { transition: "slidefade" }); });