-
Notifications
You must be signed in to change notification settings - Fork 0
/
filelister.cpp
117 lines (104 loc) · 2.45 KB
/
filelister.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "filelister.h"
#include "qzdir.h"
#include <stdio.h>
#include <stdio.h>
int
FileLister::getType(const QString &path)
{
int s_idx, p_idx;
QString suffix;
s_idx = path.findRev('.');
if (s_idx<0)
return FLT_UNKNOWN;
p_idx = path.findRev('/');
if (p_idx>s_idx)
return FLT_UNKNOWN;
suffix = path.mid(s_idx).lower();
if (suffix==".jpg" || suffix==".jpeg" ||
suffix==".gif" || suffix==".png")
return FLT_IMAGE;
if (suffix==".cap" || suffix==".txt")
return FLT_TEXT;
return FLT_UNKNOWN;
}
FileLister::FileLister()
{
m_type = FLT_UNKNOWN;
}
int
FileLister::find(const QString &fname)
{
if (FLT_UNKNOWN==m_type)
return -1;
for (int idx=0 ; idx<m_list.count() ; idx++) {
if (m_list[idx]==fname)
return idx;
}
return -1;
}
int
FileLister::findPath(const QString &path)
{
QString fname, dname;
dname = QZDir::getDir(path, &fname);
if (dname!=m_dir.path()) {
return -1;
}
return find(fname);
}
int
FileLister::setFile(const QString &path)
{
QString fname, dname;
QZDir dir;
int new_type;
new_type = FileLister::getType(path);
if (FLT_UNKNOWN==new_type) return -1;
dname = QZDir::getDir(path, &fname);
if (dname==dir.path())
return find(fname);
dir.setPath(dname);
if (!dir.isDir()) return -1;
QStringList flist;
flist = dir.getList("*.*", QZFL_FILE, QZFS_NAME);
int idx = 0, fname_type, file_idx = -1;
QString fname_ptr;
QStringList::Iterator itr;
itr = flist.begin();
while (itr!=flist.end()) {
fname_type = FileLister::getType(dname+"/"+*itr);
if (fname_type==new_type) {
itr++;
} else {
itr = flist.remove(itr);
}
}
m_list = flist;
m_dir = dir;
m_type = new_type;
m_list.sort();
return find(fname);
}
QString
FileLister::getFile(int idx)
{
if (m_type==FLT_UNKNOWN) {
printf("FileLister::getFile(%d) is UNKNOWN\n", idx);
return NULL;
}
if (idx<0 || idx>=m_list.count()) {
printf("FileLister::getFile(%d) is OUT OF RANGE(0,%d)\n",
idx, m_list.count()-1);
return NULL;
}
/*
printf("FileLister::getFile(%d) -> %s\n",
idx, (const char*)((QString)m_list[idx]).utf8());
*/
return m_dir.absPath()+"/"+(QString)m_list[idx];
}
int
FileLister::count()
{
return m_list.count();
}