134 lines
3.4 KiB
TypeScript
134 lines
3.4 KiB
TypeScript
import {
|
|
AIRDCPP_SEARCH_IN_PROGRESS,
|
|
AIRDCPP_SEARCH_RESULTS_ADDED,
|
|
AIRDCPP_SEARCH_RESULTS_UPDATED,
|
|
AIRDCPP_HUB_SEARCHES_SENT,
|
|
AIRDCPP_RESULT_DOWNLOAD_INITIATED,
|
|
AIRDCPP_DOWNLOAD_PROGRESS_TICK,
|
|
AIRDCPP_FILE_DOWNLOAD_COMPLETED,
|
|
AIRDCPP_BUNDLES_FETCHED,
|
|
AIRDCPP_TRANSFERS_FETCHED,
|
|
LIBRARY_ISSUE_BUNDLES,
|
|
AIRDCPP_SOCKET_CONNECTED,
|
|
AIRDCPP_SOCKET_DISCONNECTED,
|
|
} from "../constants/action-types";
|
|
import { LOCATION_CHANGE } from "redux-first-history";
|
|
import { isNil, isUndefined } from "lodash";
|
|
import { difference } from "../shared/utils/object.utils";
|
|
|
|
const initialState = {
|
|
searchResults: [],
|
|
isAirDCPPSearchInProgress: false,
|
|
searchInfo: null,
|
|
searchInstance: null,
|
|
downloadResult: null,
|
|
bundleDBImportResult: null,
|
|
downloadFileStatus: {},
|
|
bundles: [],
|
|
transfers: [],
|
|
isAirDCPPSocketConnected: false,
|
|
airDCPPSessionInfo: {},
|
|
socketDisconnectionReason: {},
|
|
};
|
|
|
|
function airdcppReducer(state = initialState, action) {
|
|
switch (action.type) {
|
|
case AIRDCPP_SEARCH_RESULTS_ADDED:
|
|
return {
|
|
...state,
|
|
searchResults: [...state.searchResults, action.groupedResult],
|
|
isAirDCPPSearchInProgress: true,
|
|
};
|
|
case AIRDCPP_SEARCH_RESULTS_UPDATED:
|
|
const bundleToUpdateIndex = state.searchResults.findIndex(
|
|
(bundle) => bundle.result.id === action.groupedResult.result.id,
|
|
);
|
|
const updatedState = [...state.searchResults];
|
|
|
|
if (
|
|
!isNil(
|
|
difference(updatedState[bundleToUpdateIndex], action.groupedResult),
|
|
)
|
|
) {
|
|
updatedState[bundleToUpdateIndex] = action.groupedResult;
|
|
}
|
|
|
|
return {
|
|
...state,
|
|
searchResults: updatedState,
|
|
};
|
|
case AIRDCPP_SEARCH_IN_PROGRESS:
|
|
return {
|
|
...state,
|
|
isAirDCPPSearchInProgress: true,
|
|
};
|
|
case AIRDCPP_HUB_SEARCHES_SENT:
|
|
return {
|
|
...state,
|
|
isAirDCPPSearchInProgress: false,
|
|
searchInfo: action.searchInfo,
|
|
searchInstance: action.instance,
|
|
};
|
|
case AIRDCPP_RESULT_DOWNLOAD_INITIATED:
|
|
return {
|
|
...state,
|
|
downloadResult: action.downloadResult,
|
|
bundleDBImportResult: action.bundleDBImportResult,
|
|
};
|
|
case AIRDCPP_DOWNLOAD_PROGRESS_TICK:
|
|
return {
|
|
...state,
|
|
downloadProgressData: action.downloadProgressData,
|
|
};
|
|
case AIRDCPP_BUNDLES_FETCHED:
|
|
return {
|
|
...state,
|
|
bundles: action.bundles,
|
|
};
|
|
case LIBRARY_ISSUE_BUNDLES:
|
|
return {
|
|
...state,
|
|
issue_bundles: action.issue_bundles,
|
|
};
|
|
case AIRDCPP_FILE_DOWNLOAD_COMPLETED:
|
|
console.log("COMPLETED", action);
|
|
return {
|
|
...state,
|
|
};
|
|
case AIRDCPP_TRANSFERS_FETCHED:
|
|
return {
|
|
...state,
|
|
transfers: action.bundles,
|
|
};
|
|
|
|
case AIRDCPP_SOCKET_CONNECTED:
|
|
return {
|
|
...state,
|
|
isAirDCPPSocketConnected: true,
|
|
airDCPPSessionInfo: action.data,
|
|
};
|
|
|
|
case AIRDCPP_SOCKET_DISCONNECTED:
|
|
return {
|
|
...state,
|
|
isAirDCPPSocketConnected: false,
|
|
socketDisconnectionReason: action.data,
|
|
};
|
|
case LOCATION_CHANGE:
|
|
return {
|
|
...state,
|
|
searchResults: [],
|
|
isAirDCPPSearchInProgress: false,
|
|
searchInfo: null,
|
|
searchInstance: null,
|
|
downloadResult: null,
|
|
bundleDBImportResult: null,
|
|
// bundles: [],
|
|
};
|
|
default:
|
|
return state;
|
|
}
|
|
}
|
|
|
|
export default airdcppReducer;
|