#pragma once
#include <apt-pkg/algorithms.h>
#include <apt-pkg/cachefile.h>
#include <apt-pkg/install-progress.h>
#include <apt-pkg/pkgsystem.h>
#include <apt-pkg/version.h>
#include <cstdint>
#include <sstream>
#include "rust/cxx.h"
#include "types.h"
inline void handle_errors() {
if (_error->PendingError()) { throw std::runtime_error("convert to AptErrors"); }
}
inline const char* handle_str(const char* str) {
if (!str || !strcmp(str, "")) { throw std::runtime_error("&str doesn't exist"); }
return str;
}
inline String handle_string(std::string string) {
if (string.empty()) { throw std::runtime_error("String doesn't exist"); }
return string;
}
inline i32 cmp_versions(str ver1, str ver2) {
if (!_system) { pkgInitSystem(*_config, _system); }
const char* end1 = ver1.begin() + strlen(ver1.begin());
const char* end2 = ver2.begin() + strlen(ver2.begin());
return _system->VS->DoCmpVersion(ver1.begin(), end1, ver2.begin(), end2);
}
inline String get_apt_progress_string(f32 percent, u32 output_width) {
return APT::Progress::PackageManagerFancy::GetTextProgressStr(percent, output_width);
}
inline String quote_string(str string, String bad) {
return QuoteString(std::string(string), bad.c_str());
}
inline void apt_lock() {
_system->Lock();
handle_errors();
}
inline void apt_unlock() {
_system->UnLock(true);
}
inline void apt_lock_inner() {
_system->LockInner();
handle_errors();
}
inline void apt_unlock_inner() {
_system->UnLockInner();
}
inline bool apt_is_locked() { return _system->IsLocked(); }