|
MythTV
0.26-pre
|
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_
1.7.6.1