Skip to content

Commit

Permalink
Make the Info action look really fancy
Browse files Browse the repository at this point in the history
  • Loading branch information
Slackadays committed May 3, 2023
1 parent 066b115 commit 1a78482
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 7 deletions.
52 changes: 45 additions & 7 deletions src/cb/src/actions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -423,22 +423,48 @@ void status() {
}

void info() {
fprintf(stderr, formatMessage("[info]โ”‚ This clipboard's name is [help]%s[blank]\n").data(), clipboard_name.data());
auto available(thisTerminalSize());
available.columns -= 4; // for box corners
available.columns -= (clipboard_name_message.rawLength() - 2) + clipboard_name.length(); // compensate for %s and clipboard name
bool addExtraBar = available.columns % 2 != 0;
available.columns /= 2;
fprintf(stderr, "%s", formatMessage("[info]โ”").data());
for (int i = 0; i < available.columns; i++)
fprintf(stderr, "โ”");
fprintf(stderr, "โ”ซ");
fprintf(stderr, clipboard_name_message().data(), clipboard_name.data());
fprintf(stderr, "%s", formatMessage("[info]โ”ฃ").data());
for (int i = 0; i < available.columns; i++)
fprintf(stderr, "%s", formatMessage("[info]โ”").data());
if (addExtraBar) fprintf(stderr, "โ”");
fprintf(stderr, "%s", formatMessage("โ”‘[blank]\n").data());

auto total_cols = thisTerminalSize().columns;

auto displayEndbar = [&]() {
fprintf(stderr, "\033[%ldG%s\r", total_cols, formatMessage("[info]โ”‚[blank]").data());
};

#if defined(__linux__) || defined(__APPLE__) || defined(__unix__)

struct stat info;
stat(path.string().data(), &info);
std::string time(std::ctime(&info.st_ctime));
std::erase(time, '\n');

fprintf(stderr, formatMessage("[info]โ”‚ Last changed [help]%s[blank]").data(), std::ctime(&info.st_ctime));
displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Last changed [help]%s[blank]\n").data(), time.data());

#endif

displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Stored in [help]%s[blank]\n").data(), path.string().data());
displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Persistent? [help]%s[blank]\n").data(), path.is_persistent ? "Yes" : "No");

if (path.holdsRawData()) {
displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Bytes: [help]%s[blank]\n").data(), formatBytes(fs::file_size(path.data.raw)).data());
displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Content type: [help]%s[blank]\n").data(), inferMIMEType(fileContents(path.data.raw)).value_or("(Unknown)").data());
} else {
size_t files = 0;
Expand All @@ -449,31 +475,43 @@ void info() {
else
files++;
}
displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Files: [help]%zu[blank]\n").data(), files);
displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Directories: [help]%zu[blank]\n").data(), directories);
}

if (!available_mimes.empty()) {
displayEndbar();
fprintf(stderr, "%s", formatMessage("[info]โ”‚ Available types from GUI: [help]").data());
for (const auto& mime : available_mimes) {
fprintf(stderr, "%s", mime.data());
if (mime != available_mimes.back()) fprintf(stderr, ", ");
}
fprintf(stderr, "%s", formatMessage("[blank]\n").data());
}

displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Content cut? [help]%s[blank]\n").data(), fs::exists(path.metadata.originals) ? "Yes" : "No");

displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Locked by another process? [help]%s[blank]\n").data(), path.isLocked() ? "Yes" : "No");

if (path.isLocked()) {
displayEndbar();
fprintf(stderr, formatMessage("[info]โ”‚ Locked by process with pid [help]%s[blank]\n").data(), fileContents(path.metadata.lock).data());
}

if (fs::exists(path.metadata.notes)) {
displayEndbar();
if (fs::exists(path.metadata.notes))
fprintf(stderr, formatMessage("[info]โ”‚ Note: [help]%s[blank]\n").data(), fileContents(path.metadata.notes).data());
} else {
else
fprintf(stderr, "%s", formatMessage("[info]โ”‚ There is no note for this clipboard.[blank]\n").data());
}

fprintf(stderr, "%s", formatMessage("[info]โ”•").data());
auto avail_cols = thisTerminalSize().columns;
for (int i = 0; i < avail_cols - 2; i++)
fprintf(stderr, "โ”");
fprintf(stderr, "%s", formatMessage("โ”™[blank]\n").data());
}

void infoJSON() {
Expand Down
1 change: 1 addition & 0 deletions src/cb/src/clipboard.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,7 @@ extern Message many_files_one_directory_success_message;
extern Message many_files_many_directories_success_message;
extern Message one_clipboard_success_message;
extern Message many_clipboards_success_message;
extern Message clipboard_name_message;
extern Message internal_error_message;

extern ClipboardContent getGUIClipboard(const std::string& requested_mime);
Expand Down
1 change: 1 addition & 0 deletions src/cb/src/messages.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ Message many_files_one_directory_success_message = "[success]โœ… %s %lu files an
Message many_files_many_directories_success_message = "[success]โœ… %s %lu files and %lu directories[blank]\n";
Message one_clipboard_success_message = "[success]โœ… %s one clipboard[blank]\n";
Message many_clipboards_success_message = "[success]โœ… %s %lu clipboards[blank]\n";
Message clipboard_name_message = "[info] Info for clipboard [bold][help]%s [blank]";
Message internal_error_message = "[error]โŒ Internal error: %s\nโ”‚ This is probably a bug, or you might be lacking "
"permissions on this system.[blank]\n";

Expand Down

0 comments on commit 1a78482

Please sign in to comment.