blob: 5bebc0545d77812354fdebec06018a9b16a43d43 (
plain)
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
|
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "radialMap/widget.h"
#include <sys/stat.h>
#include <iostream>
#include <dirent.h>
#include <stdio.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
m_map(new RadialMap::Widget(this)),
tree(new Folder(""))
{
recursiveTreeLoad(tree,"/etc/");
ui->setupUi(this);
//m_map->hide();
ui->verticalLayout->addWidget(m_map);
connect(&treeTimer,&QTimer::timeout,this,&MainWindow::create);
treeTimer.setSingleShot(true);
treeTimer.start(1);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::create()
{
m_map->create(tree);
}
uint64_t MainWindow::recursiveTreeLoad(Folder * tree,std::string folder)
{
uint64_t size=0;
DIR *d;
struct dirent *entry;
d = opendir(folder.c_str());
if (d)
{
while ((entry = readdir(d)) != NULL)
{
if(entry==NULL)
break;
bool skip=false;
if(entry->d_name[0]=='.')
{
if(entry->d_name[1]==0x00)
skip=true;
else if(entry->d_name[1]=='.' && entry->d_name[2]==0x00)
skip=true;
}
if(!skip)
{
if(entry->d_type == DT_DIR)
{
Folder * newDir=new Folder(entry->d_name);
size+=recursiveTreeLoad(newDir,folder+entry->d_name+"/");
tree->append(newDir);
}
else
{
struct stat statbuf;
std::string path=folder+entry->d_name;
if(stat(path.c_str(), &statbuf) != -1)
{
size+=statbuf.st_size;
tree->append(entry->d_name,statbuf.st_size);
}
}
}
}
closedir(d);
}
if(tree->size()!=size)//wrong is recursiveTreeLoad() is call after append
abort();
return size;
}
|