From 89be545b70773303bdd183478906ae81e095b9fe Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Fri, 2 Jul 2021 23:17:35 +0200 Subject: [PATCH] DOCUMENT & MISC: Add the AudioContext to the AudioSubDocument and create the Lib folder to store all the code that is not a UI code but can be included by all other src's sub-folders --- CMakeLists.txt | 36 ++++++++++++++++--------------- src/Ass/AssFactory.hh | 2 +- src/AudioUtils.cc | 1 - src/Document/CRTPSubDocument.hh | 35 +++++++++++++++++++++--------- src/Document/VivyDocument.cc | 2 +- src/Document/VivyDocument.hh | 2 +- src/Document/VivyDocumentStore.hh | 2 +- src/{ => Lib}/Audio.cc | 0 src/{ => Lib}/Audio.hh | 0 src/{ => Lib}/Utils.cc | 0 src/{ => Lib}/Utils.hh | 0 src/UI/MainWindow.cc | 2 +- src/UI/MainWindow.hh | 2 +- src/UI/TimingScene.cc | 2 +- src/UI/TimingScene.hh | 2 +- src/UI/TimingView.hh | 2 +- 16 files changed, 53 insertions(+), 37 deletions(-) rename src/{ => Lib}/Audio.cc (100%) rename src/{ => Lib}/Audio.hh (100%) rename src/{ => Lib}/Utils.cc (100%) rename src/{ => Lib}/Utils.hh (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6ee0dc3..2a90b008 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.5) -project(Vivy VERSION 0.1) +project(Vivy VERSION 0.1 LANGUAGES CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) cmake_policy(SET CMP0100 NEW) # Let cmake use moc and uic for .hh files @@ -28,16 +28,16 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp") # Grab all files file(GLOB Vivy_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc" - "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c" "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.cc" "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.cc" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/*.cc" "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/*.cc" ) file(GLOB Vivy_INC - "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.hh" "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.hh" "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/*.hh" "${CMAKE_CURRENT_SOURCE_DIR}/src/UI/*.hh" ) set(PROJECT_SOURCES @@ -70,22 +70,24 @@ target_link_libraries(Vivy PRIVATE ${AVFORMAT_LIBRARY}) target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc) target_precompile_headers(Vivy PRIVATE # ASS headers - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Ass.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Line.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Syl.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Style.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/AssFactory.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Char.hh>" - - # Utils - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Utils.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/AudioUtils.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Audio.hh>" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Ass.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Line.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Syl.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Style.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/AssFactory.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Char.hh" + + # Utils & Misc, will disapear + "${CMAKE_CURRENT_SOURCE_DIR}/src/AudioUtils.hh" + + # Libs + "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Utils.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Audio.hh" # Document headers - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocument.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocumentStore.hh>" - "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_CURRENT_SOURCE_DIR}/src/Document/CRTPSubDocument.hh>" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocument.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocumentStore.hh" + "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/CRTPSubDocument.hh" ) # More options and warnings diff --git a/src/Ass/AssFactory.hh b/src/Ass/AssFactory.hh index 48f849b0..e5343ec9 100644 --- a/src/Ass/AssFactory.hh +++ b/src/Ass/AssFactory.hh @@ -1,7 +1,7 @@ #ifndef VIVY_ASS_FACTORY_H #define VIVY_ASS_FACTORY_H -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include "Style.hh" #include "Line.hh" diff --git a/src/AudioUtils.cc b/src/AudioUtils.cc index fde8a4cc..cab709b2 100644 --- a/src/AudioUtils.cc +++ b/src/AudioUtils.cc @@ -1,5 +1,4 @@ #include "AudioUtils.hh" -#include "Audio.hh" // Will be renamed into AudioUtils.hh ... #define MAXPIXVALUE 7 /* Some magix AV magic stuff */ diff --git a/src/Document/CRTPSubDocument.hh b/src/Document/CRTPSubDocument.hh index 7d1dcebd..a624698b 100644 --- a/src/Document/CRTPSubDocument.hh +++ b/src/Document/CRTPSubDocument.hh @@ -5,12 +5,13 @@ #error "This is a C++ header" #endif -#include "../Utils.hh" +#include "../Lib/Utils.hh" +#include "../Lib/Audio.hh" #include "../Ass/Ass.hh" #include <QString> #include <memory> -/* Types for the different documents */ +// Types for the different documents namespace Vivy { @@ -29,7 +30,7 @@ enum class AssDocumentType : quint64 { ASS = Vivy::Utils::to_underlying(Vivy::Utils::DocumentType::ASS), }; -/* The Big CRTP class for all common things to all the subdocuments */ +// The Big CRTP class for all common things to all the subdocuments template <class CRTPSubDocumentType, class Document> class CRTPSubDocument { public: using Type = CRTPSubDocumentType; @@ -53,7 +54,14 @@ public: qDebug() << "Init document from file " << path; auto ret = std::unique_ptr<Document>(new Document()); ret->filePath = path; - ret->initFromPath(path); + + try { + ret->initFromPath(path); // May throw + } catch (const std::runtime_error &e) { + qDebug() << "Failed to init document from file" << path; + ret.reset(); + } + return ret; } @@ -68,26 +76,33 @@ public: } }; -/* Audio document */ +// Audio document class AudioSubDocument final : public CRTPSubDocument<AudioDocumentType, AudioSubDocument> { private: const QStringList &suffixList = Vivy::Utils::audioFileSuffix; - inline void initFromPath([[maybe_unused]] const QString &path) noexcept + inline void initFromPath(const QString &path) { + if (contextPtr) + qDebug() << "Replacing the audio contetx by a new one for file" << path; + contextPtr.reset(new AudioContext(path)); // May throw + qDebug() << "Audio OK for" << path; } explicit AudioSubDocument() = default; friend CRTPSubDocument<AudioDocumentType, AudioSubDocument>; + +private: + std::unique_ptr<AudioContext> contextPtr; }; -/* Video document */ +// Video document class VideoSubDocument final : public CRTPSubDocument<VideoDocumentType, VideoSubDocument> { private: const QStringList &suffixList = Vivy::Utils::videoFileSuffix; - inline void initFromPath([[maybe_unused]] const QString &path) noexcept + inline void initFromPath([[maybe_unused]] const QString &path) { } @@ -95,11 +110,11 @@ private: friend CRTPSubDocument<VideoDocumentType, VideoSubDocument>; }; -/* ASS document */ +// ASS document class AssSubDocument final : public CRTPSubDocument<AssDocumentType, AssSubDocument> { const QStringList &suffixList = Vivy::Utils::assFileSuffix; - inline void initFromPath([[maybe_unused]] const QString &path) noexcept + inline void initFromPath([[maybe_unused]] const QString &path) { Ass::AssFactory factory(path); factory.getStyles(styles); diff --git a/src/Document/VivyDocument.cc b/src/Document/VivyDocument.cc index 74ec47a3..53dd53d9 100644 --- a/src/Document/VivyDocument.cc +++ b/src/Document/VivyDocument.cc @@ -1,5 +1,5 @@ #include "VivyDocument.hh" -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include <QFileInfo> #include <QString> diff --git a/src/Document/VivyDocument.hh b/src/Document/VivyDocument.hh index 16bef9dc..4d7fa9e4 100644 --- a/src/Document/VivyDocument.hh +++ b/src/Document/VivyDocument.hh @@ -5,7 +5,7 @@ #error "This is a C++ header" #endif -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include "CRTPSubDocument.hh" #include <memory> diff --git a/src/Document/VivyDocumentStore.hh b/src/Document/VivyDocumentStore.hh index f25fd3f7..047a49ab 100644 --- a/src/Document/VivyDocumentStore.hh +++ b/src/Document/VivyDocumentStore.hh @@ -2,7 +2,7 @@ #define VIVY_DOCUMENTSTORE_H #include "VivyDocument.hh" -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include <QMap> #include <QString> diff --git a/src/Audio.cc b/src/Lib/Audio.cc similarity index 100% rename from src/Audio.cc rename to src/Lib/Audio.cc diff --git a/src/Audio.hh b/src/Lib/Audio.hh similarity index 100% rename from src/Audio.hh rename to src/Lib/Audio.hh diff --git a/src/Utils.cc b/src/Lib/Utils.cc similarity index 100% rename from src/Utils.cc rename to src/Lib/Utils.cc diff --git a/src/Utils.hh b/src/Lib/Utils.hh similarity index 100% rename from src/Utils.hh rename to src/Lib/Utils.hh diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc index 92965929..212abaf9 100644 --- a/src/UI/MainWindow.cc +++ b/src/UI/MainWindow.cc @@ -1,7 +1,7 @@ #include "MainWindow.hh" #include "DialogHelp.hh" #include "VivyDocumentView.hh" -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include "../VivyApplication.hh" #include <functional> diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh index 7947e04a..fc3e60ea 100644 --- a/src/UI/MainWindow.hh +++ b/src/UI/MainWindow.hh @@ -5,7 +5,7 @@ #error "This is a C++ header" #endif -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include "AudioVisualizer.hh" #include "../Document/VivyDocumentStore.hh" #include "VivyDocumentView.hh" diff --git a/src/UI/TimingScene.cc b/src/UI/TimingScene.cc index 042149bd..7d2e2115 100644 --- a/src/UI/TimingScene.cc +++ b/src/UI/TimingScene.cc @@ -1,5 +1,5 @@ #include "TimingScene.hh" -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include <QGraphicsLineItem> #include <QGraphicsPixmapItem> diff --git a/src/UI/TimingScene.hh b/src/UI/TimingScene.hh index ed6742f9..860acecb 100644 --- a/src/UI/TimingScene.hh +++ b/src/UI/TimingScene.hh @@ -1,7 +1,7 @@ #ifndef VIVY_TIMING_SCENE_H #define VIVY_TIMING_SCENE_H -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include "../Ass/Ass.hh" #include "TimingBar.hh" diff --git a/src/UI/TimingView.hh b/src/UI/TimingView.hh index 3358226c..b2f11f79 100644 --- a/src/UI/TimingView.hh +++ b/src/UI/TimingView.hh @@ -5,7 +5,7 @@ #error "This is a C++ header" #endif -#include "../Utils.hh" +#include "../Lib/Utils.hh" #include "TimingBar.hh" #include "TimingScene.hh" -- GitLab