1 #pragma once 2 3 #include "common/common_pch.h" 4 5 #include "common/bluray/disc_library.h" 6 #include "common/file_types.h" 7 #include "common/qt.h" 8 #include "mkvtoolnix-gui/merge/mux_config.h" 9 #include "mkvtoolnix-gui/merge/track.h" 10 #include "mkvtoolnix-gui/util/command_line_options.h" 11 12 #include <QFileInfo> 13 #include <QList> 14 #include <QString> 15 #include <QVariant> 16 17 namespace mtx::gui::Merge { 18 19 class SourceFile; 20 using SourceFilePtr = std::shared_ptr<SourceFile>; 21 22 class SourceFile { 23 public: 24 struct Program { 25 QString m_serviceProvider, m_serviceName; 26 }; 27 28 public: 29 QVariantMap m_properties; 30 QHash<unsigned int, Program> m_programMap; 31 QString m_fileName; 32 QList<TrackPtr> m_tracks, m_attachedFiles; 33 QList<SourceFilePtr> m_additionalParts, m_appendedFiles; 34 QList<QFileInfo> m_playlistFiles; 35 36 mtx::file_type_e m_type{mtx::file_type_e::is_unknown}; 37 bool m_appended{}, m_additionalPart{}, m_isPlaylist{}, m_dontScanForOtherPlaylists{}; 38 SourceFile *m_appendedTo{}; 39 40 uint64_t m_playlistDuration{}, m_playlistSize{}, m_playlistChapters{}; 41 42 double m_probeRangePercentage{0.3}; 43 44 std::optional<mtx::bluray::disc_library::info_t> m_discLibraryInfoToAdd; 45 bool m_discLibraryInfoSelected{}; 46 47 int m_colorIndex{}; 48 49 public: 50 explicit SourceFile(QString const &fileName = QString{""}); 51 SourceFile(SourceFile const &other); 52 virtual ~SourceFile(); 53 54 SourceFile &operator =(SourceFile const &other); 55 56 virtual QString container() const; 57 virtual bool isTextSubtitleContainer() const; 58 virtual bool isValid() const; 59 virtual bool isRegular() const; 60 virtual bool isAppended() const; 61 virtual bool isAdditionalPart() const; 62 virtual bool isPlaylist() const; 63 virtual bool hasRegularTrack() const; 64 virtual bool hasAudioTrack() const; 65 virtual bool hasSubtitlesTrack() const; 66 virtual bool hasVideoTrack() const; 67 68 virtual void saveSettings(Util::ConfigFile &settings) const; 69 virtual void loadSettings(MuxConfig::Loader &l); 70 virtual void fixAssociations(MuxConfig::Loader &l); 71 virtual void setDefaults(); 72 virtual void setupProgramMapFromProperties(); 73 74 virtual Track *findNthOrLastTrackOfType(TrackType type, int nth) const; 75 76 void buildMkvmergeOptions(Util::CommandLineOptions &options) const; 77 78 protected: 79 virtual mtx::bcp47::language_c deriveLanguageFromFileName(); 80 }; 81 82 } 83