diff --git a/CMakeLists.txt b/CMakeLists.txt index b6ee0dc3dcbeb45ee95a851e59e8a9f3c7e1891b..2a90b008c6a8bfbe275391350ef6de1c21913abc 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 48f849b01cc6ef60afbaa5b4d18627b59d24f439..e5343ec97deae93cbd864fa1844ca2fb72512b4a 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 fde8a4cc30ba1f37e04d8b18585b4f44c3b4dca6..cab709b2e0fb4111bf335f389e605a12b90932e4 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 7d1dcebd18c52306bf41cf8f0cb4a4cd97fb1875..a624698b5a6443266d7bbdc631e97194d82a9adb 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 74ec47a3f4565c0e9f265f09aaf0a2014199b420..53dd53d970cfc5c0a9deb365aa9e8380753d957b 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 16bef9dc8ed6eefea979c33d96a364209a9b8638..4d7fa9e4031e5eb3375068aae948eca0557e95e6 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 f25fd3f7d374840596fa81ee0df07a38ddc4db66..047a49ab29172b076b88a43af606f681fde0d5fa 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 929659291b851e1147cdaa0f2a27935f85d227f7..212abaf9f3312c909a0d2f02a33de2bde7e46c2c 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 7947e04aa3f34777dee6ec1eda10bde46f0cbcd7..fc3e60ea739a7be2ca75da3e4132855c9afd72af 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 042149bd2c27427c35f64f3d82fa8e3f4046a9f7..7d2e21156582e7c6c77de94958b53785c057cb1a 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 ed6742f95b9bbc8addb2c18016f0591c6bf0a53d..860acecbc35628983b137e517385f82da36cf1ef 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 3358226c85aa09ca5516e89c82c2e9dffaac3c44..b2f11f792576e7d66b1e2628ae2cefb12bb51e67 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"