int mkdir(const std::string& folder, bool recursive){ #if defined(_WIN32)||defined(_WIN_32) int res = CreateDirectoryA(folder.c_str(),NULL); if (res==0){ if (GetLastError()==ERROR_PATH_NOT_FOUND && recursive){ std::string parfold = parentFolder(folder).name; if (parfold.size()<folder.size()){ mkdir(parfold,recursive); return mkdir(folder,false);//kinda silly, but should work just fine. } } else if (GetLastError()==ERROR_ALREADY_EXISTS){ return 0; } return -1; } HANDLE hDir = CreateFileA(folder.c_str(),READ_CONTROL|WRITE_DAC,0,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL); if(hDir == INVALID_HANDLE_VALUE) return FALSE; ACL* pOldDACL; PSECURITY_DESCRIPTOR pSD = NULL; GetSecurityInfo(hDir, SE_FILE_OBJECT , DACL_SECURITY_INFORMATION,NULL, NULL, &pOldDACL, NULL, &pSD); PSID pSid = NULL; SID_IDENTIFIER_AUTHORITY authNt = SECURITY_NT_AUTHORITY; AllocateAndInitializeSid(&authNt,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_USERS,0,0,0,0,0,0,&pSid); EXPLICIT_ACCESS ea={0}; ea.grfAccessMode = GRANT_ACCESS; ea.grfAccessPermissions = GENERIC_ALL; ea.grfInheritance = CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE; ea.Trustee.TrusteeType = TRUSTEE_IS_GROUP; ea.Trustee.TrusteeForm = TRUSTEE_IS_SID; ea.Trustee.ptstrName = (LPTSTR)pSid; ACL* pNewDACL = 0; DWORD err = SetEntriesInAcl(1,&ea,pOldDACL,&pNewDACL); if(pNewDACL) SetSecurityInfo(hDir,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL, NULL, pNewDACL, NULL); FreeSid(pSid); LocalFree(pNewDACL); LocalFree(pSD); LocalFree(pOldDACL); CloseHandle(hDir); return 1; #else return mkdir(folder.c_str()); #endif // _WIN32 }
int QDeclarativeFolderListModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAbstractListModel::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 6) qt_static_metacall(this, _c, _id, _a); _id -= 6; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< QUrl*>(_v) = folder(); break; case 1: *reinterpret_cast< QUrl*>(_v) = parentFolder(); break; case 2: *reinterpret_cast< QStringList*>(_v) = nameFilters(); break; case 3: *reinterpret_cast< SortField*>(_v) = sortField(); break; case 4: *reinterpret_cast< bool*>(_v) = sortReversed(); break; case 5: *reinterpret_cast< bool*>(_v) = showDirs(); break; case 6: *reinterpret_cast< bool*>(_v) = showDotAndDotDot(); break; case 7: *reinterpret_cast< bool*>(_v) = showOnlyReadable(); break; case 8: *reinterpret_cast< int*>(_v) = count(); break; } _id -= 9; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setFolder(*reinterpret_cast< QUrl*>(_v)); break; case 2: setNameFilters(*reinterpret_cast< QStringList*>(_v)); break; case 3: setSortField(*reinterpret_cast< SortField*>(_v)); break; case 4: setSortReversed(*reinterpret_cast< bool*>(_v)); break; case 5: setShowDirs(*reinterpret_cast< bool*>(_v)); break; case 6: setShowDotAndDotDot(*reinterpret_cast< bool*>(_v)); break; case 7: setShowOnlyReadable(*reinterpret_cast< bool*>(_v)); break; } _id -= 9; } else if (_c == QMetaObject::ResetProperty) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 9; } #endif // QT_NO_PROPERTIES return _id; }
int appendfile(const std::string& filename, const std::string& content, bool createDir){ if (createDir){ ufile tfile = parentFolder(filename); mkdir(tfile.name); } std::fstream file(filename.c_str(),std::ios::out|std::ios::binary|std::ios::app); if (!file.good()) return -1; file << content; file.close(); return 1; }
int savefile(const std::string& filename,const char* content, int size, bool createDir){ if (createDir){ ufile tfile = parentFolder(filename); mkdir(tfile.name); } std::fstream file(filename.c_str(),std::ios::out|std::ios::binary); if (!file.good()) return -1; file.write(content,size); int ret = file.good(); file.close(); return ret; }
int createLink(const std::string& name, const std::string& linkname, const std::string& linkdesc){ CoInitialize(NULL); //std::wstring wfn = s2ws(filename); //std::wstring wsn = s2ws(shortcutname); //std::wstring wsc = s2ws(shortcutdescr); //return (int) CreateLink(wfn.c_str(),wsn.c_str(),wsc.c_str()); std::string wd = parentFolder(name).name; if (wd==name || wd.size()==1){ wd = ""; } int ret = CreateLink(name.c_str(),linkname.c_str(),linkdesc.c_str(),wd.c_str()); CoUninitialize(); return ret; }
ufile ufile::parent(){ return parentFolder(*this); }
ufile parentFolder(const ufile& folder){ return parentFolder(folder.name); }
bb::ImageData ImageProcessor::start() { //qDebug() << "[ImageProcessor::start] m_imagePath: " << m_imagePath; bb::ImageData imageData; QImage image, swappedImage; QImageReader reader (m_imagePath); QSize scaledSize(ImageProcessor::THUMB_SIZE), originalSize = reader.size(); if(originalSize != ImageProcessor::THUMB_SIZE && originalSize.isValid()){ // now scale it filling the original rectangle by keeping aspect ratio scaledSize.scale(originalSize, Qt::KeepAspectRatio); // set the adjusted clipping rectangle in the middle of the original image QRect clipRect(0, 0, scaledSize.width(), scaledSize.height()); QPoint originalCenterPoint(originalSize.width() / 2, originalSize.height() / 2); clipRect.moveCenter(originalCenterPoint); reader.setClipRect(clipRect); // set requested target size of a thumbnail // as clipping rectangle is of same aspect ration as requestedSize no distortion should happen reader.setScaledSize(ImageProcessor::THUMB_SIZE); if(reader.read(&image) == false){ qWarning() << "[ImageProcessor::start] could not load image file! errorString: " << reader.errorString(); return imageData; } } // get the parent folder of the current image // 0 1 2 3 4 5 6 7 // E.g: /accounts/1000/appdata/com.willthrill.bb10.Wappy.testDev__bb10_Wappy92abc424/shared/photos/wappy/image.jpg QString filePath = reader.fileName(); int count = filePath.count("/"); QString parentFolderName = "/" + filePath.section("/", 5, count - 2, QString::SectionSkipEmpty); // discard file name + 1 QString fileName = "/" + filePath.section("/", -1); //qDebug() << "[ImageProcessor::start] parentFolderName: "<<parentFolderName<<", filePath: "<<filePath << ", count: " << count; // create the parent folder on the data directory if it doesn't exist. QDir parentFolder( QDir::homePath() + parentFolderName); if( !parentFolder.exists()){ parentFolder.mkpath("."); } // save the thumbnail QString p = QDir::homePath() + parentFolderName + fileName; //qDebug() << "[ImageProcessor::start] Saving thumbnail image. File path: " << p; bool ok = image.save(p,"jpg",50); if(!ok){ qWarning() << "[ImageProcessor::start] Could not save thumbnail image!"; } // Swap the image colors due to RGB bit representation swappedImage = image.rgbSwapped(); // Create the Cascades ImageData with the swapped image imageData = bb::ImageData::fromPixels(swappedImage.bits(), bb::PixelFormat::RGBX, swappedImage.width(), swappedImage.height(), swappedImage.bytesPerLine()); return imageData; }
int QDeclarativeFolderListModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAbstractListModel::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: folderChanged(); break; case 1: countChanged(); break; case 2: refresh(); break; case 3: inserted((*reinterpret_cast< const QModelIndex(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3]))); break; case 4: removed((*reinterpret_cast< const QModelIndex(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])),(*reinterpret_cast< int(*)>(_a[3]))); break; case 5: handleDataChanged((*reinterpret_cast< const QModelIndex(*)>(_a[1])),(*reinterpret_cast< const QModelIndex(*)>(_a[2]))); break; case 6: { bool _r = isFolder((*reinterpret_cast< int(*)>(_a[1]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; default: ; } _id -= 7; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< QUrl*>(_v) = folder(); break; case 1: *reinterpret_cast< QUrl*>(_v) = parentFolder(); break; case 2: *reinterpret_cast< QStringList*>(_v) = nameFilters(); break; case 3: *reinterpret_cast< SortField*>(_v) = sortField(); break; case 4: *reinterpret_cast< bool*>(_v) = sortReversed(); break; case 5: *reinterpret_cast< bool*>(_v) = showDirs(); break; case 6: *reinterpret_cast< bool*>(_v) = showDotAndDotDot(); break; case 7: *reinterpret_cast< bool*>(_v) = showOnlyReadable(); break; case 8: *reinterpret_cast< int*>(_v) = count(); break; } _id -= 9; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setFolder(*reinterpret_cast< QUrl*>(_v)); break; case 2: setNameFilters(*reinterpret_cast< QStringList*>(_v)); break; case 3: setSortField(*reinterpret_cast< SortField*>(_v)); break; case 4: setSortReversed(*reinterpret_cast< bool*>(_v)); break; case 5: setShowDirs(*reinterpret_cast< bool*>(_v)); break; case 6: setShowDotAndDotDot(*reinterpret_cast< bool*>(_v)); break; case 7: setShowOnlyReadable(*reinterpret_cast< bool*>(_v)); break; } _id -= 9; } else if (_c == QMetaObject::ResetProperty) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 9; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 9; } #endif // QT_NO_PROPERTIES return _id; }