summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/sysinfo/storage.cpp26
1 files changed, 10 insertions, 16 deletions
diff --git a/noncore/settings/sysinfo/storage.cpp b/noncore/settings/sysinfo/storage.cpp
index f76fbdb..b369ff1 100644
--- a/noncore/settings/sysinfo/storage.cpp
+++ b/noncore/settings/sysinfo/storage.cpp
@@ -30,211 +30,205 @@
30#include <sys/vfs.h> 30#include <sys/vfs.h>
31#include <mntent.h> 31#include <mntent.h>
32 #endif 32 #endif
33 33
34StorageInfo::StorageInfo( QWidget *parent, const char *name ) 34StorageInfo::StorageInfo( QWidget *parent, const char *name )
35 : QWidget( parent, name ) 35 : QWidget( parent, name )
36{ 36{
37 vb = 0; 37 vb = 0;
38 disks.setAutoDelete(TRUE); 38 disks.setAutoDelete(TRUE);
39 lines.setAutoDelete(TRUE); 39 lines.setAutoDelete(TRUE);
40 updateMounts(); 40 updateMounts();
41 startTimer( 5000 ); 41 startTimer( 5000 );
42} 42}
43 43
44void StorageInfo::timerEvent(QTimerEvent*) 44void StorageInfo::timerEvent(QTimerEvent*)
45{ 45{
46 updateMounts(); 46 updateMounts();
47} 47}
48 48
49static bool isCF(const QString& m) 49static bool isCF(const QString& m)
50{ 50{
51 FILE* f = fopen("/var/run/stab", "r"); 51 FILE* f = fopen("/var/run/stab", "r");
52 if (!f) f = fopen("/var/state/pcmcia/stab", "r"); 52 if (!f) f = fopen("/var/state/pcmcia/stab", "r");
53 if (!f) f = fopen("/var/lib/pcmcia/stab", "r"); 53 if (!f) f = fopen("/var/lib/pcmcia/stab", "r");
54 if ( f ) { 54 if ( f ) {
55 char line[1024]; 55 char line[1024];
56 char devtype[80]; 56 char devtype[80];
57 char devname[80]; 57 char devname[80];
58 while ( fgets( line, 1024, f ) ) { 58 while ( fgets( line, 1024, f ) ) {
59 // 0 ide ide-cs 0 hda 3 0 59 // 0 ide ide-cs 0 hda 3 0
60 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 ) { 60 if ( sscanf(line,"%*d %s %*s %*s %s", devtype, devname )==2 ) {
61 if ( QString(devtype) == "ide" && m.find(devname)>0 ) { 61 if ( QString(devtype) == "ide" && m.find(devname)>0 ) {
62 fclose(f); 62 fclose(f);
63 return TRUE; 63 return TRUE;
64 } 64 }
65 } 65 }
66 } 66 }
67 fclose(f); 67 fclose(f);
68 } 68 }
69 return FALSE; 69 return FALSE;
70} 70}
71 71
72void StorageInfo::updateMounts() 72void StorageInfo::updateMounts()
73{ 73{
74#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 74#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
75 struct mntent *me; 75 struct mntent *me;
76 FILE *mntfp = setmntent( "/etc/mtab", "r" ); 76 FILE *mntfp = setmntent( "/etc/mtab", "r" );
77 QStringList curdisks; 77 QStringList curdisks;
78 QStringList curfs; 78 QStringList curfs;
79 QStringList mountList; 79 QStringList mountList;
80 QStringList fsT; 80 QStringList fsT;
81 bool rebuild = FALSE; 81 bool rebuild = FALSE;
82 int n=0; 82 int n=0;
83 if ( mntfp ) { 83 if ( mntfp ) {
84 while ( (me = getmntent( mntfp )) != 0 ) { 84 while ( (me = getmntent( mntfp )) != 0 ) {
85 QString fs = me->mnt_fsname; 85 QString fs = me->mnt_fsname;
86 qDebug(fs+" "+(QString)me->mnt_type); 86 qDebug(fs+" "+(QString)me->mnt_type);
87 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd" 87 if ( fs.left(7)=="/dev/hd" || fs.left(7)=="/dev/sd"
88 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd" 88 || fs.left(8)=="/dev/mtd" || fs.left(9) == "/dev/mmcd"
89 || fs.left(9) == "/dev/root" || fs.left(5) == "/ramfs") { 89 || fs.left(9) == "/dev/root" || fs.left(5) == "/ramfs") {
90 n++; 90 n++;
91 curdisks.append(fs); 91 curdisks.append(fs);
92 QString d = me->mnt_dir; 92 QString d = me->mnt_dir;
93 curfs.append(d); 93 curfs.append(d);
94 QString mount = me->mnt_dir; 94 QString mount = me->mnt_dir;
95 mountList.append(mount); 95 mountList.append(mount);
96 QString t = me->mnt_type; 96 QString t = me->mnt_type;
97 fsT.append(t); 97 fsT.append(t);
98 if ( !disks.find(d) ) 98 if ( !disks.find(d) )
99 rebuild = TRUE; 99 rebuild = TRUE;
100 } 100 }
101 } 101 }
102 endmntent( mntfp ); 102 endmntent( mntfp );
103 } 103 }
104 if ( rebuild || n != (int)disks.count() ) { 104 if ( rebuild || n != (int)disks.count() ) {
105 disks.clear(); 105 disks.clear();
106 lines.clear(); 106 lines.clear();
107 delete vb; 107 delete vb;
108 vb = new QVBoxLayout( this, n > 3 ? 1 : 5 ); 108 vb = new QVBoxLayout( this, n > 3 ? 1 : 5 );
109 bool frst=TRUE; 109 bool frst=TRUE;
110 QStringList::ConstIterator it=curdisks.begin(); 110 QStringList::ConstIterator it=curdisks.begin();
111 QStringList::ConstIterator fsit=curfs.begin(); 111 QStringList::ConstIterator fsit=curfs.begin();
112 QStringList::ConstIterator fsmount=mountList.begin(); 112 QStringList::ConstIterator fsmount=mountList.begin();
113 QStringList::ConstIterator fsTit=fsT.begin(); 113 QStringList::ConstIterator fsTit=fsT.begin();
114 114
115 for (; it!=curdisks.end(); ++it, ++fsit) { 115 for (; it!=curdisks.end(); ++it, ++fsit) {
116 if ( !frst ) { 116 if ( !frst ) {
117 QFrame *f = new QFrame( this ); 117 QFrame *f = new QFrame( this );
118 vb->addWidget(f); 118 vb->addWidget(f);
119 f->setFrameStyle( QFrame::HLine | QFrame::Sunken ); 119 f->setFrameStyle( QFrame::HLine | QFrame::Sunken );
120 lines.append(f); 120 lines.append(f);
121 f->show(); 121 f->show();
122 } frst=FALSE; 122 } frst=FALSE;
123 QString humanname=*it; 123 QString humanname=*it;
124// qDebug(humanname); 124// qDebug(humanname);
125 if ( isCF(humanname) ) 125 if ( isCF(humanname) )
126 humanname = tr("CF Card: "+*fsmount+" "+*fsTit+" "); 126 humanname = tr("CF Card: "+*fsmount+" "+*fsTit+" ");
127 else if ( humanname == "/dev/hda1" ) 127 else if ( humanname == "/dev/hda1" )
128 humanname = tr("Hard Disk "+*fsmount+" "+*fsTit+" "); 128 humanname = tr("Hard Disk "+*fsmount+" "+*fsTit+" ");
129 else if ( humanname.left(9) == "/dev/mmcd" ) 129 else if ( humanname.left(9) == "/dev/mmcd" )
130 humanname = tr("SD Card "+*fsmount+" "+*fsTit+" "); 130 humanname = tr("SD Card "+*fsmount+" "+*fsTit+" ");
131 else if ( humanname.left(7) == "/dev/hd" ) 131 else if ( humanname.left(7) == "/dev/hd" )
132 humanname = tr("Hard Disk") + " " + humanname.mid(7)+" "+*fsmount+" "+*fsTit+" "; 132 humanname = tr("Hard Disk") + " " + humanname.mid(7)+" "+*fsmount+" "+*fsTit+" ";
133 else if ( humanname.left(7) == "/dev/sd" ) 133 else if ( humanname.left(7) == "/dev/sd" )
134 humanname = tr("SCSI Hard Disk") + " " + humanname.mid(7)+" "+*fsmount+" "+*fsTit+" "; 134 humanname = tr("SCSI Hard Disk") + " " + humanname.mid(7)+" "+*fsmount+" "+*fsTit+" ";
135 else if ( humanname == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" ) 135 else if ( humanname == "/dev/mtdblock1" || humanname == "/dev/mtdblock/1" )
136 humanname = tr("Int. Storage "+*fsmount+" "+*fsTit+"\n"); 136 humanname = tr("Int. Storage "+*fsmount+" "+*fsTit+"\n");
137 else if ( humanname.left(14) == "/dev/mtdblock/" ) 137 else if ( humanname.left(14) == "/dev/mtdblock/" )
138 humanname = tr("Int. Storage") + " " + humanname.mid(14)+" "+*fsmount+" "+*fsTit+" "; 138 humanname = tr("Int. Storage") + " " + humanname.mid(14)+" "+*fsmount+" "+*fsTit+" ";
139 else if ( humanname.left(13) == "/dev/mtdblock" ) 139 else if ( humanname.left(13) == "/dev/mtdblock" )
140 humanname = tr("Int. Storage") + " " + humanname.mid(13)+" "+*fsmount+" "+*fsTit+" "; 140 humanname = tr("Int. Storage") + " " + humanname.mid(13)+" "+*fsmount+" "+*fsTit+" ";
141 else if ( humanname.left(9) == "/dev/root" ) 141 else if ( humanname.left(9) == "/dev/root" )
142 humanname = tr("Int. Storage "+*fsmount+" "+*fsTit+" "); 142 humanname = tr("Int. Storage "+*fsmount+" "+*fsTit+" ");
143 // etc. 143 // etc.
144 MountInfo* mi = new MountInfo( *fsit, humanname, this ); 144 MountInfo* mi = new MountInfo( *fsit, humanname, this );
145 vb->addWidget(mi); 145 vb->addWidget(mi);
146 disks.insert(*fsit,mi); 146 disks.insert(*fsit,mi);
147 mi->show(); 147 mi->show();
148 fsmount++;fsTit++; 148 fsmount++;fsTit++;
149 } 149 }
150 vb->addStretch(); 150 vb->addStretch();
151 } else { 151 } else {
152 // just update them 152 // just update them
153 for (QDictIterator<MountInfo> i(disks); i.current(); ++i) 153 for (QDictIterator<MountInfo> i(disks); i.current(); ++i)
154 i.current()->updateData(); 154 i.current()->updateData();
155 } 155 }
156#endif 156#endif
157} 157}
158 158
159 159
160MountInfo::MountInfo( const QString &path, const QString &ttl, QWidget *parent, const char *name ) 160MountInfo::MountInfo( const QString &path, const QString &ttl, QWidget *parent, const char *name )
161 : QWidget( parent, name ), title(ttl) 161 : QWidget( parent, name ), title(ttl)
162{ 162{
163 qDebug("new path is "+path); 163 qDebug("new path is "+path);
164 fs = new FileSystem( path ); 164 fs = new FileSystem( path );
165 QVBoxLayout *vb = new QVBoxLayout( this, 3 ); 165 QVBoxLayout *vb = new QVBoxLayout( this, 3 );
166 166
167 totalSize = new QLabel( this ); 167 totalSize = new QLabel( this );
168 vb->addWidget( totalSize ); 168 vb->addWidget( totalSize );
169 169
170 data = new GraphData(); 170 data = new GraphData();
171 graph = new BarGraph( this ); 171 graph = new BarGraph( this );
172 graph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); 172 graph->setFrameStyle( QFrame::Panel | QFrame::Sunken );
173 vb->addWidget( graph, 1 ); 173 vb->addWidget( graph, 1 );
174 graph->setData( data ); 174 graph->setData( data );
175 175
176 legend = new GraphLegend( this ); 176 legend = new GraphLegend( this );
177 legend->setOrientation(Horizontal); 177 legend->setOrientation(Horizontal);
178 vb->addWidget( legend ); 178 vb->addWidget( legend );
179 legend->setData( data ); 179 legend->setData( data );
180 180
181 updateData(); 181 updateData();
182} 182}
183 183
184MountInfo::~MountInfo() 184MountInfo::~MountInfo()
185{ 185{
186 delete data; 186 delete data;
187 delete fs; 187 delete fs;
188} 188}
189 189
190void MountInfo::updateData() 190void MountInfo::updateData()
191{ 191{
192 fs->update(); 192 fs->update();
193 193
194 long mult = fs->blockSize() / 1024; 194 long mult = fs->blockSize() / 1024;
195 long div = 1024 / fs->blockSize(); 195 long div = 1024 / fs->blockSize();
196 if ( !mult ) mult = 1; 196 if ( !mult ) mult = 1;
197 if ( !div ) div = 1; 197 if ( !div ) div = 1;
198 long total = fs->totalBlocks() * mult / div; 198 long total = fs->totalBlocks() * mult / div;
199 long avail = fs->availBlocks() * mult / div; 199 long avail = fs->availBlocks() * mult / div;
200 long used = total - avail; 200 long used = total - avail;
201 totalSize->setText( title + tr(" : %1 kB").arg( total ) ); 201 totalSize->setText( title + tr(" : %1 kB").arg( total ) );
202 data->clear(); 202 data->clear();
203 data->addItem( tr("Used (%1 kB)").arg(used), used ); 203 data->addItem( tr("Used (%1 kB)").arg(used), used );
204 data->addItem( tr("Available (%1 kB)").arg(avail), avail ); 204 data->addItem( tr("Available (%1 kB)").arg(avail), avail );
205 graph->repaint( FALSE ); 205 graph->repaint( FALSE );
206 legend->update(); 206 legend->update();
207 graph->show(); 207 graph->show();
208 legend->show(); 208 legend->show();
209} 209}
210 210
211//--------------------------------------------------------------------------- 211//---------------------------------------------------------------------------
212 212
213FileSystem::FileSystem( const QString &p ) 213FileSystem::FileSystem( const QString &p )
214 : fspath( p ), blkSize(512), totalBlks(0), availBlks(0) 214 : fspath( p ), blkSize(512), totalBlks(0), availBlks(0)
215{ 215{
216 update(); 216 update();
217} 217}
218 218
219void FileSystem::update() 219void FileSystem::update()
220{ 220{
221#if defined(_OS_LINUX_) || defined(Q_OS_LINUX) 221#if defined(_OS_LINUX_) || defined(Q_OS_LINUX)
222 struct statfs fs; 222 struct statfs fs;
223 if ( !statfs( fspath.latin1(), &fs ) ) { 223 if ( !statfs( fspath.latin1(), &fs ) ) {
224 if( fspath.left(8) == "/mnt/ram") { //ugly hack openzaurus 224 blkSize = fs.f_bsize;
225 blkSize = fs.f_bsize; 225 totalBlks = fs.f_blocks;
226 totalBlks = fs.f_blocks; 226 availBlks = fs.f_bavail;
227 availBlks = fs.f_ffree; 227 } else {
228 } else { 228 blkSize = 0;
229 blkSize = fs.f_bsize; 229 totalBlks = 0;
230 totalBlks = fs.f_blocks; 230 availBlks = 0;
231 availBlks = fs.f_bavail; 231 }
232 }
233 } else {
234 blkSize = 0;
235 totalBlks = 0;
236 availBlks = 0;
237 }
238#endif 232#endif
239} 233}
240 234