MythTV  0.26-pre
videometadatalistmanager.h
Go to the documentation of this file.
00001 #ifndef VIDEOMETADATALISTMANAGER_H_
00002 #define VIDEOMETADATALISTMANAGER_H_
00003 
00004 #include <list>
00005 
00006 #include "quicksp.h"
00007 #include "videometadata.h"
00008 #include "mythmetaexp.h"
00009 
00010 class META_PUBLIC VideoMetadataListManager
00011 {
00012   public:
00013     typedef simple_ref_ptr<VideoMetadata> VideoMetadataPtr;
00014     typedef std::list<VideoMetadataPtr> metadata_list;
00015 
00016   public:
00017     static VideoMetadataPtr loadOneFromDatabase(uint id);
00018     static void loadAllFromDatabase(metadata_list &items,
00019                                     const QString &sql = "");
00020 
00021   public:
00022     VideoMetadataListManager();
00023     ~VideoMetadataListManager();
00024 
00025     void setList(metadata_list &list);
00026     const metadata_list &getList() const;
00027 
00028     VideoMetadataPtr byFilename(const QString &file_name) const;
00029     VideoMetadataPtr byID(unsigned int db_id) const;
00030 
00031     bool purgeByFilename(const QString &file_name);
00032     bool purgeByID(unsigned int db_id);
00033 
00034   private:
00035     class VideoMetadataListManagerImp *m_imp;
00036 };
00037 
00038 class META_PUBLIC meta_node
00039 {
00040   public:
00041     meta_node(meta_node *parent, bool is_path_root = false) :
00042             m_parent(parent), m_path_root(is_path_root) {}
00043     virtual ~meta_node() {}
00044 
00045     virtual const QString &getName() const = 0;
00046     virtual const QString &getPath() const;
00047     const QString &getFQPath();
00048     void setParent(meta_node *parent);
00049     void setPathRoot(bool is_root = true);
00050 
00051   protected:
00052     meta_node *m_parent;
00053 
00054   private:
00055     QString m_fq_path;
00056     bool m_path_root;
00057     static const QString m_empty_path;
00058 };
00059 
00060 class META_PUBLIC meta_data_node : public meta_node
00061 {
00062   public:
00063     meta_data_node(VideoMetadata *data, meta_node *parent = NULL) :
00064                    meta_node(parent), m_data(data) {}
00065     const QString &getName() const;
00066     const VideoMetadata *getData() const;
00067     VideoMetadata *getData();
00068 
00069   private:
00070     VideoMetadata *m_data;
00071     static const QString m_meta_bug;
00072 };
00073 
00074 class meta_dir_node;
00075 
00076 typedef simple_ref_ptr<meta_dir_node> smart_dir_node;
00077 typedef simple_ref_ptr<meta_data_node> smart_meta_node;
00078 
00079 typedef std::list<smart_dir_node> meta_dir_list;
00080 typedef std::list<smart_meta_node> meta_data_list;
00081 
00082 class META_PUBLIC meta_dir_node : public meta_node
00083 {
00084   public:
00085     typedef meta_dir_list::iterator dir_iterator;
00086     typedef meta_dir_list::const_iterator const_dir_iterator;
00087 
00088     typedef meta_data_list::iterator entry_iterator;
00089     typedef meta_data_list::const_iterator const_entry_iterator;
00090 
00091   public:
00092     meta_dir_node(const QString &path, const QString &name = "",
00093                   meta_dir_node *parent = NULL, bool is_path_root = false,
00094                   const QString &host = "", const QString &prefix = "",
00095                   const QVariant &data = QVariant());
00096     meta_dir_node() : meta_node(NULL) { }
00097 
00098     void setName(const QString &name);
00099     const QString &getName() const;
00100     void SetHost(const QString &host);
00101     const QString &GetHost() const;
00102     void SetPrefix(const QString &prefix);
00103     const QString &GetPrefix() const;
00104     const QString &getPath() const;
00105     void setPath(const QString &path);
00106     void SetData(const QVariant &data);
00107     const QVariant &GetData() const;
00108     bool DataIsValid(void) const;
00109     smart_dir_node addSubDir(const QString &subdir,
00110                              const QString &name = "",
00111                              const QString &host = "",
00112                              const QString &prefix = "",
00113                              const QVariant &data = QVariant());
00114     void addSubDir(const smart_dir_node &subdir);
00115     smart_dir_node getSubDir(const QString &subdir,
00116                              const QString &name = "",
00117                              bool create = true,
00118                              const QString &host = "",
00119                              const QString &prefix = "",
00120                              const QVariant &data = QVariant());
00121     void addEntry(const smart_meta_node &entry);
00122     void clear();
00123     bool empty() const;
00124     int  subdir_count() const;
00125     template <typename DirSort, typename EntrySort>
00126     void sort(DirSort dir_sort, EntrySort entry_sort)
00127     {
00128         m_subdirs.sort(dir_sort);
00129         m_entries.sort(entry_sort);
00130 
00131         for (meta_dir_list::iterator p = m_subdirs.begin();
00132         p != m_subdirs.end(); ++p)
00133         {
00134             (*p)->sort(dir_sort, entry_sort);
00135         }
00136     }
00137     dir_iterator dirs_begin();
00138     dir_iterator dirs_end();
00139     const_dir_iterator dirs_begin() const;
00140     const_dir_iterator dirs_end() const;
00141     entry_iterator entries_begin();
00142     entry_iterator entries_end();
00143     const_entry_iterator entries_begin() const;
00144     const_entry_iterator entries_end() const;
00145     bool has_entries() const;
00146 
00147   private:
00148     QString m_path;
00149     QString m_name;
00150     QString m_host;
00151     QString m_prefix;
00152     meta_dir_list m_subdirs;
00153     meta_data_list m_entries;
00154 
00155     QVariant m_data;
00156 };
00157 #endif // VIDEOMETADATALISTMANAGER_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends