add create file and dir

This commit is contained in:
chatlanin 2023-03-18 14:03:39 +03:00
parent 681327e663
commit 8c61772c66
8 changed files with 56 additions and 15 deletions

View File

@ -1,6 +1,8 @@
#include "content.hpp" #include "content.hpp"
#include <oneapi/tbb/parallel_for.h> #include <oneapi/tbb/parallel_for.h>
#include "logger/logger.hpp"
#include "buffer/buffer.hpp" #include "buffer/buffer.hpp"
namespace rrr namespace rrr
@ -71,6 +73,10 @@ namespace rrr
int content::get_preview_cursor_position() int content::get_preview_cursor_position()
{ {
int preview_cursor_position = 0; int preview_cursor_position = 0;
if (std::filesystem::is_empty(PWD))
return preview_cursor_position;
auto pwd = nav.store[PWD].at(cursor_position).path; auto pwd = nav.store[PWD].at(cursor_position).path;
if (buffer::state.contains(pwd)) if (buffer::state.contains(pwd))
@ -103,6 +109,7 @@ namespace rrr
{ {
// ставим новый pwd и заполняем навигацию и историю // ставим новый pwd и заполняем навигацию и историю
PWD = PWD / nav.store[PWD].at(cursor_position).path.filename(); PWD = PWD / nav.store[PWD].at(cursor_position).path.filename();
nav.fill(PWD); nav.fill(PWD);
his.fill(PWD); his.fill(PWD);
@ -125,7 +132,11 @@ namespace rrr
} }
// и исходя из позиции курсора заполняем окно предварительного просмотра // и исходя из позиции курсора заполняем окно предварительного просмотра
prev.fill(nav.store[PWD].at(cursor_position).path); // в зависимости от того пустаая ли она или неt
if (std::filesystem::is_empty(PWD))
prev.data.clear();
else
prev.fill(nav.store[PWD].at(cursor_position).path);
} }
void content::navigation_left() void content::navigation_left()
@ -151,4 +162,23 @@ namespace rrr
cursor_position = i; cursor_position = i;
}); });
} }
void content::create_file(std::string filename)
{
std::string cmd;
if (filename.find("/") != std::string::npos)
{
if (filename.at(filename.size() - 1) == '/') cmd = "mkdir -p " + std::string(PWD / filename);
else cmd = "mkdir -p " + std::string(PWD / std::filesystem::path(filename).parent_path())
+ " && touch " + std::string(PWD / filename);
}
else
{
cmd = "touch " + std::string(PWD / filename);
}
hack::utils::unix_cmd(cmd);
nav.fill(PWD);
}
} }

View File

@ -32,6 +32,7 @@ namespace rrr
void increment_position(int); void increment_position(int);
void navigation_right(); void navigation_right();
void navigation_left(); void navigation_left();
void create_file(std::string);
private: private:
content_type::navigation nav; content_type::navigation nav;

View File

@ -5,6 +5,8 @@
#include <vector> #include <vector>
#include <algorithm> #include <algorithm>
#include "logger/logger.hpp"
namespace rrr namespace rrr
{ {
// NONE - просто выводится текст. когда пупка пуста и нет контента вообще // NONE - просто выводится текст. когда пупка пуста и нет контента вообще
@ -98,6 +100,12 @@ namespace rrr::file_utils
inline files fill(std::filesystem::path pwd) inline files fill(std::filesystem::path pwd)
{ {
files current_files = get_files_struct(pwd); files current_files = get_files_struct(pwd);
if (current_files.size() == 1 && current_files.at(0).path == pwd / "no permission")
{
return current_files;
}
files tmp; files tmp;
tmp.reserve(current_files.size()); tmp.reserve(current_files.size());
std::sort(current_files.begin(), current_files.end()); std::sort(current_files.begin(), current_files.end());

View File

@ -4,12 +4,14 @@ namespace rrr::content_type
{ {
void navigation::fill(std::filesystem::path PWD) void navigation::fill(std::filesystem::path PWD)
{ {
if (!store.contains(PWD)) // if (!store.contains(PWD))
store[PWD] = file_utils::fill(PWD); // store[PWD] = file_utils::fill(PWD);
}
void navigation::update(std::filesystem::path PWD)
{
store[PWD] = file_utils::fill(PWD); store[PWD] = file_utils::fill(PWD);
} }
// void navigation::update(std::filesystem::path PWD)
// {
// store[PWD] = file_utils::fill(PWD);
// }
} }

View File

@ -14,7 +14,7 @@ namespace rrr::content_type
~navigation() = default; ~navigation() = default;
void fill(std::filesystem::path); void fill(std::filesystem::path);
void update(std::filesystem::path); // void update(std::filesystem::path);
std::unordered_map<std::filesystem::path, files> store; std::unordered_map<std::filesystem::path, files> store;
}; };

View File

@ -133,16 +133,13 @@ namespace rrr::layers::gui
case types::event_type::DELETE_CURRENT_FILE: case types::event_type::DELETE_CURRENT_FILE:
freeze = false; freeze = false;
hack::log()("DELETE FILE"); hack::log()("DELETE FILE");
// HERE
// реализовать удаление после создания
break; break;
case types::event_type::CREATE_FILE: case types::event_type::CREATE_FILE:
{ {
freeze = false; freeze = false;
auto filename = std::any_cast<std::string>(value); auto filename = std::any_cast<std::string>(value);
// HERE начинам тут cnt->create_file(filename);
// реализовать через контент создание файла или директории data = cnt->get(TYPE_WIN::NAVIGATION);
// а затем его уделаение см. HERE то что выше
} }
break; break;
default: default:
@ -197,13 +194,15 @@ namespace rrr::layers::gui
em->execute(types::event_type::NAVIGATION_RIGHT, nullptr); em->execute(types::event_type::NAVIGATION_RIGHT, nullptr);
} }
// удаление
if (shift && key.get_keycode() == try_engine::key::D) if (shift && key.get_keycode() == try_engine::key::D)
{ {
em->execute(types::event_type::SHOW_DELETE_ONE_FILE_DIALOG, current_file); em->execute(types::event_type::SHOW_DELETE_ONE_FILE_DIALOG, current_file);
freeze = true; freeze = true;
} }
if (shift && key.get_keycode() == try_engine::key::C) // создание файла/директории
if (shift && key.get_keycode() == try_engine::key::A)
{ {
em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr); em->execute(types::event_type::SHOW_CREATE_FILE_DIALOG, nullptr);
freeze = true; freeze = true;

View File

@ -221,6 +221,7 @@ namespace rrr::layers::gui
void dialogs::create_file() void dialogs::create_file()
{ {
if (title.empty()) return;
show = false; show = false;
create_dialog = false; create_dialog = false;
em->execute(types::event_type::CREATE_FILE, title); em->execute(types::event_type::CREATE_FILE, title);

View File

@ -10,8 +10,8 @@ namespace rrr::types
NAVIGATION_LEFT, NAVIGATION_LEFT,
NAVIGATION_RIGHT, NAVIGATION_RIGHT,
SHOW_DELETE_ONE_FILE_DIALOG, SHOW_DELETE_ONE_FILE_DIALOG,
FREEZE_BROWSER_ACTION, FREEZE_BROWSER_ACTION, // замораживает все действия
UNFREEZE_BROWSER_ACTION, UNFREEZE_BROWSER_ACTION, // размораживает все действия
DELETE_CURRENT_FILE, DELETE_CURRENT_FILE,
SHOW_CREATE_FILE_DIALOG, SHOW_CREATE_FILE_DIALOG,
CREATE_FILE CREATE_FILE