From c45e16f6052abdb04e1145db1208476264e4c57d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 19 Apr 2020 19:57:05 +0200 Subject: [PATCH] LibCore: Add StandardPaths thing to retrieve various standard locations Fixes #1853. --- Applications/FileManager/main.cpp | 8 ++--- Applications/SystemMenu/main.cpp | 4 +-- Applications/Taskbar/TaskbarWindow.cpp | 4 +-- Applications/Terminal/main.cpp | 1 - Libraries/LibCore/ConfigFile.cpp | 6 ++-- Libraries/LibCore/Makefile | 2 +- .../{UserInfo.cpp => StandardPaths.cpp} | 30 +++++++++++++++---- .../LibCore/{UserInfo.h => StandardPaths.h} | 15 ++++++++-- Libraries/LibGUI/FilePicker.cpp | 2 +- Libraries/LibGUI/FilePicker.h | 4 +-- 10 files changed, 51 insertions(+), 25 deletions(-) rename Libraries/LibCore/{UserInfo.cpp => StandardPaths.cpp} (72%) rename Libraries/LibCore/{UserInfo.h => StandardPaths.h} (84%) diff --git a/Applications/FileManager/main.cpp b/Applications/FileManager/main.cpp index b5d22c8976..eaa1ce100a 100644 --- a/Applications/FileManager/main.cpp +++ b/Applications/FileManager/main.cpp @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include #include @@ -91,7 +91,7 @@ int main(int argc, char** argv) } if (app.args().contains_slow("--desktop") || app.args().contains_slow("-d")) - return run_in_desktop_mode(move(config), String::format("%s/Desktop", get_current_user_home_path().characters())); + return run_in_desktop_mode(move(config), Core::StandardPaths::desktop_directory()); // our initial location is defined as, in order of precedence: // 1. the first command-line argument (e.g. FileManager /bin) @@ -103,7 +103,7 @@ int main(int argc, char** argv) initial_location = argv[1]; if (initial_location.is_empty()) - initial_location = get_current_user_home_path(); + initial_location = Core::StandardPaths::home_directory(); if (initial_location.is_empty()) initial_location = "/"; @@ -530,7 +530,7 @@ int run_in_windowed_mode(RefPtr config, String initial_locatio auto go_home_action = GUI::CommonActions::make_go_home_action( [&](auto&) { - directory_view.open(get_current_user_home_path()); + directory_view.open(Core::StandardPaths::home_directory()); }, window); diff --git a/Applications/SystemMenu/main.cpp b/Applications/SystemMenu/main.cpp index e81972ea52..7dccf8a8a0 100644 --- a/Applications/SystemMenu/main.cpp +++ b/Applications/SystemMenu/main.cpp @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include #include #include @@ -81,7 +81,7 @@ int main(int argc, char** argv) return 1; } - if (chdir(get_current_user_home_path().characters()) < 0) { + if (chdir(Core::StandardPaths::home_directory().characters()) < 0) { perror("chdir"); return 1; } diff --git a/Applications/Taskbar/TaskbarWindow.cpp b/Applications/Taskbar/TaskbarWindow.cpp index d5fb56f050..f13cb80be4 100644 --- a/Applications/Taskbar/TaskbarWindow.cpp +++ b/Applications/Taskbar/TaskbarWindow.cpp @@ -28,7 +28,7 @@ #include "TaskbarButton.h" #include #include -#include +#include #include #include #include @@ -105,7 +105,7 @@ void TaskbarWindow::create_quick_launch_bar() if (pid < 0) { perror("fork"); } else if (pid == 0) { - if (chdir(get_current_user_home_path().characters()) < 0) { + if (chdir(Core::StandardPaths::home_directory().characters()) < 0) { perror("chdir"); exit(1); } diff --git a/Applications/Terminal/main.cpp b/Applications/Terminal/main.cpp index 31e5f48c27..a5d5bf1600 100644 --- a/Applications/Terminal/main.cpp +++ b/Applications/Terminal/main.cpp @@ -26,7 +26,6 @@ #include #include -#include #include #include #include diff --git a/Libraries/LibCore/ConfigFile.cpp b/Libraries/LibCore/ConfigFile.cpp index 08fdb130ff..15fdb8020d 100644 --- a/Libraries/LibCore/ConfigFile.cpp +++ b/Libraries/LibCore/ConfigFile.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include @@ -36,9 +36,7 @@ namespace Core { NonnullRefPtr ConfigFile::get_for_app(const String& app_name) { - String home_path = get_current_user_home_path(); - if (home_path == "/") - home_path = String::format("/tmp"); + String home_path = StandardPaths::home_directory(); auto path = String::format("%s/%s.ini", home_path.characters(), app_name.characters()); return adopt(*new ConfigFile(path)); } diff --git a/Libraries/LibCore/Makefile b/Libraries/LibCore/Makefile index 9948956218..90f00d7488 100644 --- a/Libraries/LibCore/Makefile +++ b/Libraries/LibCore/Makefile @@ -23,12 +23,12 @@ OBJS = \ ProcessStatisticsReader.o \ Socket.o \ SocketAddress.o \ + StandardPaths.o \ TCPServer.o \ TCPSocket.o \ Timer.o \ UDPServer.o \ UDPSocket.o \ - UserInfo.o \ puff.o LIBRARY = libcore.a diff --git a/Libraries/LibCore/UserInfo.cpp b/Libraries/LibCore/StandardPaths.cpp similarity index 72% rename from Libraries/LibCore/UserInfo.cpp rename to Libraries/LibCore/StandardPaths.cpp index 284272be4e..b46ab334b0 100644 --- a/Libraries/LibCore/UserInfo.cpp +++ b/Libraries/LibCore/StandardPaths.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2020, Andreas Kling * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -24,18 +24,38 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include +#include +#include +#include +#include #include #include #include -String get_current_user_home_path() +namespace Core { + +String StandardPaths::home_directory() { if (auto* home_env = getenv("HOME")) - return home_env; + return canonicalized_path(home_env); auto* pwd = getpwuid(getuid()); String path = pwd ? pwd->pw_dir : "/"; endpwent(); - return path; + return canonicalized_path(path); +} + +String StandardPaths::desktop_directory() +{ + StringBuilder builder; + builder.append(home_directory()); + builder.append("/Desktop"); + return canonicalized_path(builder.to_string()); +} + +String StandardPaths::tempfile_directory() +{ + return "/tmp"; +} + } diff --git a/Libraries/LibCore/UserInfo.h b/Libraries/LibCore/StandardPaths.h similarity index 84% rename from Libraries/LibCore/UserInfo.h rename to Libraries/LibCore/StandardPaths.h index d609cdbe59..53b3cca95e 100644 --- a/Libraries/LibCore/UserInfo.h +++ b/Libraries/LibCore/StandardPaths.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2020, Andreas Kling + * Copyright (c) 2020, Andreas Kling * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,6 +26,15 @@ #pragma once -#include +#include -String get_current_user_home_path(); +namespace Core { + +class StandardPaths { +public: + static String home_directory(); + static String desktop_directory(); + static String tempfile_directory(); +}; + +} diff --git a/Libraries/LibGUI/FilePicker.cpp b/Libraries/LibGUI/FilePicker.cpp index 82e5aa6302..dacd6df7ac 100644 --- a/Libraries/LibGUI/FilePicker.cpp +++ b/Libraries/LibGUI/FilePicker.cpp @@ -128,7 +128,7 @@ FilePicker::FilePicker(Mode mode, const StringView& file_name, const StringView& toolbar.add_action(*open_parent_directory_action); auto go_home_action = CommonActions::make_go_home_action([this](auto&) { - m_model->set_root_path(get_current_user_home_path()); + m_model->set_root_path(Core::StandardPaths::home_directory()); }); toolbar.add_action(go_home_action); toolbar.add_separator(); diff --git a/Libraries/LibGUI/FilePicker.h b/Libraries/LibGUI/FilePicker.h index 99d577d721..9e67a9caa7 100644 --- a/Libraries/LibGUI/FilePicker.h +++ b/Libraries/LibGUI/FilePicker.h @@ -26,7 +26,7 @@ #include #include -#include +#include #include namespace GUI { @@ -52,7 +52,7 @@ private: void clear_preview(); void on_file_return(); - FilePicker(Mode type = Mode::Open, const StringView& file_name = "Untitled", const StringView& path = String(get_current_user_home_path()), Window* parent_window = nullptr); + FilePicker(Mode type = Mode::Open, const StringView& file_name = "Untitled", const StringView& path = Core::StandardPaths::home_directory(), Window* parent_window = nullptr); static String ok_button_name(Mode mode) {