diff options
author | Oskar <[email protected]> | 2024-10-18 14:09:15 +0200 |
---|---|---|
committer | Oskar <[email protected]> | 2024-10-18 14:09:15 +0200 |
commit | 058fecf6ae7090c2f39cfcdf765697e39bf568b4 (patch) | |
tree | 70cf0318ae92de9e7fa5207b22ad945831e342f7 /trashsystem2.cpp | |
parent | 53f0b348c00e6c6fd2671acea984b842a87039c4 (diff) |
added ifs for all options, removed options -v and -t. Made function to check for and created trashsys directories. Wrote general structure of main(). It's based on trashsys version 1 main and pretty much the same in the steps it takes
Diffstat (limited to 'trashsystem2.cpp')
-rw-r--r-- | trashsystem2.cpp | 171 |
1 files changed, 148 insertions, 23 deletions
diff --git a/trashsystem2.cpp b/trashsystem2.cpp index b025a69..7ceb816 100644 --- a/trashsystem2.cpp +++ b/trashsystem2.cpp @@ -1,6 +1,7 @@ #include <iostream> #include "trashsystem2.hpp" #include <unistd.h> +#include <cstdio> /* * @@ -11,6 +12,11 @@ * in C++ i hope to avoid the bugs and code smell * that eventually cropped up in the last project. * + * Some of the structure is very much based on + * Version 1 of the Trashing System. A lot of the main + * function and usage of getopt will be very similar + * and based off the code from Version 1. + * * While i am optimistic at this point my pessimism * will probably prove me wrong because i will most * likely encounter other problems that will give @@ -18,8 +24,87 @@ * */ +extern const TS_FUNCTION_RESULT FUNCTION_FAILURE; +extern const TS_FUNCTION_RESULT FUNCTION_SUCCESS; char *g_argv = nullptr; +int handle_ynf (const bool y_used, const bool n_used, const bool f_used) { + + int choice_mode_ynf = MODE_NORMAL; + if (n_used == true) { choice_mode_ynf = MODE_NO; } + if (y_used == true) { choice_mode_ynf = MODE_YES; } + if (f_used == true) { choice_mode_ynf = MODE_FORCE; } + + return choice_mode_ynf; +} + + +int choice (const int mode) { + + char choice; + char modechoice; + do { + if (mode == MODE_NORMAL) { std::cout << "[Y / N] ? " << std::ends; } + if (mode == MODE_YES) { std::cout << "[Y / n] ? " << std::ends; } + if (mode == MODE_NO) { std::cout << "[y / N] ? " << std::ends;; } + if (mode == MODE_FORCE) { return 0; } + + choice = std::getchar(); + if (choice == '\n' && mode == MODE_YES) { modechoice = 'Y'; choice = modechoice; goto modeskip;} + if (choice == '\n' && mode == MODE_NO) { modechoice = 'N'; choice = modechoice; goto modeskip;} + if (choice == '\n' && mode == MODE_NORMAL) { continue; } + + while ('\n' != std::getchar()); + + } while ( (choice != 'Y') && (choice != 'y') && (choice != 'N') && (choice != 'n') ); + + modeskip: + if ((choice == 'Y') || (choice == 'y')) { + return 0; + } + + if ((choice == 'N') || (choice == 'n')) { + return 1; + } + + return FUNCTION_FAILURE; // Should never happen +} + +TS_FUNCTION_RESULT create_ts_dirs(initial_path_info &ipi) { + + if(std::filesystem::exists(ipi.rget_ts())) { + DEBUG_STREAM( << ipi.rget_ts() << " exists." << std::endl); + } else { + if(std::filesystem::create_directory(ipi.rget_ts()) == false) { + return FUNCTION_FAILURE; + } else { + DEBUG_STREAM( << ipi.rget_ts() << " was created." << std::endl); + } + } + + if(std::filesystem::exists(ipi.rget_log())) { + DEBUG_STREAM( << ipi.rget_log() << " exists." << std::endl); + } else { + if(std::filesystem::create_directory(ipi.rget_log()) == false) { + return FUNCTION_FAILURE; + } else { + DEBUG_STREAM( << ipi.rget_log() << " was created." << std::endl); + } + } + + if(std::filesystem::exists(ipi.rget_trd())) { + DEBUG_STREAM( << ipi.rget_trd() << " exists." << std::endl); + } else { + if(std::filesystem::create_directory(ipi.rget_trd()) == false) { + return FUNCTION_FAILURE; + } else { + DEBUG_STREAM( << ipi.rget_trd() << " was created." << std::endl); + } + } + + return FUNCTION_SUCCESS; +} + inline void usage_out(std::ostream &out) { out << USAGE << std::ends; @@ -49,9 +134,7 @@ int main (int argc, char **argv) { int h_mtx = 0; bool y_used = false; bool n_used = false; - bool v_used = false; bool f_used = false; - bool t_used = false; bool l_used = false; bool L_used = false; bool c_used = false; @@ -59,7 +142,7 @@ int main (int argc, char **argv) { bool R_used = false; bool h_used = false; int opt = 0; - while((opt = getopt(argc, argv, "ynvfatlLcCR:h")) != -1) { + while((opt = getopt(argc, argv, "ynfatlLcCR:h")) != -1) { switch(opt) { case 'y': @@ -74,22 +157,12 @@ int main (int argc, char **argv) { n_used = true; break; - case 'v': - - v_used = true; - - break; case 'f': f_mtx = 1; f_used = true; break; - case 't': - - t_used = true; - - break; case 'l': l_mtx = 1; @@ -129,11 +202,10 @@ int main (int argc, char **argv) { } } - DEBUG_STREAM(<< "Used options [ynvftlLcCRh]: " - << y_used << n_used << v_used - << f_used << t_used << l_used - << L_used << c_used << C_used - << R_used << h_used << std::endl); + DEBUG_STREAM(<< "Used options [ynflLcCRh]: " + << y_used << n_used << f_used + << l_used << L_used << c_used + << C_used << R_used << h_used << std::endl); if((R_mtx + C_mtx + c_mtx + L_mtx + l_mtx + h_mtx) > 1) { usage_out(std::cerr); return EXIT_FAILURE; @@ -151,13 +223,66 @@ int main (int argc, char **argv) { if(h_used == true) { usage_out_long(std::cout); + DEBUG_STREAM( << "-h" << std::endl); + return EXIT_SUCCESS; + } + + int choice_mode = handle_ynf(y_used, n_used, f_used); + initial_path_info ipi; + if(ipi.is_fail()) { + DEBUG_STREAM( << "ipi.isfail():" << ipi.is_fail() << std::endl); + return EXIT_FAILURE; + } + + DEBUG_STREAM( << "ipi: \n" + << ipi.get_uh() << "\n" + << ipi.get_uh_ws() << "\n" + << ipi.get_ts() << "\n" + << ipi.get_ts_ws() << "\n" + << ipi.get_trd() << "\n" + << ipi.get_trd_ws() << "\n" + << ipi.get_log() << "\n" + << ipi.get_log_ws() << std::endl); + + if(create_ts_dirs(ipi) == FUNCTION_FAILURE) { + std::cerr << g_argv << ": Error: trashsys directories could not be created." << std::endl; + DEBUG_STREAM( << "create_ts_dirs: FUNCTION_FAILURE" << std::endl); + return EXIT_FAILURE; + } + + if(R_used == true) { + DEBUG_STREAM( << "-R" << std::endl); return EXIT_SUCCESS; } - if(y_used || n_used || v_used || f_used || t_used) {} - std::cout << "Smoketest" << std::endl; - std::cout << argc << std::endl; - std::cout << argv[0] << std::endl; - std::cout << BUF_SIZE_1MIB << std::endl; + if(c_used == true) { + DEBUG_STREAM( << "-c" << std::endl); + return EXIT_SUCCESS; + } + + if(C_used == true) { + DEBUG_STREAM( << "-C" << std::endl); + choice(choice_mode); + return EXIT_SUCCESS; + } + + if(l_used == true || L_used == true) { + if(l_used) { + DEBUG_STREAM( << "-l" << std::endl); + } + + if(L_used) { + DEBUG_STREAM( << "-L" << std::endl); + } + + return EXIT_SUCCESS; + } + + int index = 0; + for (index = optind ; index < argc ; index++) { // Actual loop that trashes files etc + std::filesystem::path file_to_trash = argv[index]; + std::cout << file_to_trash << std::endl; + } + return 0; } |