music_player: Return to browser instead of exiting on back button (#1846)
* music_player: Return to browser instead of exiting on back button * music_player: Fix number and dots extraction
This commit is contained in:
parent
d10e16ca3c
commit
88ca267466
@ -248,12 +248,16 @@ static void music_player_worker_callback(
|
|||||||
view_port_update(music_player->view_port);
|
view_port_update(music_player->view_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void music_player_clear(MusicPlayer* instance) {
|
||||||
|
memset(instance->model->duration_history, 0xff, MUSIC_PLAYER_SEMITONE_HISTORY_SIZE);
|
||||||
|
memset(instance->model->semitone_history, 0xff, MUSIC_PLAYER_SEMITONE_HISTORY_SIZE);
|
||||||
|
music_player_worker_clear(instance->worker);
|
||||||
|
}
|
||||||
|
|
||||||
MusicPlayer* music_player_alloc() {
|
MusicPlayer* music_player_alloc() {
|
||||||
MusicPlayer* instance = malloc(sizeof(MusicPlayer));
|
MusicPlayer* instance = malloc(sizeof(MusicPlayer));
|
||||||
|
|
||||||
instance->model = malloc(sizeof(MusicPlayerModel));
|
instance->model = malloc(sizeof(MusicPlayerModel));
|
||||||
memset(instance->model->duration_history, 0xff, MUSIC_PLAYER_SEMITONE_HISTORY_SIZE);
|
|
||||||
memset(instance->model->semitone_history, 0xff, MUSIC_PLAYER_SEMITONE_HISTORY_SIZE);
|
|
||||||
instance->model->volume = 3;
|
instance->model->volume = 3;
|
||||||
|
|
||||||
instance->model_mutex = furi_mutex_alloc(FuriMutexTypeNormal);
|
instance->model_mutex = furi_mutex_alloc(FuriMutexTypeNormal);
|
||||||
@ -265,6 +269,8 @@ MusicPlayer* music_player_alloc() {
|
|||||||
instance->worker, MUSIC_PLAYER_VOLUMES[instance->model->volume]);
|
instance->worker, MUSIC_PLAYER_VOLUMES[instance->model->volume]);
|
||||||
music_player_worker_set_callback(instance->worker, music_player_worker_callback, instance);
|
music_player_worker_set_callback(instance->worker, music_player_worker_callback, instance);
|
||||||
|
|
||||||
|
music_player_clear(instance);
|
||||||
|
|
||||||
instance->view_port = view_port_alloc();
|
instance->view_port = view_port_alloc();
|
||||||
view_port_draw_callback_set(instance->view_port, render_callback, instance);
|
view_port_draw_callback_set(instance->view_port, render_callback, instance);
|
||||||
view_port_input_callback_set(instance->view_port, input_callback, instance);
|
view_port_input_callback_set(instance->view_port, input_callback, instance);
|
||||||
@ -299,7 +305,7 @@ int32_t music_player_app(void* p) {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
if(p && strlen(p)) {
|
if(p && strlen(p)) {
|
||||||
furi_string_cat(file_path, (const char*)p);
|
furi_string_set(file_path, (const char*)p);
|
||||||
} else {
|
} else {
|
||||||
furi_string_set(file_path, MUSIC_PLAYER_APP_PATH_FOLDER);
|
furi_string_set(file_path, MUSIC_PLAYER_APP_PATH_FOLDER);
|
||||||
|
|
||||||
@ -350,7 +356,9 @@ int32_t music_player_app(void* p) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
music_player_worker_stop(music_player->worker);
|
music_player_worker_stop(music_player->worker);
|
||||||
} while(0);
|
if(p && strlen(p)) break; // Exit instead of going to browser if launched with arg
|
||||||
|
music_player_clear(music_player);
|
||||||
|
} while(1);
|
||||||
|
|
||||||
furi_string_free(file_path);
|
furi_string_free(file_path);
|
||||||
music_player_free(music_player);
|
music_player_free(music_player);
|
||||||
|
@ -108,6 +108,10 @@ MusicPlayerWorker* music_player_worker_alloc() {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void music_player_worker_clear(MusicPlayerWorker* instance) {
|
||||||
|
NoteBlockArray_reset(instance->notes);
|
||||||
|
}
|
||||||
|
|
||||||
void music_player_worker_free(MusicPlayerWorker* instance) {
|
void music_player_worker_free(MusicPlayerWorker* instance) {
|
||||||
furi_assert(instance);
|
furi_assert(instance);
|
||||||
furi_thread_free(instance->thread);
|
furi_thread_free(instance->thread);
|
||||||
@ -129,6 +133,7 @@ static bool is_space(const char c) {
|
|||||||
|
|
||||||
static size_t extract_number(const char* string, uint32_t* number) {
|
static size_t extract_number(const char* string, uint32_t* number) {
|
||||||
size_t ret = 0;
|
size_t ret = 0;
|
||||||
|
*number = 0;
|
||||||
while(is_digit(*string)) {
|
while(is_digit(*string)) {
|
||||||
*number *= 10;
|
*number *= 10;
|
||||||
*number += (*string - '0');
|
*number += (*string - '0');
|
||||||
@ -140,6 +145,7 @@ static size_t extract_number(const char* string, uint32_t* number) {
|
|||||||
|
|
||||||
static size_t extract_dots(const char* string, uint32_t* number) {
|
static size_t extract_dots(const char* string, uint32_t* number) {
|
||||||
size_t ret = 0;
|
size_t ret = 0;
|
||||||
|
*number = 0;
|
||||||
while(*string == '.') {
|
while(*string == '.') {
|
||||||
*number += 1;
|
*number += 1;
|
||||||
string++;
|
string++;
|
||||||
|
@ -14,6 +14,8 @@ typedef struct MusicPlayerWorker MusicPlayerWorker;
|
|||||||
|
|
||||||
MusicPlayerWorker* music_player_worker_alloc();
|
MusicPlayerWorker* music_player_worker_alloc();
|
||||||
|
|
||||||
|
void music_player_worker_clear(MusicPlayerWorker* instance);
|
||||||
|
|
||||||
void music_player_worker_free(MusicPlayerWorker* instance);
|
void music_player_worker_free(MusicPlayerWorker* instance);
|
||||||
|
|
||||||
bool music_player_worker_load(MusicPlayerWorker* instance, const char* file_path);
|
bool music_player_worker_load(MusicPlayerWorker* instance, const char* file_path);
|
||||||
|
Loading…
Reference in New Issue
Block a user