Files
sofarr/client/src/utils/storage.js
T
gronod d3d085d614
Build and Push Docker Image / build (push) Successful in 1m29s
Docs Check / Markdown lint (push) Successful in 1m51s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 2m3s
CI / Security audit (push) Successful in 2m54s
CI / Swagger Validation & Coverage (push) Successful in 3m6s
Docs Check / Mermaid diagram parse check (push) Successful in 3m13s
CI / Tests & coverage (push) Successful in 3m31s
feat: Add Ombi request filtering and search
- Add request filters UI (type, status, sort, search)
- Implement dual-layer filtering (server + client)
- Add ombiFilters utility for consistent filtering logic
- Persist filter preferences in localStorage
- Add SSE support for real-time Ombi request updates
- Add webhook endpoints for Ombi integration
- Update OpenAPI spec for new endpoints
- Add unit tests for filter logic and UI
- Add integration tests for Ombi routes
2026-05-22 12:31:31 +01:00

128 lines
3.9 KiB
JavaScript

// Copyright (c) 2026 Gordon Bolton. MIT License.
import { state } from '../state.js';
// Migration from old single-select to new multi-select format
(function migrateDownloadClientFilter() {
const oldSelection = localStorage.getItem('sofarr-download-client');
if (oldSelection && oldSelection !== 'all') {
try {
state.selectedDownloadClients = [oldSelection];
localStorage.setItem('sofarr-download-clients', JSON.stringify(state.selectedDownloadClients));
localStorage.removeItem('sofarr-download-client');
} catch (e) {
console.error('[Migration] Failed to migrate download client filter:', e);
}
} else {
try {
const newSelection = localStorage.getItem('sofarr-download-clients');
state.selectedDownloadClients = newSelection ? JSON.parse(newSelection) : [];
} catch (e) {
console.error('[Migration] Failed to load download client filter:', e);
state.selectedDownloadClients = [];
}
}
})();
// Load history days from localStorage
(function loadHistorySettings() {
try {
const savedDays = localStorage.getItem('sofarr-history-days');
if (savedDays) {
state.historyDays = parseInt(savedDays, 10) || 7;
}
} catch (e) {
console.error('[Storage] Failed to load history days:', e);
}
})();
// Load ignore available setting from localStorage
(function loadIgnoreAvailable() {
try {
const saved = localStorage.getItem('sofarr-ignore-available');
state.ignoreAvailable = saved === 'true';
} catch (e) {
console.error('[Storage] Failed to load ignore available:', e);
}
})();
// Load request filter preferences from localStorage
(function loadRequestFilters() {
try {
const savedTypes = localStorage.getItem('sofarr-request-types');
if (savedTypes) state.selectedRequestTypes = JSON.parse(savedTypes);
} catch (e) {
console.error('[Storage] Failed to load request types:', e);
state.selectedRequestTypes = ['movie', 'tv'];
}
try {
const savedStatuses = localStorage.getItem('sofarr-request-statuses');
if (savedStatuses) state.selectedRequestStatuses = JSON.parse(savedStatuses);
} catch (e) {
console.error('[Storage] Failed to load request statuses:', e);
state.selectedRequestStatuses = [];
}
try {
const savedSort = localStorage.getItem('sofarr-request-sort');
if (savedSort) state.requestSortMode = savedSort;
} catch (e) {
console.error('[Storage] Failed to load request sort:', e);
state.requestSortMode = 'requestedDate_desc';
}
try {
const savedSearch = localStorage.getItem('sofarr-request-search');
if (savedSearch !== null) state.requestSearchQuery = savedSearch;
} catch (e) {
console.error('[Storage] Failed to load request search:', e);
state.requestSearchQuery = '';
}
})();
// Export helper functions for localStorage operations
export function saveHistoryDays(days) {
localStorage.setItem('sofarr-history-days', days);
}
export function saveIgnoreAvailable(value) {
localStorage.setItem('sofarr-ignore-available', value);
}
export function saveDownloadClients(clients) {
localStorage.setItem('sofarr-download-clients', JSON.stringify(clients));
}
export function getTheme() {
return localStorage.getItem('sofarr-theme') || 'light';
}
export function saveTheme(theme) {
localStorage.setItem('sofarr-theme', theme);
}
export function getActiveTab() {
return localStorage.getItem('sofarr-active-tab') || 'downloads';
}
export function saveActiveTab(tab) {
localStorage.setItem('sofarr-active-tab', tab);
}
export function saveRequestTypes(types) {
localStorage.setItem('sofarr-request-types', JSON.stringify(types));
}
export function saveRequestStatuses(statuses) {
localStorage.setItem('sofarr-request-statuses', JSON.stringify(statuses));
}
export function saveRequestSort(sort) {
localStorage.setItem('sofarr-request-sort', sort);
}
export function saveRequestSearch(query) {
localStorage.setItem('sofarr-request-search', query);
}