~aleteoryx/muditaos

9bf69c652f9954bb87ac06cf340ab26195ffb448 — Marcin Zieliński 2 years ago cce5061
[MOS-878] Don't break audio playback on file deletion

Since a currently played file is deleted, the player
goes to the next file from the list. A special case:
if the deleted file is the last one, the playback
stops (and can be resumed by the user).
A module-audio/Audio/decoder/decoderCommon.hpp => module-audio/Audio/decoder/decoderCommon.hpp +26 -0
@@ 0,0 1,26 @@
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <log/log.hpp>
#include <sys/stat.h>
#include <cerrno>
#include <cstdio>

namespace
{
    inline bool statFd(FILE *fd, char const *logMessage)
    {
        struct stat fdStats;
        constexpr int statFailed = -1;
        if (fstat(fileno(fd), &fdStats) != statFailed) {
            return true;
        }

        auto originalErrno = errno;
        LOG_WARN("%s", logMessage);
        errno = originalErrno;
        return false;
    }
} // namespace

M module-audio/Audio/decoder/decoderFLAC.cpp => module-audio/Audio/decoder/decoderFLAC.cpp +5 -2
@@ 1,9 1,10 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <Utils.hpp>
#include "decoderFLAC.hpp"
#include "flac/flacfile.h"
#include "decoderCommon.hpp"

#define DR_FLAC_IMPLEMENTATION
#define DR_FLAC_NO_STDIO


@@ 76,7 77,9 @@ namespace audio
    size_t decoderFLAC::drflac_read(void *pUserData, void *pBufferOut, size_t bytesToRead)
    {
        const auto decoderContext = reinterpret_cast<decoderFLAC *>(pUserData);
        return std::fread(pBufferOut, 1, bytesToRead, decoderContext->fd);
        return !statFd(decoderContext->fd, "FLAC audio file deleted by user!")
                   ? 0
                   : std::fread(pBufferOut, 1, bytesToRead, decoderContext->fd);
    }

    drflac_bool32 decoderFLAC::drflac_seek(void *pUserData, int offset, drflac_seek_origin origin)

M module-audio/Audio/decoder/decoderMP3.cpp => module-audio/Audio/decoder/decoderMP3.cpp +5 -2
@@ 1,9 1,10 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#define DR_MP3_IMPLEMENTATION
#define DR_MP3_NO_STDIO

#include "decoderCommon.hpp"
#include "decoderMP3.hpp"
#include <cstdio>



@@ 59,7 60,9 @@ namespace audio
    size_t decoderMP3::drmp3_read(void *pUserData, void *pBufferOut, size_t bytesToRead)
    {
        const auto decoderContext = reinterpret_cast<decoderMP3 *>(pUserData);
        return std::fread(pBufferOut, 1, bytesToRead, decoderContext->fd);
        return !statFd(decoderContext->fd, "MP3 audio file deleted by user!")
                   ? 0
                   : std::fread(pBufferOut, 1, bytesToRead, decoderContext->fd);
    }

    drmp3_bool32 decoderMP3::drmp3_seek(void *pUserData, int offset, drmp3_seek_origin origin)

M pure_changelog.md => pure_changelog.md +1 -0
@@ 83,6 83,7 @@
* Fixed notification on the home screen shouldn't be bolded
* Fixed long phone shutdown time
* Fixed missing translation for words "show" and "replace"
* Fixed music playback disablement after currently played audio file gets deleted

## [1.5.0 2022-12-20]


M third-party/dr_libs/src => third-party/dr_libs/src +1 -1
@@ 1,1 1,1 @@
Subproject commit 2c16b3535ed173f3cb648df1b3d2951bec81305b
Subproject commit 4d577ffbba6979fcf198a5c42825ad33f542e5a7