17 #include "XBDateTime.h" 19 #include "threads/CriticalSection.h" 20 #include "utils/IArchivable.h" 21 #include "utils/ISerializable.h" 22 #include "utils/ISortable.h" 23 #include "utils/SortUtils.h" 31 enum class VideoDbContentType;
56 class CPVRChannelGroupMember;
58 class CPVREpgSearchFilter;
60 class CPVRTimerInfoTag;
73 typedef std::shared_ptr<CCueDocument> CCueDocumentPtr;
76 typedef std::shared_ptr<const IEvent> EventPtr;
79 #define STARTOFFSET_RESUME (-1) 85 enum EFileFolderType {
86 EFILEFOLDER_TYPE_ALWAYS = 1<<0,
87 EFILEFOLDER_TYPE_ONCLICK = 1<<1,
88 EFILEFOLDER_TYPE_ONBROWSE = 1<<2,
90 EFILEFOLDER_MASK_ALL = 0xff,
91 EFILEFOLDER_MASK_ONCLICK = EFILEFOLDER_TYPE_ALWAYS
92 | EFILEFOLDER_TYPE_ONCLICK,
93 EFILEFOLDER_MASK_ONBROWSE = EFILEFOLDER_TYPE_ALWAYS
94 | EFILEFOLDER_TYPE_ONCLICK
95 | EFILEFOLDER_TYPE_ONBROWSE,
109 explicit CFileItem(
const std::string& strLabel);
110 explicit CFileItem(
const char* strLabel);
112 CFileItem(
const std::string& strPath,
bool bIsFolder);
121 explicit CFileItem(
const std::shared_ptr<PVR::CPVREpgInfoTag>& tag);
122 explicit CFileItem(
const std::shared_ptr<PVR::CPVREpgSearchFilter>& filter);
123 explicit CFileItem(
const std::shared_ptr<PVR::CPVRChannelGroupMember>& channelGroupMember);
124 explicit CFileItem(
const std::shared_ptr<PVR::CPVRRecording>& record);
125 explicit CFileItem(
const std::shared_ptr<PVR::CPVRTimerInfoTag>& timer);
127 explicit CFileItem(std::shared_ptr<const ADDON::IAddon> addonInfo);
128 explicit CFileItem(
const EventPtr& eventLogEntry);
133 const CURL GetURL()
const;
134 void SetURL(
const CURL& url);
135 bool IsURL(
const CURL& url)
const;
136 const std::string& GetPath()
const {
return m_strPath; }
137 void SetPath(
const std::string& path) { m_strPath = path; }
138 bool IsPath(
const std::string& path,
bool ignoreURLOptions =
false)
const;
140 const CURL GetDynURL()
const;
141 void SetDynURL(
const CURL& url);
142 const std::string &GetDynPath()
const;
143 void SetDynPath(
const std::string &path);
151 void Archive(
CArchive& ar)
override;
152 void Serialize(
CVariant& value)
const override;
153 void ToSortable(SortItem &sortable, Field field)
const override;
154 void ToSortable(SortItem &sortable,
const Fields &fields)
const;
155 bool IsFileItem()
const override {
return true; }
157 bool Exists(
bool bUseCache =
true)
const;
164 bool IsPicture()
const;
165 bool IsLyrics()
const;
172 bool IsAudio()
const;
178 bool IsDeleted()
const;
184 bool IsAudioBook()
const;
187 bool IsCUESheet()
const;
188 bool IsInternetStream(
const bool bStrictCheck =
false)
const;
189 bool IsStreamedFilesystem()
const;
190 bool IsPlayList()
const;
191 bool IsSmartPlayList()
const;
192 bool IsLibraryFolder()
const;
193 bool IsPythonScript()
const;
194 bool IsPlugin()
const;
195 bool IsScript()
const;
196 bool IsAddonsPath()
const;
197 bool IsSourcesPath()
const;
199 bool IsDiscImage()
const;
200 bool IsOpticalMediaFile()
const;
201 bool IsBluray()
const;
207 bool IsISO9660()
const;
210 bool IsOnDVD()
const;
211 bool IsOnLAN()
const;
214 bool IsRemote()
const;
217 bool IsStack()
const;
218 bool IsFavourite()
const;
219 bool IsMultiPath()
const;
220 bool IsMusicDb()
const;
222 bool IsPVRChannel()
const;
223 bool IsPVRChannelGroup()
const;
224 bool IsPVRRecording()
const;
225 bool IsUsablePVRRecording()
const;
226 bool IsDeletedPVRRecording()
const;
227 bool IsInProgressPVRRecording()
const;
228 bool IsPVRTimer()
const;
229 bool IsType(
const char *ext)
const;
230 bool IsVirtualDirectoryRoot()
const;
231 bool IsReadOnly()
const;
232 bool CanQueue()
const;
233 void SetCanQueue(
bool bYesNo);
234 bool IsParentFolder()
const;
235 bool IsFileFolder(EFileFolderType types = EFILEFOLDER_MASK_ALL)
const;
236 bool IsRemovable()
const;
238 bool IsLiveTV()
const;
240 bool IsAndroidApp()
const;
242 bool HasVideoVersions()
const;
243 bool HasVideoExtras()
const;
245 void RemoveExtension();
247 void FillInDefaultIcon();
248 void SetFileSizeLabel();
249 void SetLabel(
const std::string &strLabel)
override;
250 VideoDbContentType GetVideoContentType()
const;
251 bool IsLabelPreformatted()
const {
return m_bLabelPreformatted; }
252 void SetLabelPreformatted(
bool bYesNo) { m_bLabelPreformatted=bYesNo; }
253 bool SortsOnTop()
const {
return m_specialSort == SortSpecialOnTop; }
254 bool SortsOnBottom()
const {
return m_specialSort == SortSpecialOnBottom; }
255 void SetSpecialSort(SortSpecial sort) { m_specialSort = sort; }
257 inline bool HasMusicInfoTag()
const 259 return m_musicInfoTag != NULL;
266 return m_musicInfoTag;
269 bool HasVideoInfoTag()
const;
275 inline bool HasEPGInfoTag()
const 277 return m_epgInfoTag.get() != NULL;
280 inline const std::shared_ptr<PVR::CPVREpgInfoTag> GetEPGInfoTag()
const 285 bool HasEPGSearchFilter()
const {
return m_epgSearchFilter !=
nullptr; }
287 const std::shared_ptr<PVR::CPVREpgSearchFilter> GetEPGSearchFilter()
const 289 return m_epgSearchFilter;
292 inline bool HasPVRChannelGroupMemberInfoTag()
const 294 return m_pvrChannelGroupMemberInfoTag.get() !=
nullptr;
297 inline const std::shared_ptr<PVR::CPVRChannelGroupMember> GetPVRChannelGroupMemberInfoTag()
const 299 return m_pvrChannelGroupMemberInfoTag;
302 bool HasPVRChannelInfoTag()
const;
303 const std::shared_ptr<PVR::CPVRChannel> GetPVRChannelInfoTag()
const;
305 inline bool HasPVRRecordingInfoTag()
const 307 return m_pvrRecordingInfoTag.get() != NULL;
310 inline const std::shared_ptr<PVR::CPVRRecording> GetPVRRecordingInfoTag()
const 312 return m_pvrRecordingInfoTag;
315 inline bool HasPVRTimerInfoTag()
const 317 return m_pvrTimerInfoTag != NULL;
320 inline const std::shared_ptr<PVR::CPVRTimerInfoTag> GetPVRTimerInfoTag()
const 322 return m_pvrTimerInfoTag;
335 bool IsResumePointSet()
const;
341 double GetCurrentResumeTime()
const;
349 bool GetCurrentResumeTimeAndPartNumber(int64_t& startOffset,
int& partNumber)
const;
357 bool IsResumable()
const;
385 inline bool HasPictureInfoTag()
const 387 return m_pictureInfoTag != NULL;
392 return m_pictureInfoTag;
395 bool HasAddonInfo()
const {
return m_addonInfo !=
nullptr; }
396 const std::shared_ptr<const ADDON::IAddon> GetAddonInfo()
const {
return m_addonInfo; }
398 inline bool HasGameInfoTag()
const 400 return m_gameInfoTag != NULL;
407 return m_gameInfoTag;
417 std::string GetLocalFanart()
const;
426 std::string GetLocalArtBaseFilename()
const;
434 std::string GetLocalArtBaseFilename(
bool& useFolder)
const;
443 std::string GetLocalArt(
const std::string& artFile,
bool useFolder =
false)
const;
452 std::string FindLocalArt(
const std::string &artFile,
bool useFolder)
const;
458 bool SkipLocalArt()
const;
465 std::string GetThumbHideIfUnwatched(
const CFileItem* item)
const;
468 std::string GetTBNFile()
const;
470 std::string GetFolderThumb(
const std::string &folderJPG =
"folder.jpg")
const;
472 std::string GetMovieName(
bool bUseFolderNames =
false)
const;
481 std::string GetBaseMoviePath(
bool useFolderNames)
const;
484 std::string GetUserMusicThumb(
bool alwaysCheckRemote =
false,
bool fallbackToFolder =
false)
const;
498 std::string GetLocalMetadataPath()
const;
501 std::string FindTrailer()
const;
514 const std::string& GetMimeType()
const {
return m_mimetype; }
517 void SetMimeType(
const std::string& mimetype) { m_mimetype = mimetype; } ;
524 void FillInMimeType(
bool lookup =
true);
536 void SetMimeTypeForInternetFile();
545 void SetExtraInfo(
const std::string& info) { m_extrainfo = info; }
546 const std::string& GetExtraInfo()
const {
return m_extrainfo; }
556 void UpdateInfo(
const CFileItem &item,
bool replaceLabels =
true);
566 bool IsSamePath(
const CFileItem *item)
const;
568 bool IsAlbum()
const;
587 void SetFromAlbum(
const CAlbum &album);
593 void SetFromSong(
const CSong &song);
599 std::string m_strDVDLabel;
600 std::string m_strTitle;
603 int m_lStartPartNumber;
604 LockType m_iLockMode;
605 std::string m_strLockCode;
609 void SetCueDocument(
const CCueDocumentPtr& cuePtr);
610 void LoadEmbeddedCue();
611 bool HasCueDocument()
const;
624 void UpdateMimeType(
bool lookup =
true);
635 void FillMusicInfoTag(
const std::shared_ptr<const PVR::CPVREpgInfoTag>& tag);
637 std::string m_strPath;
638 std::string m_strDynPath;
640 SortSpecial m_specialSort;
641 bool m_bIsParentFolder;
643 bool m_bLabelPreformatted;
644 std::string m_mimetype;
645 std::string m_extrainfo;
646 bool m_doContentLookup;
649 std::shared_ptr<PVR::CPVREpgInfoTag> m_epgInfoTag;
650 std::shared_ptr<PVR::CPVREpgSearchFilter> m_epgSearchFilter;
651 std::shared_ptr<PVR::CPVRRecording> m_pvrRecordingInfoTag;
652 std::shared_ptr<PVR::CPVRTimerInfoTag> m_pvrTimerInfoTag;
653 std::shared_ptr<PVR::CPVRChannelGroupMember> m_pvrChannelGroupMemberInfoTag;
655 std::shared_ptr<const ADDON::IAddon> m_addonInfo;
657 EventPtr m_eventLogEntry;
659 int64_t m_lStartOffset;
660 int64_t m_lEndOffset;
662 CCueDocumentPtr m_cueDocument;
695 typedef bool (*FILEITEMLISTCOMPARISONFUNC) (
const CFileItemPtr &pItem1,
const CFileItemPtr &pItem2);
696 typedef void (*FILEITEMFILLFUNC) (CFileItemPtr &item);
705 enum CACHE_TYPE { CACHE_NEVER = 0, CACHE_IF_SLOW, CACHE_ALWAYS };
710 void Archive(
CArchive& ar)
override;
711 CFileItemPtr operator[] (
int iItem);
712 const CFileItemPtr operator[] (
int iItem)
const;
713 CFileItemPtr operator[] (
const std::string& strPath);
714 const CFileItemPtr operator[] (
const std::string& strPath)
const;
717 void Add(CFileItemPtr item);
719 void AddFront(
const CFileItemPtr &pItem,
int itemPosition);
721 void Remove(
int iItem);
722 CFileItemPtr Get(
int iItem)
const;
724 CFileItemPtr Get(
const std::string& strPath)
const;
726 bool IsEmpty()
const;
728 void Assign(
const CFileItemList& itemlist,
bool append =
false);
729 bool Copy (
const CFileItemList& item,
bool copyItems =
true);
730 void Reserve(
size_t iCount);
731 void Sort(
SortBy sortBy, SortOrder sortOrder, SortAttribute sortAttributes = SortAttributeNone);
741 void FillInDefaultIcons();
742 int GetFolderCount()
const;
743 int GetFileCount()
const;
744 int GetSelectedCount()
const;
745 int GetObjectCount()
const;
746 void FilterCueItems();
747 void RemoveExtensions();
748 void SetIgnoreURLOptions(
bool ignoreURLOptions);
749 void SetFastLookup(
bool fastLookup);
750 bool Contains(
const std::string& fileName)
const;
751 bool GetFastLookup()
const {
return m_fastLookup; }
758 void Stack(
bool stackFiles =
true);
760 SortOrder GetSortOrder()
const {
return m_sortDescription.sortOrder; }
761 SortBy GetSortMethod()
const {
return m_sortDescription.sortBy; }
762 void SetSortOrder(SortOrder sortOrder) { m_sortDescription.sortOrder = sortOrder; }
763 void SetSortMethod(
SortBy sortBy) { m_sortDescription.sortBy = sortBy; }
775 bool Load(
int windowID = 0);
787 bool Save(
int windowID = 0);
788 void SetCacheToDisc(CACHE_TYPE cacheToDisc) { m_cacheToDisc = cacheToDisc; }
789 bool CacheToDiscAlways()
const {
return m_cacheToDisc == CACHE_ALWAYS; }
790 bool CacheToDiscIfSlow()
const {
return m_cacheToDisc == CACHE_IF_SLOW; }
800 void RemoveDiscCache(
int windowID = 0)
const;
801 void RemoveDiscCache(
const std::string& cachefile)
const;
802 void RemoveDiscCacheCRC(
const std::string& crc)
const;
803 bool AlwaysCache()
const;
805 void Swap(
unsigned int item1,
unsigned int item2);
813 void AddSortMethod(
SortBy sortBy,
int buttonLabel,
const LABEL_MASKS &labelMasks, SortAttribute sortAttributes = SortAttributeNone);
814 void AddSortMethod(
SortBy sortBy, SortAttribute sortAttributes,
int buttonLabel,
const LABEL_MASKS &labelMasks);
816 bool HasSortDetails()
const {
return m_sortDetails.size() != 0; }
817 const std::vector<GUIViewSortDetails> &GetSortDetails()
const {
return m_sortDetails; }
826 bool GetReplaceListing()
const {
return m_replaceListing; }
827 void SetReplaceListing(
bool replace);
828 void SetContent(
const std::string& content) { m_content = content; }
829 const std::string& GetContent()
const {
return m_content; }
831 void ClearSortState();
833 VECFILEITEMS::iterator begin() {
return m_items.begin(); }
834 VECFILEITEMS::iterator end() {
return m_items.end(); }
835 VECFILEITEMS::iterator erase(VECFILEITEMS::iterator first, VECFILEITEMS::iterator last);
836 VECFILEITEMS::const_iterator begin()
const {
return m_items.begin(); }
837 VECFILEITEMS::const_iterator end()
const {
return m_items.end(); }
838 VECFILEITEMS::const_iterator cbegin()
const {
return m_items.cbegin(); }
839 VECFILEITEMS::const_iterator cend()
const {
return m_items.cend(); }
840 std::reverse_iterator<VECFILEITEMS::const_iterator> rbegin()
const {
return m_items.rbegin(); }
841 std::reverse_iterator<VECFILEITEMS::const_iterator> rend()
const {
return m_items.rend(); }
844 void Sort(FILEITEMLISTCOMPARISONFUNC func);
845 void FillSortFields(FILEITEMFILLFUNC func);
846 std::string GetDiscFileCache(
int windowID)
const;
862 bool m_ignoreURLOptions =
false;
863 bool m_fastLookup =
false;
865 bool m_sortIgnoreFolders =
false;
866 CACHE_TYPE m_cacheToDisc = CACHE_IF_SLOW;
867 bool m_replaceListing =
false;
868 std::string m_content;
870 std::vector<GUIViewSortDetails> m_sortDetails;
872 mutable CCriticalSection m_lock;
CDateTime m_dateTime
file creation date & time
Definition: FileItem.h:597
Definition: GUIListItem.h:29
int64_t m_dwSize
file size (0 for folders)
Definition: FileItem.h:598
std::shared_ptr< CFileItem > CFileItemPtr
A shared pointer to CFileItem.
Definition: FileItem.h:669
Definition: ContextMenuManager.h:24
std::vector< CFileItemPtr >::iterator IVECFILEITEMS
Iterator for VECFILEITEMS.
Definition: FileItem.h:681
Represents a list of files.
Definition: FileItem.h:702
int64_t GetStartOffset() const
Get the offset where start the playback.
Definition: FileItem.h:364
Definition: Bookmark.h:14
void SetSortIgnoreFolders(bool sort)
Specify whether this list should be sorted with folders separate from files By default we sort with f...
Definition: FileItem.h:825
void SetStartOffset(const int64_t offset)
Set the offset where start the playback.
Definition: FileItem.h:371
Definition: GameInfoTag.h:24
Definition: LabelFormatter.h:21
int64_t GetEndOffset() const
Get the end offset.
Definition: FileItem.h:377
Definition: ISerializable.h:13
Definition: AudioDecoder.h:18
Definition: CueDocument.h:20
Class to store and read album information from CMusicDatabase.
Definition: Song.h:34
int m_iDriveType
If m_bIsShareOrDrive is true, use to get the share type. Types see: CMediaSource::m_iDriveType.
Definition: FileItem.h:596
DateTime class, which uses FileTime as it's base.
Definition: XBDateTime.h:63
Definition: ISortable.h:15
bool ContentLookup()
Some sources do not support HTTP HEAD request to determine i.e. mime type.
Definition: FileItem.h:530
SortBy
Definition: SortUtils.h:49
std::map< std::string, CFileItemPtr > MAPFILEITEMS
A map of pointers to CFileItem.
Definition: FileItem.h:687
std::vector< CFileItemPtr > VECFILEITEMS
A vector of pointer to CFileItem.
Definition: FileItem.h:675
void SetContentLookup(bool enable)
Lookup via HTTP HEAD request might not be needed, use this setter to disable ContentLookup.
Definition: FileItem.h:542
bool m_bIsShareOrDrive
is this a root share/drive
Definition: FileItem.h:595
Definition: PictureInfoTag.h:30
Definition: SortUtils.h:176
std::pair< std::string, CFileItemPtr > MAPFILEITEMSPAIR
Pair for MAPFILEITEMS.
Definition: FileItem.h:693
Definition: VideoInfoTag.h:53
Definition: MusicInfoTag.h:27
Definition: IArchivable.h:13
Class to store and read song information from CMusicDatabase.
Definition: Song.h:48
Represents a file on a share.
Definition: FileItem.h:102
void SetEndOffset(const int64_t offset)
Set the end offset.
Definition: FileItem.h:383
Definition: Application.h:77