MovieMapper/utils/renderer/AppState.js
Jarian Cottingham 5b1d24ae4a Add file editing via double-click and fix TVDB ID appending logic
- Add double-click handler to make file names editable in UI
- Remove duplicate IPC handler for rename-file in renderer.js
- Fix checkEpisodeCountMatch to properly validate sequential episodes
- Fix begin-mapping to handle both season folder and show folder cases
- Improve open-file-in-player handler to properly log results
2026-02-26 19:20:15 -06:00

205 lines
4.4 KiB
JavaScript

const path = require('path');
/**
* AppState - Manages application state
*/
class AppState {
constructor() {
this.currentDirectory = null;
this.currentFiles = [];
this.currentShow = null;
this.currentSeasons = [];
this.currentEpisodes = [];
this.selectedSeasonEpisodeCount = 0;
this.isUpdatingEpisodeNumbers = false;
// Navigation stack for folder navigation
this.navigationStack = [];
this.currentDepth = 0;
}
/**
* Set the current directory
* @param {string} directory - Directory path
*/
setCurrentDirectory(directory) {
this.currentDirectory = directory;
}
/**
* Get the current directory
* @returns {string|null} Current directory path
*/
getCurrentDirectory() {
return this.currentDirectory;
}
/**
* Set current files
* @param {Array} files - Array of file objects
*/
setCurrentFiles(files) {
this.currentFiles = files;
}
/**
* Get current files
* @returns {Array} Array of file objects
*/
getCurrentFiles() {
return this.currentFiles;
}
/**
* Set current show
* @param {Object} show - Show object
*/
setCurrentShow(show) {
this.currentShow = show;
}
/**
* Get current show
* @returns {Object|null} Current show object
*/
getCurrentShow() {
return this.currentShow;
}
/**
* Set current seasons
* @param {Array} seasons - Array of season objects
*/
setCurrentSeasons(seasons) {
this.currentSeasons = seasons;
}
/**
* Get current seasons
* @returns {Array} Array of season objects
*/
getCurrentSeasons() {
return this.currentSeasons;
}
/**
* Set current episodes
* @param {Array} episodes - Array of episode objects
*/
setCurrentEpisodes(episodes) {
this.currentEpisodes = episodes;
}
/**
* Get current episodes
* @returns {Array} Array of episode objects
*/
getCurrentEpisodes() {
return this.currentEpisodes;
}
/**
* Set selected season episode count
* @param {number} count - Episode count
*/
setSelectedSeasonEpisodeCount(count) {
this.selectedSeasonEpisodeCount = count;
}
/**
* Get selected season episode count
* @returns {number} Episode count
*/
getSelectedSeasonEpisodeCount() {
return this.selectedSeasonEpisodeCount;
}
/**
* Check if episode numbers are currently updating
* @returns {boolean} True if updating
*/
isUpdatingEpisodeNumbers() {
return this.isUpdatingEpisodeNumbers;
}
/**
* Set episode numbers updating flag
* @param {boolean} updating - Updating state
*/
setUpdatingEpisodeNumbers(updating) {
this.isUpdatingEpisodeNumbers = updating;
}
/**
* Reset state to initial values
*/
reset() {
this.currentDirectory = null;
this.currentFiles = [];
this.currentShow = null;
this.currentSeasons = [];
this.currentEpisodes = [];
this.selectedSeasonEpisodeCount = 0;
this.isUpdatingEpisodeNumbers = false;
this.navigationStack = [];
this.currentDepth = 0;
}
/**
* Add directory to navigation stack
* @param {string} directory - Directory path to add
*/
addToNavigationStack(directory) {
// Remove any forward history if navigating from middle of stack
this.navigationStack = this.navigationStack.slice(0, this.currentDepth + 1);
this.navigationStack.push(directory);
this.currentDepth = this.navigationStack.length - 1;
}
/**
* Go back to previous directory in navigation stack
* @returns {string|null} Previous directory path or null if at root
*/
goBack() {
if (this.canGoBack()) {
this.navigationStack.pop();
this.currentDepth--;
return this.navigationStack[this.currentDepth];
}
return null;
}
/**
* Check if can go back in navigation history
* @returns {boolean} True if can go back
*/
canGoBack() {
return this.currentDepth > 0;
}
/**
* Get current directory from navigation stack
* @returns {string|null} Current directory path
*/
getCurrentDirectoryFromStack() {
return this.navigationStack[this.currentDepth] || null;
}
/**
* Get navigation depth
* @returns {number} Current navigation depth
*/
getNavigationDepth() {
return this.currentDepth;
}
/**
* Get navigation stack
* @returns {Array} Array of visited directories
*/
getNavigationStack() {
return this.navigationStack;
}
}
module.exports = AppState;