some additions

This commit is contained in:
Mars 2024-05-28 03:29:11 -04:00
parent 8c4ef02b5d
commit 37a93c57ea
Signed by: pupbrained
GPG key ID: 0FF5B8826803F895
4 changed files with 48 additions and 15 deletions

View file

@ -7,7 +7,9 @@ project(draconis++ C CXX)
add_executable(${PROJECT_NAME} src/main.cpp)
find_package(PkgConfig REQUIRED)
find_package(cpr REQUIRED)
find_package(Boost REQUIRED)
pkg_check_modules(${PROJECT_NAME} REQUIRED IMPORTED_TARGET fmt playerctl)
pkg_check_modules(${PROJECT_NAME} REQUIRED IMPORTED_TARGET fmt playerctl tomlplusplus)
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::${PROJECT_NAME} cpr::cpr Boost::boost)

View file

@ -2,11 +2,11 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1716451822,
"narHash": "sha256-0lT5RVelqN+dgXWWneXvV5ufSksW0r0TDQi8O6U2+o8=",
"lastModified": 1716715802,
"narHash": "sha256-usk0vE7VlxPX8jOavrtpOqphdfqEQpf9lgedlY/r66c=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3305b2b25e4ae4baee872346eae133cf6f611783",
"rev": "e2dd4e18cc1c7314e24154331bae07df76eb582f",
"type": "github"
},
"original": {

View file

@ -59,12 +59,15 @@
];
propagatedBuildInputs = [
boost
glib
playerctl
];
buildInputs = [
fmt
libcpr
tomlplusplus
];
buildPhase = ''
@ -108,8 +111,10 @@
llvm.libcxx
# libraries
boost
fmt
glib
libcpr
playerctl
tomlplusplus
];

View file

@ -1,16 +1,21 @@
#include <boost/json/src.hpp>
#include <cpr/cpr.h>
#include <fmt/chrono.h>
#include <fmt/core.h>
#include <fmt/format.h>
#include <fstream>
#include <iostream>
#include <playerctl/playerctl.h>
#include <toml++/toml.hpp>
using fmt::format;
using fmt::formatter;
using std::string;
struct b_to_gib {
uint64_t value;
};
template <> struct fmt::formatter<b_to_gib> : formatter<double> {
template <> struct formatter<b_to_gib> : formatter<double> {
template <typename FormatContext>
auto format(const b_to_gib b, FormatContext &ctx) {
auto out = formatter<double>::format(
@ -22,16 +27,16 @@ template <> struct fmt::formatter<b_to_gib> : formatter<double> {
}
};
uint64_t parse_line_as_number(const std::string &input) {
uint64_t parse_line_as_number(const string &input) {
// Find the first number
std::string::size_type start = 0;
string::size_type start = 0;
// Skip leading non-numbers
while (!isdigit(input[++start]))
;
// Start searching from the start of the number
std::string::size_type end = start;
string::size_type end = start;
// Increment to the end of the number
while (isdigit(input[++end]))
@ -42,7 +47,7 @@ uint64_t parse_line_as_number(const std::string &input) {
}
uint64_t meminfo_parse(std::ifstream is) {
std::string line;
string line;
// Skip every line before the one that starts with "MemTotal"
while (std::getline(is, line) && !line.starts_with("MemTotal"))
@ -92,7 +97,7 @@ PlayerctlPlayer *init_playerctl() {
enum date_num { Ones, Twos, Threes, Default };
date_num parse_date(std::string const &inString) {
date_num parse_date(string const &inString) {
if (inString == "1" || inString == "21" || inString == "31")
return Ones;
@ -105,10 +110,24 @@ date_num parse_date(std::string const &inString) {
return Default;
}
boost::json::object get_weather() {
using namespace cpr;
using namespace boost::json;
Response r = Get(Url{format("https://api.openweathermap.org/data/2.5/"
"weather?lat={}&lon={}&appid={}&units={}",
"39.9537", "-74.1979",
"00000000000000000000000000000000", "imperial")});
value json = parse(r.text);
return json.as_object();
}
int main() {
const toml::parse_result config = toml::parse_file("./config.toml");
char const *name = config["general"]["name"].value_or(getlogin());
const char *name = config["general"]["name"].value_or(getlogin());
if (config["playerctl"]["enable"].value_or(false)) {
if (PlayerctlPlayer *current_player = init_playerctl()) {
@ -125,7 +144,7 @@ int main() {
const std::time_t t = std::time(nullptr);
std::string date = fmt::format("{:%d}", fmt::localtime(t));
string date = fmt::format("{:%d}", fmt::localtime(t));
switch (parse_date(date)) {
case Ones:
@ -145,8 +164,15 @@ int main() {
break;
}
fmt::println("{:%B} {}, {:%-H:%0M %p}", fmt::localtime(t), date,
fmt::println("{:%B} {}, {:%-I:%0M %p}", fmt::localtime(t), date,
fmt::localtime(t));
auto json = get_weather();
auto town_name =
json["name"].is_string() ? json["name"].as_string().c_str() : "Unknown";
fmt::println("{}", town_name);
return 0;
}