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