QString FileNode::parent_path() const { QStringList path; const DirNode* parent = m_parent; while(parent && !parent->is_root()) { path.prepend(parent->filename()); parent = parent->m_parent; } return correct_path(QDir::fromNativeSeparators(path.join(QDir::separator()))); }
string copy_prepare(string appfolder, string operation, string foldername, string fw_folder, string app) { DIR *dp; struct dirent *dirp; int findex=0, mountblind=0, numfiles_total=0, numfiles_current=1, j=0, i=0, showprogress=0; double copy_totalsize=0, copy_currentsize=0, source_size=0, dest_size=0, freespace_size=0; string source_paths[100], dest_paths[100], check_paths[100]; string check_path, sourcefile, destfile, filename, dest, source, title; string *files_list = NULL, *final_list_source = NULL, *final_list_dest = NULL; //Pointer for an array to hold the filenames. string ret=""; if (operation=="backup") { check_path=appfolder+"/apps/"+app+"/"+fw_folder; dp = opendir (check_path.c_str()); if (dp == NULL) return "Cannot open directory "+check_path; while ( (dirp = readdir(dp) ) ) { if ( strcmp(dirp->d_name, ".") != 0 && strcmp(dirp->d_name, "..") != 0 && strcmp(dirp->d_name, "") != 0) { if (dirp->d_type == DT_DIR) { check_paths[findex]=check_path+"/"+dirp->d_name; source_paths[findex]=correct_path(dirp->d_name,2); dest_paths[findex]=appfolder+"/backups/"+foldername+"/"+dirp->d_name; if (source_paths[findex].find("dev_blind")!=string::npos) mountblind=1; findex++; } //check zip files } } closedir(dp); title="Backing up files ..."; } else if (operation=="restore") { check_path=appfolder+"/backups/"+foldername; dp = opendir (check_path.c_str()); if (dp == NULL) return "Cannot open directory "+check_path; while ( (dirp = readdir(dp) ) ) { if ( strcmp(dirp->d_name, ".") != 0 && strcmp(dirp->d_name, "..") != 0 && strcmp(dirp->d_name, "") != 0 && dirp->d_type == DT_DIR) { source_paths[findex]=check_path + "/" + dirp->d_name; dest_paths[findex]=correct_path(dirp->d_name,2); if (dest_paths[findex].find("dev_blind")!=string::npos) mountblind=1; findex++; } } closedir(dp); title="Restoring files ..."; } else if (operation=="install") { check_path=appfolder+"/apps/"+app+"/"+fw_folder; dp = opendir (check_path.c_str()); if (dp == NULL) return "Cannot open directory "+check_path; while ( (dirp = readdir(dp) ) ) { if ( strcmp(dirp->d_name, ".") != 0 && strcmp(dirp->d_name, "..") != 0 && strcmp(dirp->d_name, "") != 0 && dirp->d_type == DT_DIR) { source_paths[findex]=check_path + "/" + dirp->d_name; dest_paths[findex]=correct_path(dirp->d_name,2); if (dest_paths[findex].find("dev_blind")!=string::npos) mountblind=1; findex++; } //check zip files } closedir(dp); title="Copying files ..."; } if (mountblind==1) { if (is_dev_blind_mounted()!=0) mount_dev_blind(); if (is_dev_blind_mounted()!=0) return "Dev_blind not mounted!"; if (exists("/dev_flash/vsh/resource/explore/xmb/xmbmp.cfg")!=0) create_file("/dev_blind/vsh/resource/explore/xmb/xmbmp.cfg"); } //count files final_list_source = new string[5000]; final_list_dest = new string[5000]; for(j=0;j<findex;j++) { if (operation=="backup") check_path=check_paths[j]; else check_path=source_paths[j]; //Mess.Dialog(MSG_OK,("check_path: "+check_path).c_str()); files_list=recursiveListing(check_path); i=0; while (strcmp(files_list[i].c_str(),"") != 0) { files_list[i].replace(files_list[i].find(check_path), check_path.size()+1, ""); sourcefile=source_paths[j]+"/"+files_list[i]; destfile=dest_paths[j]+"/"+files_list[i]; //Mess.Dialog(MSG_OK,(operation+"\nsource: "+sourcefile+"\ndest:"+destfile).c_str()); if (!(operation=="backup" && exists(sourcefile.c_str())!=0)) { copy_totalsize+=get_filesize(sourcefile.c_str()); final_list_source[numfiles_total]=sourcefile; final_list_dest[numfiles_total]=destfile; filename=final_list_source[i].substr(final_list_source[i].find_last_of("/")+1); source=final_list_source[i].substr(0,final_list_source[i].find_last_of("/")+1); dest=final_list_dest[i].substr(0,final_list_dest[i].find_last_of("/")+1); //Mess.Dialog(MSG_OK,(operation+"\nsource: "+final_list_source[numfiles_total]+"\ndest:"+final_list_dest[numfiles_total]).c_str()); if (dest.find("dev_blind")!=string::npos) mountblind=1; numfiles_total+=1; } i++; } } //only show progress bar if total size bigger than 512KB if (copy_totalsize < 1048576/2) showprogress=-1; //copy files i=0; if (showprogress==0) Mess.SingleProgressBarDialog(title.c_str(), "Processing files..."); while (strcmp(final_list_source[i].c_str(),"") != 0) { sourcefile=final_list_source[i]; destfile=final_list_dest[i]; source_size=get_filesize(sourcefile.c_str()); dest_size=get_filesize(destfile.c_str()); filename=final_list_source[i].substr(final_list_source[i].find_last_of("/")+1); source=final_list_source[i].substr(0,final_list_source[i].find_last_of("/")+1); dest=final_list_dest[i].substr(0,final_list_dest[i].find_last_of("/")+1); freespace_size=get_free_space(dest.c_str())+dest_size; if (source_size >= freespace_size) { if (showprogress==0) Mess.ProgressBarDialogAbort(); return "Not enough space to copy the file ("+filename+") to destination path ("+dest+")."; } else { if (mkdir_full(dest)!=0) { if (showprogress==0) Mess.ProgressBarDialogAbort(); return "Could not create directory ("+dest+")."; } ret=copy_file(title, source.c_str(), dest.c_str(), filename.c_str(),source_size, copy_currentsize, copy_totalsize, numfiles_current, numfiles_total,0,showprogress); if (ret != "") { if (showprogress==0) Mess.ProgressBarDialogAbort(); return ret; } } copy_currentsize=copy_currentsize+source_size; numfiles_current++; i++; } if (showprogress==0) Mess.ProgressBarDialogAbort(); //check files i=0; copy_currentsize=0; numfiles_current=1; title="Checking files ..."; if (showprogress==0) Mess.SingleProgressBarDialog(title.c_str(), "Processing files..."); while (strcmp(final_list_source[i].c_str(),"") != 0) { sourcefile=final_list_source[i]; destfile=final_list_dest[i]; source_size=get_filesize(sourcefile.c_str()); filename=final_list_source[i].substr(final_list_source[i].find_last_of("/")+1); source=final_list_source[i].substr(0,final_list_source[i].find_last_of("/")+1); dest=final_list_dest[i].substr(0,final_list_dest[i].find_last_of("/")+1); ret=copy_file(title, source.c_str(), dest.c_str(), filename.c_str(),source_size, copy_currentsize, copy_totalsize, numfiles_current, numfiles_total,1,showprogress); if (ret != "") { if (showprogress==0) Mess.ProgressBarDialogAbort(); return ret; } copy_currentsize=copy_currentsize+source_size; numfiles_current++; i++; } if (showprogress==0) Mess.ProgressBarDialogAbort(); return ""; }