VersionChecker

Struct VersionChecker 

Source
pub struct VersionChecker { /* private fields */ }
Expand description

Version checking and caching system with automatic update notifications.

VersionChecker provides intelligent caching of version information and automatic update checking based on user configuration. It manages notification state to avoid alert fatigue while ensuring users are aware of updates.

§Features

  • Automatic Checking: Checks for updates based on configured intervals
  • Smart Caching: Reduces GitHub API calls with intelligent cache management
  • Notification Tracking: Avoids repeated notifications for the same update
  • Configurable Behavior: Respects user preferences for update checking

§Caching Strategy

The version checker implements a sophisticated caching strategy:

  • Stores version information with timestamps
  • Tracks notification state to avoid alert fatigue
  • Uses configurable intervals for cache expiration
  • Implements exponential backoff for re-notifications

Implementations§

Source§

impl VersionChecker

Source

pub async fn new() -> Result<Self>

Create a new VersionChecker with configuration from global settings.

Loads the global configuration and sets up the version checker with appropriate cache paths and update settings.

§Returns
  • Ok(VersionChecker) - Successfully created with loaded configuration
  • Err(error) - Failed to load configuration or determine cache path
§Cache Location

The cache file is stored at:

  • Unix/macOS: ~/.agpm/.version_cache
  • Windows: %LOCALAPPDATA%\agpm\.version_cache
Source

pub fn with_cache_dir(self, cache_dir: PathBuf) -> Self

Create a new VersionChecker with custom cache directory.

§Arguments
  • cache_dir - Directory where the version cache file will be stored
Source

pub async fn check_for_updates_if_needed(&self) -> Result<Option<String>>

Check for updates automatically based on configuration.

This is the main entry point for automatic update checking. It:

  1. Checks if automatic updates are enabled in configuration
  2. Loads and validates the cache
  3. Performs a new check if cache is expired
  4. Returns version info if user should be notified
§Returns
  • Ok(Some(version)) - Update available and user should be notified
  • Ok(None) - No update or notification not needed
  • Err(error) - Error during check (non-fatal, logged)
Source

pub async fn check_now(&self) -> Result<Option<String>>

Perform an explicit update check, bypassing the cache.

This method always queries GitHub for the latest version, regardless of cache state. Used for manual update checks.

§Returns
  • Ok(Some(version)) - New version available
  • Ok(None) - Already on latest version
  • Err(error) - Check failed
Source

pub async fn clear_cache(&self) -> Result<()>

Clear the version cache by removing the cache file.

Removes cached version information, forcing subsequent version checks to fetch fresh data from GitHub.

Source

pub fn display_update_notification(latest_version: &str)

Display a user-friendly update notification.

Shows an attractive notification banner informing the user about the available update with instructions on how to upgrade.

§Arguments
  • latest_version - The new version available for upgrade
Source

pub fn format_version_info(current: &str, latest: Option<&str>) -> String

Format version information for status display.

Creates a human-readable string showing the current version and, if available, the latest version with update availability.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more