Exemplo n.º 1
0
void Camera::for_each_file(const FileFunc& func) {
    std::lock_guard<std::mutex> g(mutex);
    int ret;
    CameraStorageInformation *storage_info;
    int len;
    if ((ret = gp_camera_get_storageinfo(camera, &storage_info, &len, ctx->context)) < GP_OK) {
        throw Exception("gp_camera_get_storageinfo", ret);
    }
    for (int i = 0; i < len; ++i) {
        CameraStorageInformation& info = storage_info[i];
        if (info.fields & GP_STORAGEINFO_BASE) {
            for_each_file_in_folder(func, info.basedir);
        }
    }
    free(storage_info);
}
Exemplo n.º 2
0
bool GPCamera::getFreeSpace(unsigned long& kBSize, unsigned long& kBAvail)
{
#ifdef HAVE_GPHOTO2
    // NOTE: This method depends of libgphoto2 2.4.0

    int                       nrofsinfos;
    CameraStorageInformation* sinfos = 0;

    d->status->cancel = false;
    int errorCode = gp_camera_get_storageinfo(d->camera, &sinfos, &nrofsinfos, d->status->context);

    if (errorCode != GP_OK)
    {
        qCDebug(DIGIKAM_IMPORTUI_LOG) << "Getting storage information not supported for this camera!";
        printGphotoErrorDescription(errorCode);
        return false;
    }

    for (int i = 0 ; i < nrofsinfos ; ++i)
    {
        if (sinfos[i].fields & GP_STORAGEINFO_FILESYSTEMTYPE)
        {
            switch(sinfos[i].fstype)
            {
                case GP_STORAGEINFO_FST_UNDEFINED:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage fstype: undefined";
                    break;
                case GP_STORAGEINFO_FST_GENERICFLAT:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage fstype: flat, all in one directory";
                    break;
                case GP_STORAGEINFO_FST_GENERICHIERARCHICAL:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage fstype: generic tree hierarchy";
                    break;
                case GP_STORAGEINFO_FST_DCF:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "DCIM style storage";
                    break;
            }
        }

        if (sinfos[i].fields & GP_STORAGEINFO_LABEL)
        {
            qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage label: " << QString::fromUtf8(sinfos[i].label);
        }

        if (sinfos[i].fields & GP_STORAGEINFO_DESCRIPTION)
        {
            qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage description: " << QString::fromUtf8(sinfos[i].description);
        }

        if (sinfos[i].fields & GP_STORAGEINFO_BASE)
        {
            qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage base-dir: " << QString::fromUtf8(sinfos[i].basedir);

            // TODO in order for this to work, the upload dialog needs to be fixed.
/*
            if(nrofsinfos == 1)
            {
                qCDebug(DIGIKAM_IMPORTUI_LOG) << "Only one storage, so setting storage directory to" << sinfos[i].basedir;
                m_path = QString(sinfos[i].basedir);
            }
*/
        }

        if (sinfos[i].fields & GP_STORAGEINFO_ACCESS)
        {
            switch (sinfos[i].access)
            {
                case GP_STORAGEINFO_AC_READWRITE:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage access: R/W";
                    break;

                case GP_STORAGEINFO_AC_READONLY:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage access: RO";
                    break;

                case GP_STORAGEINFO_AC_READONLY_WITH_DELETE:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage access: RO + Del";
                    break;

                default:
                    break;
            }
        }

        if (sinfos[i].fields & GP_STORAGEINFO_STORAGETYPE)
        {
            switch (sinfos[i].type)
            {
                case GP_STORAGEINFO_ST_FIXED_ROM:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage type: fixed ROM";
                    break;

                case GP_STORAGEINFO_ST_REMOVABLE_ROM:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage type: removable ROM";
                    break;

                case GP_STORAGEINFO_ST_FIXED_RAM:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage type: fixed RAM";
                    break;

                case GP_STORAGEINFO_ST_REMOVABLE_RAM:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage type: removable RAM";
                    break;

                case GP_STORAGEINFO_ST_UNKNOWN:
                default:
                    qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage type: unknown";
                    break;
            }
        }

        if (sinfos[i].fields & GP_STORAGEINFO_MAXCAPACITY)
        {
            kBSize += sinfos[i].capacitykbytes;
            qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage capacity: " << kBSize;
        }

        if (sinfos[i].fields & GP_STORAGEINFO_FREESPACEKBYTES)
        {
            kBAvail += sinfos[i].freekbytes;
            qCDebug(DIGIKAM_IMPORTUI_LOG) << "Storage free-space: " << kBAvail;
        }
     }


    return true;
#else
    Q_UNUSED(kBSize);
    Q_UNUSED(kBAvail);
    return false;
#endif /* HAVE_GPHOTO2 */
}