2 * This file is part of CameraPlus.
4 * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #include "fsmonitor.h"
22 #include <qmusbmode.h>
23 #include <sys/statvfs.h>
26 #define MIN_SPACE 100 * 1024 * 1024 // 100 MB
28 FSMonitor::FSMonitor(QObject *parent) :
29 QObject(parent), m_mode(new MeeGo::QmUSBMode(this)) {
31 QObject::connect(m_mode, SIGNAL(modeChanged(MeeGo::QmUSBMode::Mode)),
32 this, SLOT(modeChanged()));
35 m_mode->mountStatus(MeeGo::QmUSBMode::DocumentDirectoryMount)
36 .testFlag(MeeGo::QmUSBMode::ReadWriteMount);
39 FSMonitor::~FSMonitor() {
43 bool FSMonitor::isAvailable() const {
47 void FSMonitor::setAvailable(bool available) {
48 if (m_available != available) {
49 m_available = available;
50 emit availabilityChanged();
54 void FSMonitor::modeChanged() {
55 setAvailable(m_mode->mountStatus(MeeGo::QmUSBMode::DocumentDirectoryMount)
56 .testFlag(MeeGo::QmUSBMode::ReadWriteMount));
59 bool FSMonitor::hasFreeSpace(const QString& path) {
62 if (statvfs(path.toLocal8Bit().data(), &buf) == -1) {
63 std::perror("statvfs");
67 // If the user has a lot of free space (8 GB for example)
68 // then we will overflow the unsigned long int thus we use a 64 bits "int"
69 quint64 freeSpace = (quint64)buf.f_bsize * (quint64)buf.f_bavail;
70 return (freeSpace >= MIN_SPACE);