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 <oneapi/tbb/parallel_for.h>
#include "logger/logger.hpp"
#include "buffer/buffer.hpp"
namespace rrr
@ -71,6 +73,10 @@ namespace rrr
int content::get_preview_cursor_position()
{
int preview_cursor_position = 0;
if (std::filesystem::is_empty(PWD))
return preview_cursor_position;
auto pwd = nav.store[PWD].at(cursor_position).path;
if (buffer::state.contains(pwd))
@ -103,6 +109,7 @@ namespace rrr
{
// ставим новый pwd и заполняем навигацию и историю
PWD = PWD / nav.store[PWD].at(cursor_position).path.filename();
nav.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()
@ -151,4 +162,23 @@ namespace rrr
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 navigation_right();
void navigation_left();
void create_file(std::string);
private:
content_type::navigation nav;

View File

@ -5,6 +5,8 @@
#include <vector>
#include <algorithm>
#include "logger/logger.hpp"
namespace rrr
{
// NONE - просто выводится текст. когда пупка пуста и нет контента вообще
@ -98,6 +100,12 @@ namespace rrr::file_utils
inline files fill(std::filesystem::path 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;
tmp.reserve(current_files.size());
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)
{
if (!store.contains(PWD))
store[PWD] = file_utils::fill(PWD);
}
// if (!store.contains(PWD))
// store[PWD] = file_utils::fill(PWD);
void navigation::update(std::filesystem::path 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;
void fill(std::filesystem::path);
void update(std::filesystem::path);
// void update(std::filesystem::path);
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:
freeze = false;
hack::log()("DELETE FILE");
// HERE
// реализовать удаление после создания
break;
case types::event_type::CREATE_FILE:
{
freeze = false;
auto filename = std::any_cast<std::string>(value);
// HERE начинам тут
// реализовать через контент создание файла или директории
// а затем его уделаение см. HERE то что выше
cnt->create_file(filename);
data = cnt->get(TYPE_WIN::NAVIGATION);
}
break;
default:
@ -197,13 +194,15 @@ namespace rrr::layers::gui
em->execute(types::event_type::NAVIGATION_RIGHT, nullptr);
}
// удаление
if (shift && key.get_keycode() == try_engine::key::D)
{
em->execute(types::event_type::SHOW_DELETE_ONE_FILE_DIALOG, current_file);
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);
freeze = true;

View File

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

View File

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