//! Native paged Albums collection over the derived catalog (phase F1).
use std::collections::{BTreeMap, HashMap, HashSet, VecDeque};
use std::ffi::{c_char, CString};
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
use std::sync::{Arc, Mutex};
use std::time::Instant;
use cxx_qt_lib::QString;
use qbz_library::AudioFormat;
use qbz_local_catalog::{
ActiveCatalog, AlbumCursor, AlbumRecord, BootstrapLayout, QueryDescriptor, SourceKey,
SourceKind, TrackGroup, TrackSort,
};
use serde::Serialize;
use crate::local_bridge::ui;
use crate::local_rows::{
album_favorite_source, badge_source, badge_source_raw, catalog_album_sources, detail_of,
total_duration, AlbumRow,
};
const PAGE_ENTRIES: usize = 100;
const FLAT_QUERY_ROWS: usize = 500;
const MAX_RESIDENT_ALBUMS: usize = 2_000;
const MAX_UNANCHORED_ENTRIES: usize = 500;
const MAX_COLUMNS: usize = MAX_RESIDENT_ALBUMS / PAGE_ENTRIES;
static QUERY_GENERATION: AtomicU64 = AtomicU64::new(0);
static SESSION_FAILED: AtomicBool = AtomicBool::new(false);
static SESSION: Mutex