source: filezilla/trunk/fuentes/src/include/directorylisting.h @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 3 years ago

First release to xenial

File size: 3.5 KB
Line 
1#ifndef __DIRECTORYLISTING_H__
2#define __DIRECTORYLISTING_H__
3
4#include "optional.h"
5#include "timeex.h"
6
7#include <map>
8
9class CDirentry
10{
11public:
12        fzstring name;
13        int64_t size;
14        CRefcountObject<fzstring> permissions;
15        CRefcountObject<fzstring> ownerGroup;
16
17        enum _flags
18        {
19                flag_dir = 1,
20                flag_link = 2,
21                flag_unsure = 4 // May be set on cached items if any changes were made to the file
22        };
23        int flags;
24
25        inline bool is_dir() const
26        {
27                return (flags & flag_dir) != 0;
28        }
29
30        inline bool is_link() const
31        {
32                return (flags & flag_link) != 0;
33        }
34
35        inline bool is_unsure() const
36        {
37                return (flags & flag_unsure) != 0;
38        }
39
40        inline bool has_date() const
41        {
42                return time.IsValid();;
43        }
44
45        inline bool has_time() const
46        {
47                return time.IsValid() && time.GetAccuracy() >= CDateTime::hours;
48        }
49
50        inline bool has_seconds() const
51        {
52                return time.IsValid() && time.GetAccuracy() >= CDateTime::seconds;
53        }
54
55        CSparseOptional<fzstring> target; // Set to linktarget it link is true
56
57        CDateTime time;
58
59        wxString dump() const;
60        bool operator==(const CDirentry &op) const;
61};
62
63#include "refcount.h"
64
65class CDirectoryListing final
66{
67public:
68        typedef CDirentry value_type;
69
70        CDirectoryListing() = default;
71        CDirectoryListing(CDirectoryListing const& listing) = default;
72        CDirectoryListing(CDirectoryListing && listing) noexcept = default;
73
74        CDirectoryListing& operator=(CDirectoryListing const&) = default;
75        CDirectoryListing& operator=(CDirectoryListing &&) noexcept = default;
76
77        const CDirentry& operator[](unsigned int index) const;
78
79        // Word of caution: You MUST NOT change the name of the returned
80        // entry if you do not call ClearFindMap afterwards
81        CDirentry& operator[](unsigned int index);
82
83        void SetCount(unsigned int count);
84        unsigned int GetCount() const { return m_entryCount; }
85
86        int FindFile_CmpCase(const wxString& name) const;
87        int FindFile_CmpNoCase(wxString name) const;
88
89        void ClearFindMap();
90
91        CServerPath path;
92        CMonotonicClock m_firstListTime;
93
94        enum
95        {
96                unsure_file_added = 0x01,
97                unsure_file_removed = 0x02,
98                unsure_file_changed = 0x04,
99                unsure_file_mask = 0x07,
100                unsure_dir_added = 0x08,
101                unsure_dir_removed = 0x10,
102                unsure_dir_changed = 0x20,
103                unsure_dir_mask = 0x38,
104                unsure_unknown = 0x40,
105                unsure_invalid = 0x80, // Recommended action: Do a full refresh
106                unsure_mask = 0xff,
107
108                listing_failed = 0x100,
109                listing_has_dirs = 0x200,
110                listing_has_perms = 0x400,
111                listing_has_usergroup = 0x800
112        };
113        // Lowest bit indicates a file got added
114        // Next bit indicates a file got removed
115        // 3rd bit indicates a file got changed.
116        // 4th bit is set if an update cannot be applied to
117        // one of the other categories.
118        //
119        // These bits should help the user interface to choose an appropriate sorting
120        // algorithm for modified listings
121        int m_flags{};
122
123        int get_unsure_flags() const { return m_flags & unsure_mask; }
124        bool failed() const { return (m_flags & listing_failed) != 0; }
125        bool has_dirs() const { return (m_flags & listing_has_dirs) != 0; }
126        bool has_perms() const { return (m_flags & listing_has_perms) != 0; }
127        bool has_usergroup() const { return (m_flags & listing_has_usergroup) != 0; }
128
129        void Assign(std::deque<CRefcountObject<CDirentry>> & entries);
130
131        bool RemoveEntry(unsigned int index);
132
133        void GetFilenames(std::vector<fzstring> &names) const;
134
135protected:
136
137        CRefcountObject_Uninitialized<std::vector<CRefcountObject<CDirentry> > > m_entries;
138
139        mutable CRefcountObject_Uninitialized<std::multimap<fzstring, unsigned int> > m_searchmap_case;
140        mutable CRefcountObject_Uninitialized<std::multimap<fzstring, unsigned int> > m_searchmap_nocase;
141
142        unsigned int m_entryCount{};
143};
144
145#endif
Note: See TracBrowser for help on using the repository browser.