aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroldmud0 <oldmud0@users.noreply.github.com>2021-06-02 22:50:19 -0500
committerGitHub <noreply@github.com>2021-06-02 22:50:19 -0500
commit97f3d7a8bc43ee78691153bb60993ba734dbefde (patch)
tree6b4ef64dfc9ab7946d40a92c45db8becea8ab1da /src
parente3730b5497052392e685539c5f6dbb03482c1ed3 (diff)
parentc6207a5478099176e1a5091d2adb31c52bdc2501 (diff)
Merge pull request #549 from Salanto/asset-packet-musiclist
Music list streaming support over ASSet packet
Diffstat (limited to 'src')
-rw-r--r--src/aomusicplayer.cpp5
-rw-r--r--src/courtroom.cpp122
-rw-r--r--src/packet_distribution.cpp10
3 files changed, 69 insertions, 68 deletions
diff --git a/src/aomusicplayer.cpp b/src/aomusicplayer.cpp
index 8a3142eb..e8bd690c 100644
--- a/src/aomusicplayer.cpp
+++ b/src/aomusicplayer.cpp
@@ -13,12 +13,12 @@ AOMusicPlayer::~AOMusicPlayer()
}
}
-void AOMusicPlayer::play(QString p_song, int channel, bool loop,
+int AOMusicPlayer::play(QString p_song, int channel, bool loop,
int effect_flags)
{
channel = channel % m_channelmax;
if (channel < 0) // wtf?
- return;
+ return BASS_ERROR_NOCHAN;
QString f_path = ao_app->get_music_path(p_song);
unsigned int flags = BASS_STREAM_PRESCAN | BASS_STREAM_AUTOFREE |
@@ -125,6 +125,7 @@ void AOMusicPlayer::play(QString p_song, int channel, bool loop,
this->set_looping(loop, channel); // Have to do this here due to any
// crossfading-related changes, etc.
+ return BASS_ErrorGetCode();
}
void AOMusicPlayer::stop(int channel)
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 094695af..a29ebe2f 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -3789,6 +3789,11 @@ void Courtroom::handle_song(QStringList *p_contents)
if (f_contents.size() < 2)
return;
+ bool ok; // Used for charID, channel, effect check
+ bool looping = false; // No loop due to outdated server using serverside looping
+ int channel = 0; // Channel 0 is 'master music', other for ambient
+ int effect_flags = 0; // No effects by default - vanilla functionality
+
QString f_song = f_contents.at(0);
QString f_song_clear = f_song.left(f_song.lastIndexOf("."));
if (f_song.startsWith("http")) {
@@ -3796,69 +3801,43 @@ void Courtroom::handle_song(QStringList *p_contents)
QString f_song_decoded = QUrl::fromPercentEncoding(f_song_bytearray);
f_song_clear = f_song_decoded.left(f_song_decoded.lastIndexOf("."));
}
- f_song_clear = f_song_clear.right(f_song_clear.length() -
- (f_song_clear.lastIndexOf("/") + 1));
- int n_char = f_contents.at(1).toInt();
-
- // Assume the song doesn't loop unless told otherwise (due to most outdated
- // servers handling looping through serverside)
- bool looping = false;
- // Channel 0 is the 'master music', other channels would commonly be used for
- // ambience
- int channel = 0;
- // No effects assumed by default - vanilla functionality
- int effect_flags = 0;
-
- if (n_char < 0 || n_char >= char_list.size()) {
- int channel = 0;
- if (p_contents->length() > 3 && p_contents->at(3) == "1")
- looping = true;
-
- if (p_contents->length() >
- 4) // eyyy we want to change this song's CHANNEL huh
- channel = p_contents->at(4).toInt(); // let the music player handle it if
- // it's bigger than the channel list
-
- if (p_contents->length() > 5) // Flags provided to us by server such as Fade
- // In, Fade Out, Sync Pos etc.
- {
- effect_flags = p_contents->at(5).toInt();
- }
- music_player->play(f_song, channel, looping, effect_flags);
- if (f_song == "~stop.mp3")
- ui_music_name->setText(tr("None"));
- else if (channel == 0) {
- if (file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))) && !f_song.startsWith("http"))
- ui_music_name->setText(f_song_clear);
- else if (f_song.startsWith("http"))
- ui_music_name->setText(tr("[STREAM] %1").arg(f_song_clear));
- else
- ui_music_name->setText(tr("[MISSING] %1").arg(f_song_clear));
- }
+ f_song_clear = f_song_clear.right(f_song_clear.length() - (f_song_clear.lastIndexOf("/") + 1));
+
+ int n_char = f_contents.at(1).toInt(&ok);
+ if (!ok)
+ return;
+
+ if (p_contents->length() > 3 && p_contents->at(3) == "1")
+ looping = true;
+
+ if (p_contents->length() > 4) {
+ // eyyy we want to change this song's CHANNEL huh
+ // let the music player handle it if it's bigger than the channel list
+ channel = p_contents->at(4).toInt(&ok);
+ if (!ok)
+ return;
}
- else {
+ if (p_contents->length() > 5) {
+ // Flags provided to us by server such as Fade In, Fade Out, Sync Pos etc.
+ effect_flags = p_contents->at(5).toInt(&ok);
+ if (!ok)
+ return;
+ }
+
+ if(!file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))) && !f_song.startsWith("http")
+ && f_song != "~stop.mp3" && !ao_app->asset_url.isEmpty()) {
+ f_song = (ao_app->asset_url + "sounds/music/" + f_song).toLower();
+ }
+
+ bool is_stop = (f_song == "~stop.mp3");
+ if (n_char >= 0 && n_char < char_list.size()) {
QString str_char = char_list.at(n_char).name;
QString str_show = ao_app->get_showname(str_char);
-
if (p_contents->length() > 2) {
if (p_contents->at(2) != "") {
str_show = p_contents->at(2);
}
}
- if (p_contents->length() > 3 && p_contents->at(3) == "1") {
- looping = true;
- }
- if (p_contents->length() >
- 4) // eyyy we want to change this song's CHANNEL huh
- channel = p_contents->at(4).toInt(); // let the music player handle it if
- // it's bigger than the channel list
-
- if (p_contents->length() > 5) // Flags provided to us by server such as Fade
- // In, Fade Out, Sync Pos etc.
- {
- effect_flags = p_contents->at(5).toInt();
- }
- bool is_stop = f_song == "~stop.mp3";
if (!mute_map.value(n_char)) {
if (is_stop) {
log_ic_text(str_char, str_show, "", tr("has stopped the music"));
@@ -3868,19 +3847,30 @@ void Courtroom::handle_song(QStringList *p_contents)
log_ic_text(str_char, str_show, f_song, tr("has played a song"));
append_ic_text(f_song_clear, str_show, tr("has played a song"));
}
- music_player->play(f_song, channel, looping, effect_flags);
- if (is_stop)
- ui_music_name->setText(tr("None"));
- else if (channel == 0) {
- if (file_exists(ao_app->get_sfx_suffix(ao_app->get_music_path(f_song))) && !f_song.startsWith("http"))
- ui_music_name->setText(f_song_clear);
- else if (f_song.startsWith("http"))
- ui_music_name->setText(tr("[STREAM] %1").arg(f_song_clear));
- else
- ui_music_name->setText(tr("[MISSING] %1").arg(f_song_clear));
- }
}
}
+
+ int error_code = music_player->play(f_song, channel, looping, effect_flags);
+
+ if (is_stop) {
+ ui_music_name->setText(tr("None"));
+ return;
+ }
+
+ if (error_code == BASS_ERROR_HANDLE) { // Cheap hack to see if file missing
+ ui_music_name->setText(tr("[MISSING] %1").arg(f_song_clear));
+ return;
+ }
+
+ if (f_song.startsWith("http") && channel == 0) {
+ ui_music_name->setText(tr("[STREAM] %1").arg(f_song_clear));
+ return;
+ }
+
+ if (channel == 0){
+ ui_music_name->setText(f_song_clear);
+ return;
+ }
}
void Courtroom::handle_wtce(QString p_wtce, int variant)
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp
index dc76ec1a..dfe28f40 100644
--- a/src/packet_distribution.cpp
+++ b/src/packet_distribution.cpp
@@ -703,6 +703,16 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
w_courtroom->on_authentication_state_received(authenticated);
}
+ //AssetURL Packet
+ else if (header == "ASS") {
+ if (f_contents.size() > 1 || f_contents.size() == 0) { // This can never be more than one link.
+ goto end;
+ }
+ QUrl t_asset_url = QUrl::fromPercentEncoding(f_contents.at(0).toUtf8());
+ if (t_asset_url.isValid())
+ asset_url = t_asset_url.toString();
+ }
+
end:
delete p_packet;