using System; using System.Data; using System.Text; using Ion.Storage; using Holo; namespace Holo.Managers { /// /// Provides management for virtual sound machines and virtual songs. /// public static class soundMachineManager { /// /// Returns the string with all the soundsets in the Hand of a certain user. /// /// The database ID of the user to get the soundsets of. public static string getHandSoundsets(int userID) { DataColumn dCol; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dCol = dbClient.getColumn("SELECT soundmachine_soundset FROM furniture WHERE ownerid = '" + userID + "' AND roomid = '0' AND soundmachine_soundset > 0"); } StringBuilder Soundsets = new StringBuilder(Encoding.encodeVL64(dCol.Table.Rows.Count)); foreach(DataRow dRow in dCol.Table.Rows) Soundsets.Append(Encoding.encodeVL64(Convert.ToInt32(dRow["soundmachine_soundset"]))); return Soundsets.ToString(); } /// /// Returns the length of a song in seconds as an integer. The length is calculated by counting the notes on the four tracks, if an error occurs here, then -1 is returned as length. /// /// The songdata. (all 4 tracks) public static int calculateSongLength(string Data) { int songLength = 0; try { string[] Track = Data.Split(':'); for (int i = 1; i < 8; i += 3) { int trackLength = 0; string[] Samples = Track[i].Split(';'); for (int j = 0; j < Samples.Length; j++) trackLength += int.Parse(Samples[j].Substring(Samples[j].IndexOf(",") + 1)); if (trackLength > songLength) songLength = trackLength; } return songLength; } catch { return -1; } } public static string getMachineSongList(int machineID) { DataTable dTable; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dTable = dbClient.getTable("SELECT id,length,title,burnt FROM soundmachine_songs WHERE machineid = '" + machineID + "' ORDER BY id ASC"); } StringBuilder Songs = new StringBuilder(Encoding.encodeVL64(dTable.Rows.Count)); foreach (DataRow dRow in dTable.Rows) { Songs.Append(Encoding.encodeVL64(Convert.ToInt32(dRow["id"])) + Encoding.encodeVL64(Convert.ToInt32(dRow["length"])) + Convert.ToString(dRow["title"]) + Convert.ToChar(2)); if (Convert.ToString(dRow["burnt"]) == "1") Songs.Append("I"); else Songs.Append("H"); } return Songs.ToString(); } public static string getMachinePlaylist(int machineID) { DataColumn dCol; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dCol = dbClient.getColumn("SELECT songid FROM soundmachine_playlists WHERE machineid = '" + machineID + "' ORDER BY pos ASC"); } StringBuilder Playlist = new StringBuilder("H" + Encoding.encodeVL64(dCol.Table.Rows.Count)); string Title; string Creator; foreach (DataRow dRow in dCol.Table.Rows) { using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { Title = dbClient.getString("SELECT title FROM soundmachine_songs WHERE id = '" + dRow[0].ToString() + "'"); Creator = dbClient.getString("SELECT name FROM users WHERE id = '" + dbClient.getString("SELECT userid FROM soundmachine_songs WHERE id = '" + dRow[0].ToString() + "'") + "'"); } Playlist.Append(Encoding.encodeVL64(Convert.ToInt32(dRow[0])) + Encoding.encodeVL64(Convert.ToInt32(dRow[0]) + 1) + Title + Convert.ToChar(2) + Creator + Convert.ToChar(2)); } return Playlist.ToString(); } public static string getSong(int songID) { DataRow dRow; using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dRow = dbClient.getRow("SELECT title,data FROM soundmachine_songs WHERE id = '" + songID + "'"); } object[] songObject = dRow.ItemArray; string[] songData = new string[songObject.Length]; for (int i = 0; i < songObject.Length; i++) songData[i] = songObject[i].ToString(); if (songData.Length > 0) return Encoding.encodeVL64(songID) + songData[0] + Convert.ToChar(2) + songData[1] + Convert.ToChar(2); else return "holo.cast.soundmachine.song.unknown"; } } }