Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <string>
- #include <float.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <dirent.h>
- #include <cstring>
- #include <windows.h>
- using namespace std;
- string strtolower(string str)
- {
- for(unsigned int i = 0; i < str.size(); i++)
- str[i]=tolower(str[i]);
- return str;
- }
- char tolower(char ch)
- {
- if(ch < 91 && ch > 64)
- return ch + 32;
- return ch;
- }
- long fileLength (const char * name)
- {
- ifstream file (name, ios::in|ios::binary);
- file.seekg (0, ios::end);
- return file.tellg();
- }
- vector<string> detectedfiles;
- string getFileExtension(const string filename)
- {
- unsigned int i = filename.size();
- while(i != 0 && filename[i] != '.')
- i--;
- if(i == 0) return " ";
- return filename.substr(i + 1, filename.size() - 1);
- }
- bool isValidName(string name)
- {
- string ext = getFileExtension(name);
- if(ext != "png" && ext != "jpg")
- return false;
- name = strtolower(name.substr(0, name.size() - 4));
- for(unsigned int i=0;i<detectedfiles.size();i++)
- if(name==detectedfiles[i]) return true;
- return false;
- }
- bool isValidExt(string ext)
- {
- if(ext == "avi" ||ext == "mp4")
- return true;
- return false;
- }
- bool loadFile()
- {
- ifstream file("detectedfiles.ini");
- if(file)
- {
- string line;
- while(getline(file, line)){
- detectedfiles.push_back(strtolower(line));
- }
- return true;
- }
- return false;
- }
- bool dirExists(const std::string& dirName_in)
- {
- DWORD ftyp = GetFileAttributesA(dirName_in.c_str());
- if (ftyp == INVALID_FILE_ATTRIBUTES)
- return false; //something is wrong with your path!
- if (ftyp & FILE_ATTRIBUTE_DIRECTORY)
- return true; // this is a directory!
- return false; // this is not a directory!
- }
- string GetOsuPath()
- {
- ifstream file("osupaths.ini");
- if(file)
- {
- string line;
- while(getline(file, line)){
- if(dirExists(line))
- return line;
- }
- }
- return " ";
- }
- vector<string> explode( const string &delimiter, const string &str)
- {
- vector<string> arr;
- int strleng = str.length();
- int delleng = delimiter.length();
- if (delleng==0)
- return arr;//no change
- int i=0;
- int k=0;
- while( i<strleng )
- {
- int j=0;
- while (i+j<strleng && j<delleng && str[i+j]==delimiter[j])
- j++;
- if (j==delleng)//found delimiter
- {
- arr.push_back( str.substr(k, i-k) );
- i+=delleng;
- k=i;
- }
- else
- {
- i++;
- }
- }
- arr.push_back( str.substr(k, i-k) );
- return arr;
- }
- vector<string> getMaps(char* path, bool printornot)
- {
- vector<string> mapvec;
- DIR *dir;
- struct dirent *ent;
- if((dir = opendir (path)) != NULL)
- {
- while((ent = readdir (dir)) != NULL)
- {
- if(ent->d_name[0] == '.')
- continue;
- char patha[256];
- sprintf(patha, "%s%s\\", path, ent->d_name);
- mapvec.push_back(patha);
- if(printornot) cout << ent->d_name << endl;
- }
- closedir(dir);
- if(printornot) cout << endl << mapvec.size() << " maps trouvees" << endl;
- }
- return mapvec;
- }
- int main()
- {
- if(!loadFile()){
- cout << "Erreur: impossible de charger la liste des fichiers a supprimer";
- return 0;
- }
- char osupath[256];
- string path = GetOsuPath(), line = "";
- if(path == " "){
- char* temp = getenv("APPDATA");
- sprintf(osupath, "%s\\..\\Local\\osu!\\Songs\\", temp);
- if(!dirExists(string(osupath))){
- cout << "Erreur: impossible de charger le chemin de votre osu!, entrez-le manuellement dans le fichier osupaths.ini";
- return 0;
- }
- }
- else{
- strcpy(osupath, path.c_str());
- sprintf(osupath, "%sSongs\\", osupath);
- }
- vector<char*> mapfolders;
- bool printforwait = true;
- cout << "osu!Cleaner par Kiloutre\nTapez !commands pour voir la liste des commandes\n";
- while(1)
- {
- getline(cin, line);
- vector<string> result=explode(" ", strtolower(line));
- if(result[0] == "!commands"){
- cout << "\n----- COMMANDES -----\n!clean [SKINS/VIDEO/ALL] - Permet de supprimer tous les skins ou video des beatmaps\n!exit - Arreter le programme\n\n";
- continue;
- }
- if(result[0] == "!exit")
- return 1;
- if(result[0] == "!clean")
- {
- if(result.size() == 1){
- cout << "\nUsage: !clean [SKIN/VIDEO/ALL]" << endl;
- continue;
- }
- if(result[1] == strtolower("skin")){
- vector<string> mapfolders;
- mapfolders = getMaps(osupath, printforwait);
- cout << "\nEtes-vous certain de vouloir supprimer les fichiers de skins inclus dans vos beatmaps ?\n";
- system("pause");
- unsigned int deletednumber = 0;
- float deletedsize = 0;
- unsigned int msize = mapfolders.size() - 1;
- for(unsigned int i = 0; i < msize; i++)
- {
- cout << i << " sur " << msize - 1 << " / " << deletednumber << " fichiers et " << (deletedsize/1000)/1000 << " MO supprimes" << endl;
- char path[256];
- strcpy(path, mapfolders[i].c_str());
- DIR *dir;
- struct dirent *ent;
- if((dir = opendir (path)) != NULL)
- {
- while((ent = readdir (dir)) != NULL)
- {
- if(ent->d_name[0] == '.')
- continue;
- if(isValidName(ent->d_name))
- {
- char filename[256];
- sprintf(filename, "%s%s", path, ent->d_name);
- float filesize = (float)fileLength(filename);
- if(!remove(filename)){
- deletedsize+=filesize;
- deletednumber++;
- }
- }
- }
- closedir(dir);
- }
- }
- cout << "\n\nNettoyage termine. " << deletednumber << " fichiers ont ete supprimes, " << (deletedsize/1000)/1000 << " MO on ete liberes." << endl;
- continue;
- }
- if(result[1] == strtolower("video")){
- vector<string> mapfolders;
- mapfolders = getMaps(osupath, printforwait);
- cout << "\nEtes-vous certain de vouloir supprimer les videos inclues dans vos beatmaps ?\n";
- system("pause");
- unsigned int deletednumber = 0;
- float deletedsize = 0;
- unsigned int msize = mapfolders.size() - 1;
- for(unsigned int i = 0; i < msize; i++)
- {
- cout << i << " sur " << msize - 1 << " / " << deletednumber << " fichiers et " << (deletedsize/1000)/1000 << " MO supprimes" << endl;
- char path[256];
- strcpy(path, mapfolders[i].c_str());
- DIR *dir;
- struct dirent *ent;
- if((dir = opendir (path)) != NULL)
- {
- while((ent = readdir (dir)) != NULL)
- {
- if(ent->d_name[0] == '.')
- continue;
- if(isValidExt(getFileExtension(ent->d_name)))
- {
- char filename[256];
- sprintf(filename, "%s%s", path, ent->d_name);
- float filesize = (float)fileLength(filename);
- if(!remove(filename)){
- deletedsize+=filesize;
- deletednumber++;
- }
- }
- }
- closedir(dir);
- }
- }
- cout << "\n\nNettoyage termine. " << deletednumber << " fichiers ont ete supprimes, " << (deletedsize/1000)/1000 << " MO on ete liberes." << endl;
- continue;
- }
- if(result[1] == strtolower("all")){
- vector<string> mapfolders;
- mapfolders = getMaps(osupath, printforwait);
- cout << "\nEtes-vous certain de vouloir supprimer les fichiers de skins et videos inclus dans vos beatmaps ?\n";
- system("pause");
- unsigned int deletednumber = 0;
- float deletedsize = 0;
- unsigned int msize = mapfolders.size() - 1;
- for(unsigned int i = 0; i < msize; i++)
- {
- cout << i << " sur " << msize - 1 << " / " << deletednumber << " fichiers et " << (deletedsize/1000)/1000 << " MO supprimes" << endl;
- char path[256];
- strcpy(path, mapfolders[i].c_str());
- DIR *dir;
- struct dirent *ent;
- if((dir = opendir (path)) != NULL)
- {
- while((ent = readdir (dir)) != NULL)
- {
- if(ent->d_name[0] == '.')
- continue;
- if(isValidName(ent->d_name) || isValidExt(getFileExtension(ent->d_name)))
- {
- char filename[256];
- sprintf(filename, "%s%s", path, ent->d_name);
- float filesize = (float)fileLength(filename);
- if(!remove(filename)){
- deletedsize+=filesize;
- deletednumber++;
- }
- }
- }
- closedir(dir);
- }
- }
- cout << "\n\nNettoyage termine. " << deletednumber << " fichiers ont ete supprimes, " << (deletedsize/1000)/1000 << " MO on ete liberes." << endl;
- continue;
- }
- cout << "\nUsage: !clean [SKIN/VIDEO/ALL]" << endl;
- continue;
- }
- cout << "Commande inconnue ! Tapez !commands pour voir la liste des commandes\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement