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;
166 std::string GetOpticalMediaPath()
const;
172 bool IsVideo()
const;
174 bool IsDiscStub()
const;
181 bool IsPicture()
const;
182 bool IsLyrics()
const;
183 bool IsSubtitle()
const;
190 bool IsAudio()
const;
196 bool IsDeleted()
const;
202 bool IsAudioBook()
const;
205 bool IsCUESheet()
const;
206 bool IsInternetStream(
const bool bStrictCheck =
false)
const;
207 bool IsStreamedFilesystem()
const;
208 bool IsPlayList()
const;
209 bool IsSmartPlayList()
const;
210 bool IsLibraryFolder()
const;
211 bool IsPythonScript()
const;
212 bool IsPlugin()
const;
213 bool IsScript()
const;
214 bool IsAddonsPath()
const;
215 bool IsSourcesPath()
const;
217 bool IsVideoExtras()
const;
218 bool IsDiscImage()
const;
219 bool IsOpticalMediaFile()
const;
220 bool IsDVDFile(
bool bVobs =
true,
bool bIfos =
true)
const;
221 bool IsBDFile()
const;
222 bool IsBluray()
const;
223 bool IsProtectedBlurayDisc()
const;
229 bool IsISO9660()
const;
232 bool IsOnDVD()
const;
233 bool IsOnLAN()
const;
236 bool IsRemote()
const;
239 bool IsStack()
const;
240 bool IsFavourite()
const;
241 bool IsMultiPath()
const;
242 bool IsMusicDb()
const;
243 bool IsVideoDb()
const;
245 bool IsPVRChannel()
const;
246 bool IsPVRChannelGroup()
const;
247 bool IsPVRRecording()
const;
248 bool IsUsablePVRRecording()
const;
249 bool IsDeletedPVRRecording()
const;
250 bool IsInProgressPVRRecording()
const;
251 bool IsPVRTimer()
const;
252 bool IsType(
const char *ext)
const;
253 bool IsVirtualDirectoryRoot()
const;
254 bool IsReadOnly()
const;
255 bool CanQueue()
const;
256 void SetCanQueue(
bool bYesNo);
257 bool IsParentFolder()
const;
258 bool IsFileFolder(EFileFolderType types = EFILEFOLDER_MASK_ALL)
const;
259 bool IsRemovable()
const;
261 bool IsLiveTV()
const;
263 bool IsAndroidApp()
const;
265 bool HasVideoVersions()
const;
266 bool HasVideoExtras()
const;
268 void RemoveExtension();
270 void FillInDefaultIcon();
271 void SetFileSizeLabel();
272 void SetLabel(
const std::string &strLabel)
override;
273 VideoDbContentType GetVideoContentType()
const;
274 bool IsLabelPreformatted()
const {
return m_bLabelPreformatted; }
275 void SetLabelPreformatted(
bool bYesNo) { m_bLabelPreformatted=bYesNo; }
276 bool SortsOnTop()
const {
return m_specialSort == SortSpecialOnTop; }
277 bool SortsOnBottom()
const {
return m_specialSort == SortSpecialOnBottom; }
278 void SetSpecialSort(SortSpecial sort) { m_specialSort = sort; }
280 inline bool HasMusicInfoTag()
const 282 return m_musicInfoTag != NULL;
289 return m_musicInfoTag;
292 bool HasVideoInfoTag()
const;
298 inline bool HasEPGInfoTag()
const 300 return m_epgInfoTag.get() != NULL;
303 inline const std::shared_ptr<PVR::CPVREpgInfoTag> GetEPGInfoTag()
const 308 bool HasEPGSearchFilter()
const {
return m_epgSearchFilter !=
nullptr; }
310 const std::shared_ptr<PVR::CPVREpgSearchFilter> GetEPGSearchFilter()
const 312 return m_epgSearchFilter;
315 inline bool HasPVRChannelGroupMemberInfoTag()
const 317 return m_pvrChannelGroupMemberInfoTag.get() !=
nullptr;
320 inline const std::shared_ptr<PVR::CPVRChannelGroupMember> GetPVRChannelGroupMemberInfoTag()
const 322 return m_pvrChannelGroupMemberInfoTag;
325 bool HasPVRChannelInfoTag()
const;
326 const std::shared_ptr<PVR::CPVRChannel> GetPVRChannelInfoTag()
const;
328 inline bool HasPVRRecordingInfoTag()
const 330 return m_pvrRecordingInfoTag.get() != NULL;
333 inline const std::shared_ptr<PVR::CPVRRecording> GetPVRRecordingInfoTag()
const 335 return m_pvrRecordingInfoTag;
338 inline bool HasPVRTimerInfoTag()
const 340 return m_pvrTimerInfoTag != NULL;
343 inline const std::shared_ptr<PVR::CPVRTimerInfoTag> GetPVRTimerInfoTag()
const 345 return m_pvrTimerInfoTag;
358 bool IsResumePointSet()
const;
364 double GetCurrentResumeTime()
const;
372 bool GetCurrentResumeTimeAndPartNumber(int64_t& startOffset,
int& partNumber)
const;
380 bool IsResumable()
const;
408 inline bool HasPictureInfoTag()
const 410 return m_pictureInfoTag != NULL;
415 return m_pictureInfoTag;
418 bool HasAddonInfo()
const {
return m_addonInfo !=
nullptr; }
419 const std::shared_ptr<const ADDON::IAddon> GetAddonInfo()
const {
return m_addonInfo; }
421 inline bool HasGameInfoTag()
const 423 return m_gameInfoTag != NULL;
430 return m_gameInfoTag;
440 std::string GetLocalFanart()
const;
449 std::string GetLocalArtBaseFilename()
const;
457 std::string GetLocalArtBaseFilename(
bool& useFolder)
const;
466 std::string GetLocalArt(
const std::string& artFile,
bool useFolder =
false)
const;
475 std::string FindLocalArt(
const std::string &artFile,
bool useFolder)
const;
481 bool SkipLocalArt()
const;
488 std::string GetThumbHideIfUnwatched(
const CFileItem* item)
const;
491 std::string GetTBNFile()
const;
493 std::string GetFolderThumb(
const std::string &folderJPG =
"folder.jpg")
const;
495 std::string GetMovieName(
bool bUseFolderNames =
false)
const;
504 std::string GetBaseMoviePath(
bool useFolderNames)
const;
507 std::string GetUserMusicThumb(
bool alwaysCheckRemote =
false,
bool fallbackToFolder =
false)
const;
521 std::string GetLocalMetadataPath()
const;
524 std::string FindTrailer()
const;
537 const std::string& GetMimeType()
const {
return m_mimetype; }
540 void SetMimeType(
const std::string& mimetype) { m_mimetype = mimetype; } ;
547 void FillInMimeType(
bool lookup =
true);
559 void SetMimeTypeForInternetFile();
568 void SetExtraInfo(
const std::string& info) { m_extrainfo = info; }
569 const std::string& GetExtraInfo()
const {
return m_extrainfo; }
579 void UpdateInfo(
const CFileItem &item,
bool replaceLabels =
true);
589 bool IsSamePath(
const CFileItem *item)
const;
591 bool IsAlbum()
const;
610 void SetFromAlbum(
const CAlbum &album);
616 void SetFromSong(
const CSong &song);
622 std::string m_strDVDLabel;
623 std::string m_strTitle;
626 int m_lStartPartNumber;
627 LockType m_iLockMode;
628 std::string m_strLockCode;
632 void SetCueDocument(
const CCueDocumentPtr& cuePtr);
633 void LoadEmbeddedCue();
634 bool HasCueDocument()
const;
647 void UpdateMimeType(
bool lookup =
true);
658 void FillMusicInfoTag(
const std::shared_ptr<const PVR::CPVREpgInfoTag>& tag);
660 std::string m_strPath;
661 std::string m_strDynPath;
663 SortSpecial m_specialSort;
664 bool m_bIsParentFolder;
666 bool m_bLabelPreformatted;
667 std::string m_mimetype;
668 std::string m_extrainfo;
669 bool m_doContentLookup;
672 std::shared_ptr<PVR::CPVREpgInfoTag> m_epgInfoTag;
673 std::shared_ptr<PVR::CPVREpgSearchFilter> m_epgSearchFilter;
674 std::shared_ptr<PVR::CPVRRecording> m_pvrRecordingInfoTag;
675 std::shared_ptr<PVR::CPVRTimerInfoTag> m_pvrTimerInfoTag;
676 std::shared_ptr<PVR::CPVRChannelGroupMember> m_pvrChannelGroupMemberInfoTag;
678 std::shared_ptr<const ADDON::IAddon> m_addonInfo;
680 EventPtr m_eventLogEntry;
682 int64_t m_lStartOffset;
683 int64_t m_lEndOffset;
685 CCueDocumentPtr m_cueDocument;
718 typedef bool (*FILEITEMLISTCOMPARISONFUNC) (
const CFileItemPtr &pItem1,
const CFileItemPtr &pItem2);
719 typedef void (*FILEITEMFILLFUNC) (CFileItemPtr &item);
728 enum CACHE_TYPE { CACHE_NEVER = 0, CACHE_IF_SLOW, CACHE_ALWAYS };
733 void Archive(
CArchive& ar)
override;
734 CFileItemPtr operator[] (
int iItem);
735 const CFileItemPtr operator[] (
int iItem)
const;
736 CFileItemPtr operator[] (
const std::string& strPath);
737 const CFileItemPtr operator[] (
const std::string& strPath)
const;
740 void Add(CFileItemPtr item);
742 void AddFront(
const CFileItemPtr &pItem,
int itemPosition);
744 void Remove(
int iItem);
745 CFileItemPtr Get(
int iItem)
const;
747 CFileItemPtr Get(
const std::string& strPath)
const;
749 bool IsEmpty()
const;
751 void Assign(
const CFileItemList& itemlist,
bool append =
false);
752 bool Copy (
const CFileItemList& item,
bool copyItems =
true);
753 void Reserve(
size_t iCount);
754 void Sort(
SortBy sortBy, SortOrder sortOrder, SortAttribute sortAttributes = SortAttributeNone);
764 void FillInDefaultIcons();
765 int GetFolderCount()
const;
766 int GetFileCount()
const;
767 int GetSelectedCount()
const;
768 int GetObjectCount()
const;
769 void FilterCueItems();
770 void RemoveExtensions();
771 void SetIgnoreURLOptions(
bool ignoreURLOptions);
772 void SetFastLookup(
bool fastLookup);
773 bool Contains(
const std::string& fileName)
const;
774 bool GetFastLookup()
const {
return m_fastLookup; }
781 void Stack(
bool stackFiles =
true);
783 SortOrder GetSortOrder()
const {
return m_sortDescription.sortOrder; }
784 SortBy GetSortMethod()
const {
return m_sortDescription.sortBy; }
785 void SetSortOrder(SortOrder sortOrder) { m_sortDescription.sortOrder = sortOrder; }
786 void SetSortMethod(
SortBy sortBy) { m_sortDescription.sortBy = sortBy; }
798 bool Load(
int windowID = 0);
810 bool Save(
int windowID = 0);
811 void SetCacheToDisc(CACHE_TYPE cacheToDisc) { m_cacheToDisc = cacheToDisc; }
812 bool CacheToDiscAlways()
const {
return m_cacheToDisc == CACHE_ALWAYS; }
813 bool CacheToDiscIfSlow()
const {
return m_cacheToDisc == CACHE_IF_SLOW; }
823 void RemoveDiscCache(
int windowID = 0)
const;
824 void RemoveDiscCache(
const std::string& cachefile)
const;
825 void RemoveDiscCacheCRC(
const std::string& crc)
const;
826 bool AlwaysCache()
const;
828 void Swap(
unsigned int item1,
unsigned int item2);
836 void AddSortMethod(
SortBy sortBy,
int buttonLabel,
const LABEL_MASKS &labelMasks, SortAttribute sortAttributes = SortAttributeNone);
837 void AddSortMethod(
SortBy sortBy, SortAttribute sortAttributes,
int buttonLabel,
const LABEL_MASKS &labelMasks);
839 bool HasSortDetails()
const {
return m_sortDetails.size() != 0; }
840 const std::vector<GUIViewSortDetails> &GetSortDetails()
const {
return m_sortDetails; }
849 bool GetReplaceListing()
const {
return m_replaceListing; }
850 void SetReplaceListing(
bool replace);
851 void SetContent(
const std::string& content) { m_content = content; }
852 const std::string& GetContent()
const {
return m_content; }
854 void ClearSortState();
856 VECFILEITEMS::iterator begin() {
return m_items.begin(); }
857 VECFILEITEMS::iterator end() {
return m_items.end(); }
858 VECFILEITEMS::iterator erase(VECFILEITEMS::iterator first, VECFILEITEMS::iterator last);
859 VECFILEITEMS::const_iterator begin()
const {
return m_items.begin(); }
860 VECFILEITEMS::const_iterator end()
const {
return m_items.end(); }
861 VECFILEITEMS::const_iterator cbegin()
const {
return m_items.cbegin(); }
862 VECFILEITEMS::const_iterator cend()
const {
return m_items.cend(); }
863 std::reverse_iterator<VECFILEITEMS::const_iterator> rbegin()
const {
return m_items.rbegin(); }
864 std::reverse_iterator<VECFILEITEMS::const_iterator> rend()
const {
return m_items.rend(); }
867 void Sort(FILEITEMLISTCOMPARISONFUNC func);
868 void FillSortFields(FILEITEMFILLFUNC func);
869 std::string GetDiscFileCache(
int windowID)
const;
885 bool m_ignoreURLOptions =
false;
886 bool m_fastLookup =
false;
888 bool m_sortIgnoreFolders =
false;
889 CACHE_TYPE m_cacheToDisc = CACHE_IF_SLOW;
890 bool m_replaceListing =
false;
891 std::string m_content;
893 std::vector<GUIViewSortDetails> m_sortDetails;
895 mutable CCriticalSection m_lock;
CDateTime m_dateTime
file creation date & time
Definition: FileItem.h:620
Definition: GUIListItem.h:29
int64_t m_dwSize
file size (0 for folders)
Definition: FileItem.h:621
std::shared_ptr< CFileItem > CFileItemPtr
A shared pointer to CFileItem.
Definition: FileItem.h:692
Definition: ContextMenuManager.h:24
std::vector< CFileItemPtr >::iterator IVECFILEITEMS
Iterator for VECFILEITEMS.
Definition: FileItem.h:704
Represents a list of files.
Definition: FileItem.h:725
int64_t GetStartOffset() const
Get the offset where start the playback.
Definition: FileItem.h:387
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:848
void SetStartOffset(const int64_t offset)
Set the offset where start the playback.
Definition: FileItem.h:394
Definition: GameInfoTag.h:24
Definition: LabelFormatter.h:21
int64_t GetEndOffset() const
Get the end offset.
Definition: FileItem.h:400
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:619
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:553
SortBy
Definition: SortUtils.h:49
std::map< std::string, CFileItemPtr > MAPFILEITEMS
A map of pointers to CFileItem.
Definition: FileItem.h:710
std::vector< CFileItemPtr > VECFILEITEMS
A vector of pointer to CFileItem.
Definition: FileItem.h:698
void SetContentLookup(bool enable)
Lookup via HTTP HEAD request might not be needed, use this setter to disable ContentLookup.
Definition: FileItem.h:565
bool m_bIsShareOrDrive
is this a root share/drive
Definition: FileItem.h:618
Definition: PictureInfoTag.h:30
Definition: SortUtils.h:176
std::pair< std::string, CFileItemPtr > MAPFILEITEMSPAIR
Pair for MAPFILEITEMS.
Definition: FileItem.h:716
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:406
Definition: Application.h:77