mirror of
https://github.com/mrfluffy-dev/fsorter.git
synced 2026-01-17 02:50:33 +00:00
Merge pull request #1 from ZastianPretorius/mager-rebuild
Mager Rebuild
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,3 +5,4 @@ tmp/
|
||||
fsorter
|
||||
.ccls-cache/
|
||||
CMakeFiles/
|
||||
settings.conf
|
||||
|
||||
312
main.cpp
312
main.cpp
@@ -1,192 +1,152 @@
|
||||
#include <iostream>
|
||||
#include <filesystem>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
//#include <bits/stdc++.h>
|
||||
#include <fstream>
|
||||
using namespace std;
|
||||
namespace fs = filesystem;
|
||||
string path;
|
||||
int numpaths;
|
||||
string searpath(){
|
||||
string der;
|
||||
cout<< "what is the directory you want to search?:\t";
|
||||
cin >> der;
|
||||
return der;
|
||||
std::string musicTypes[] = {".mp3",".wav"};
|
||||
std::string pictureType[] = {".jpg","jpeg","png"};
|
||||
namespace fs = std::filesystem;
|
||||
std::string home = getenv("HOME");
|
||||
std::string settingsPath = home+"/.config/fsorter/settings.conf";
|
||||
std::string sortingPath = fs::current_path();
|
||||
class typeAndPaths{
|
||||
public:
|
||||
std::string type;
|
||||
std::string path;
|
||||
std::vector<std::string> extentions;
|
||||
};
|
||||
|
||||
void writeSettins()
|
||||
{
|
||||
std::ofstream settings(settingsPath);
|
||||
settings << "Picture=\n"+ home +"/Pictures/\n.jpg,.jpeg,.png," << std::endl;
|
||||
settings << "Music=\n"+home+"/Music/\n.mp3,.wav," << std::endl;
|
||||
settings << "Video=\n"+home+"/Videos/\n.mp4," << std::endl;
|
||||
settings << "Arcive=\n"+home+"/Documents/Compressed/\n.zip,.rar,.7z," << std::endl;
|
||||
settings.close();
|
||||
}
|
||||
|
||||
// string* getsettings(){
|
||||
// ifstream myfile;
|
||||
// myfile.open("settings.txt");
|
||||
// string str = "";
|
||||
// int i = 0;
|
||||
// if (myfile.is_open()) {
|
||||
// while (getline(myfile, str)) {
|
||||
// if (str.find("^")!= string::npos){
|
||||
// i += 1;
|
||||
// }
|
||||
// }
|
||||
// myfile.close();
|
||||
// }
|
||||
// myfile.open("settings.txt");
|
||||
// if (myfile.is_open()) {
|
||||
// cout << i << "\n";
|
||||
// string* fSettings = new string[i];
|
||||
// i = 0;
|
||||
// while (getline(myfile, str)) {
|
||||
// fSettings[i] = str;
|
||||
// i += 1;
|
||||
// }
|
||||
// numpaths = i;
|
||||
// myfile.close();
|
||||
// return fSettings;
|
||||
// }
|
||||
// }
|
||||
std::vector<std::string> readSettings()
|
||||
{
|
||||
if(!fs::exists(settingsPath))
|
||||
{
|
||||
fs::create_directory(home + "/.config/fsorter/");
|
||||
}
|
||||
std::ifstream settings(settingsPath);
|
||||
std::vector<std::string> listOfPaths;
|
||||
std::string setting;
|
||||
// creates a default settins file
|
||||
if(!settings)
|
||||
{
|
||||
writeSettins();
|
||||
}
|
||||
if(settings)
|
||||
{
|
||||
while(getline(settings, setting))
|
||||
{
|
||||
listOfPaths.push_back(setting);
|
||||
}
|
||||
}
|
||||
settings.close();
|
||||
return listOfPaths;
|
||||
}
|
||||
std::vector<typeAndPaths> declarePaths(std::vector<std::string> listOfPaths)
|
||||
{
|
||||
typeAndPaths Paths;
|
||||
std::vector<typeAndPaths> paths;
|
||||
for (int i = 0; i < listOfPaths.size(); i+=3)
|
||||
{
|
||||
listOfPaths[i].pop_back();
|
||||
Paths.type = listOfPaths[i];
|
||||
Paths.path = listOfPaths[i+1];
|
||||
std::string stringExtentions = listOfPaths[i+2];
|
||||
std::vector<std::string> extentions;
|
||||
char temp;
|
||||
std::string tempWord;
|
||||
int counter = 0;
|
||||
for (int i = 0; i < stringExtentions.size(); i++) {
|
||||
temp = stringExtentions[i];
|
||||
if(temp != ',')
|
||||
{
|
||||
|
||||
|
||||
void search() {
|
||||
path = searpath();
|
||||
if (fs::exists(path)) {
|
||||
for (const auto &entry : fs::directory_iterator(path)) {
|
||||
if (entry.path().string().find("/.") == string::npos) {
|
||||
|
||||
if (entry.path().has_extension()) {
|
||||
cout << entry.path() << std::endl;
|
||||
//// check if it is video file
|
||||
if (entry.path().extension() == ".mp4" || entry.path().extension() == ".mkv") {
|
||||
fs::rename(entry.path().string(), "/home/mrfluffy/Videos/" + entry.path().filename().string());
|
||||
} else if (entry.path().extension() == ".jpeg" || entry.path().extension() == ".jpg" ||
|
||||
entry.path().extension() == ".png") {
|
||||
fs::rename(entry.path().string(),
|
||||
"/home/mrfluffy/Pictures/" + entry.path().filename().string());
|
||||
tempWord.push_back(temp);
|
||||
}
|
||||
else if (entry.path().extension() == ".mp3" ){
|
||||
fs::rename(entry.path().string(),
|
||||
"/home/mrfluffy/Music/" + entry.path().filename().string());
|
||||
else
|
||||
{
|
||||
extentions.push_back(tempWord);
|
||||
tempWord = "";
|
||||
counter++;
|
||||
}
|
||||
else if (entry.path().extension() == ".pdf") {
|
||||
fs::rename(entry.path().string(),
|
||||
"/home/mrfluffy/Documents/PDF/" + entry.path().filename().string());
|
||||
} else if (entry.path().extension() == ".docx") {
|
||||
fs::rename(entry.path().string(),
|
||||
"/home/mrfluffy/Documents/DOCX/" + entry.path().filename().string());
|
||||
} else if (entry.path().extension() == ".jar") {
|
||||
fs::rename(entry.path().string(),
|
||||
"/home/mrfluffy/Documents/JAR/" + entry.path().filename().string());
|
||||
} else if (entry.path().extension() == ".zip" || entry.path().extension() == ".rar" ||
|
||||
entry.path().extension() == ".zst" || entry.path().extension() == ".gz" || entry.path().extension() == ".xz"){
|
||||
fs::rename(entry.path().string(),
|
||||
"/home/mrfluffy/Documents/Compressed/" + entry.path().filename().string());
|
||||
} else if (entry.path().extension() == ".iso") {
|
||||
fs::rename(entry.path().string(),
|
||||
"/home/mrfluffy/Documents/DiscImages/" + entry.path().filename().string());
|
||||
}
|
||||
Paths.extentions = extentions;
|
||||
paths.push_back(Paths);
|
||||
}
|
||||
return paths;
|
||||
}
|
||||
void checkSettingsPaths(std::vector<typeAndPaths> Paths)
|
||||
{
|
||||
for (int i = 0; i < Paths.size(); i++)
|
||||
{
|
||||
if(fs::exists(Paths[i].path))
|
||||
{
|
||||
std::cout << "Yes\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
bool valid = false;
|
||||
while (!valid) {
|
||||
char awnser;
|
||||
std::cout << "would you like to create y=yes, n=no : " << Paths[i].path << "\t";
|
||||
std::cin >> awnser;
|
||||
std::cout << '\n';
|
||||
if(tolower(awnser) == 'y')
|
||||
{
|
||||
fs::create_directory(Paths[i].path);
|
||||
std::cout << "Directorry " << Paths[i].path << " was created\n";
|
||||
valid = true;
|
||||
}
|
||||
else if (tolower(awnser) == 'n')
|
||||
{
|
||||
std::cout << "Directory" << Paths[i].path <<" was not created\n";
|
||||
valid = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout << "pleas provide valid awnser" << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
cout << "Enter valid directory.\n";
|
||||
search();
|
||||
}
|
||||
}
|
||||
void changepath(string nepathS){
|
||||
string newpath;
|
||||
fstream myfile;
|
||||
myfile.open("settings.txt");
|
||||
string str = "";
|
||||
int i = 0;
|
||||
if (myfile.is_open()) {
|
||||
while (getline(myfile, str)) {
|
||||
if (str.find("^")!= string::npos){
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
myfile.close();
|
||||
}
|
||||
myfile.open("settings.txt");
|
||||
if (myfile.is_open()){
|
||||
cout << i << "\n";
|
||||
string settings[i];
|
||||
i=0;
|
||||
while (getline(myfile, str)) {
|
||||
settings[i] = str;
|
||||
i += 1;
|
||||
}
|
||||
myfile.close();
|
||||
ofstream temp("temp.txt");
|
||||
for (int j = 0; j < i; ++j) {
|
||||
if (settings[j].find(nepathS)!= string::npos){
|
||||
cout << "Enter new path.:\t";
|
||||
cin >> newpath;
|
||||
settings[j] = nepathS + " " + newpath;
|
||||
}
|
||||
int t = j;
|
||||
temp << settings[t] + "\n";
|
||||
}
|
||||
temp.close();
|
||||
remove("settings.txt");
|
||||
rename("temp.txt","settings.txt");
|
||||
}
|
||||
return;
|
||||
}
|
||||
void settings(){
|
||||
// system("clear");
|
||||
cout << "Change output location for.\n";
|
||||
cout << "1. Videos\n";
|
||||
cout << "2. Music\n";
|
||||
cout << "3. Pictures\n";
|
||||
cout << "4. Pdf\n";
|
||||
cout << "5. Docx\n";
|
||||
cout << "6. Jar\n";
|
||||
cout << "7. Disc Images\n";
|
||||
int settingmenu;
|
||||
cin >> settingmenu;
|
||||
switch (settingmenu) {
|
||||
case 1:{
|
||||
changepath("^Videos");
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
changepath("^Music");
|
||||
break;
|
||||
case 3:
|
||||
changepath("^Pictures");
|
||||
break;
|
||||
case 4:
|
||||
changepath("^Pdf");
|
||||
break;
|
||||
case 5:
|
||||
changepath("^Docx");
|
||||
break;
|
||||
case 6:
|
||||
changepath("^Jar");
|
||||
break;
|
||||
case 7:
|
||||
changepath("^DiscIMage");
|
||||
break;
|
||||
}
|
||||
}
|
||||
int main() {
|
||||
// system("clear");
|
||||
cout << "1. Sort a directory.\n";
|
||||
cout << "2. settings.\n";
|
||||
cout << "3. exit.\n";
|
||||
int menu;
|
||||
cin >> menu;
|
||||
switch (menu) {
|
||||
case 1:{
|
||||
search();
|
||||
// string* settingslist = getsettings();
|
||||
// for (int i = 0; i < numpaths; ++i) {
|
||||
// cout << settingslist[i] << "\n";
|
||||
// }
|
||||
main();
|
||||
}
|
||||
case 2:
|
||||
settings();
|
||||
main();
|
||||
case 3:
|
||||
exit(3);
|
||||
}
|
||||
}
|
||||
|
||||
void sortPath(std::string path, std::vector<typeAndPaths> Paths)
|
||||
{
|
||||
for(auto const& file: fs::directory_iterator{path})
|
||||
{
|
||||
if(file.path().has_extension())
|
||||
{
|
||||
std::cout << file.path().extension() << '\n';
|
||||
for (int i = 0; i < Paths.size(); i++) {
|
||||
for (int x = 0; x < Paths[i].extentions.size(); x++) {
|
||||
if(Paths[i].extentions[x] == file.path().extension())
|
||||
{
|
||||
fs::rename(file.path().string(), Paths[i].path + file.path().filename().string());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::vector<std::string> listOfPaths = readSettings();
|
||||
std::vector<typeAndPaths> Paths = declarePaths(listOfPaths);
|
||||
checkSettingsPaths(Paths);
|
||||
sortPath(sortingPath, Paths);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user