mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-11 22:17:21 +03:00
Fix loading indicator in popup
This commit is contained in:
@@ -14,13 +14,23 @@ import { SegmentSubmissionComponent } from "./SegmentSubmissionComponent";
|
|||||||
export enum LoadingStatus {
|
export enum LoadingStatus {
|
||||||
Loading,
|
Loading,
|
||||||
SegmentsFound,
|
SegmentsFound,
|
||||||
NoSegmentsFound
|
NoSegmentsFound,
|
||||||
|
ConnectionError,
|
||||||
|
StillLoading,
|
||||||
|
NoVideo
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface LoadingData {
|
||||||
|
status: LoadingStatus;
|
||||||
|
code?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
let loadRetryCount = 0;
|
let loadRetryCount = 0;
|
||||||
|
|
||||||
export const PopupComponent = () => {
|
export const PopupComponent = () => {
|
||||||
const [status, setStatus] = React.useState<LoadingStatus>(LoadingStatus.Loading);
|
const [status, setStatus] = React.useState<LoadingData>({
|
||||||
|
status: LoadingStatus.Loading
|
||||||
|
});
|
||||||
const [extensionEnabled, setExtensionEnabled] = React.useState(!Config.config!.disableSkipping);
|
const [extensionEnabled, setExtensionEnabled] = React.useState(!Config.config!.disableSkipping);
|
||||||
const [channelWhitelisted, setChannelWhitelisted] = React.useState<boolean | null>(null);
|
const [channelWhitelisted, setChannelWhitelisted] = React.useState<boolean | null>(null);
|
||||||
const [showForceChannelCheckWarning, setShowForceChannelCheckWarning] = React.useState(false);
|
const [showForceChannelCheckWarning, setShowForceChannelCheckWarning] = React.useState(false);
|
||||||
@@ -84,20 +94,11 @@ export const PopupComponent = () => {
|
|||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{/* Loading text */}
|
<p id="videoFound"
|
||||||
{status === LoadingStatus.Loading && (
|
className={"u-mZ grey-text " + (Config.config.cleanPopup ? "cleanPopupMargin" : "")}>
|
||||||
<p id="loadingIndicator"
|
{getVideoStatusText(status)}
|
||||||
className={"u-mZ grey-text " + (Config.config.cleanPopup ? "cleanPopupMargin" : "")}>
|
</p>
|
||||||
{chrome.i18n.getMessage("noVideoID")}
|
|
||||||
</p>
|
|
||||||
)}
|
|
||||||
{/* If the video was found in the database */}
|
|
||||||
{status !== LoadingStatus.Loading && (
|
|
||||||
<p id="videoFound"
|
|
||||||
className={"u-mZ grey-text " + (Config.config.cleanPopup ? "cleanPopupMargin" : "")}>
|
|
||||||
{status === LoadingStatus.SegmentsFound ? chrome.i18n.getMessage("sponsorFound") : chrome.i18n.getMessage("sponsor404")}
|
|
||||||
</p>
|
|
||||||
)}
|
|
||||||
<button id="refreshSegmentsButton" title={chrome.i18n.getMessage("refreshSegments")} onClick={(e) => {
|
<button id="refreshSegmentsButton" title={chrome.i18n.getMessage("refreshSegments")} onClick={(e) => {
|
||||||
const stopAnimation = AnimationUtils.applyLoadingAnimation(e.currentTarget, 0.3);
|
const stopAnimation = AnimationUtils.applyLoadingAnimation(e.currentTarget, 0.3);
|
||||||
|
|
||||||
@@ -276,8 +277,25 @@ export const PopupComponent = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function getVideoStatusText(status: LoadingData): string {
|
||||||
|
switch (status.status) {
|
||||||
|
case LoadingStatus.Loading:
|
||||||
|
return chrome.i18n.getMessage("Loading");
|
||||||
|
case LoadingStatus.SegmentsFound:
|
||||||
|
return chrome.i18n.getMessage("sponsorFound");
|
||||||
|
case LoadingStatus.NoSegmentsFound:
|
||||||
|
return chrome.i18n.getMessage("sponsor404");
|
||||||
|
case LoadingStatus.ConnectionError:
|
||||||
|
return chrome.i18n.getMessage("connectionError") + status.code;
|
||||||
|
case LoadingStatus.StillLoading:
|
||||||
|
return chrome.i18n.getMessage("segmentsStillLoading");
|
||||||
|
case LoadingStatus.NoVideo:
|
||||||
|
return chrome.i18n.getMessage("noVideoID");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface SegmentsLoadedProps {
|
interface SegmentsLoadedProps {
|
||||||
setStatus: (status: LoadingStatus) => void;
|
setStatus: (status: LoadingData) => void;
|
||||||
setChannelWhitelisted: (whitelisted: boolean | null) => void;
|
setChannelWhitelisted: (whitelisted: boolean | null) => void;
|
||||||
setVideoID: (videoID: string | null) => void;
|
setVideoID: (videoID: string | null) => void;
|
||||||
setCurrentTime: (time: number) => void;
|
setCurrentTime: (time: number) => void;
|
||||||
@@ -298,7 +316,9 @@ async function loadSegments(props: LoadSegmentsProps): Promise<void> {
|
|||||||
// Handle error if it exists
|
// Handle error if it exists
|
||||||
chrome.runtime.lastError;
|
chrome.runtime.lastError;
|
||||||
|
|
||||||
props.setStatus(LoadingStatus.NoSegmentsFound);
|
props.setStatus({
|
||||||
|
status: LoadingStatus.NoVideo,
|
||||||
|
});
|
||||||
|
|
||||||
if (!props.updating) {
|
if (!props.updating) {
|
||||||
loadRetryCount++;
|
loadRetryCount++;
|
||||||
@@ -310,7 +330,26 @@ async function loadSegments(props: LoadSegmentsProps): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function segmentsLoaded(response: IsInfoFoundMessageResponse, props: SegmentsLoadedProps): void {
|
function segmentsLoaded(response: IsInfoFoundMessageResponse, props: SegmentsLoadedProps): void {
|
||||||
props.setStatus(response.sponsorTimes?.length > 0 ? LoadingStatus.SegmentsFound : LoadingStatus.NoSegmentsFound);
|
if (response.found) {
|
||||||
|
props.setStatus({
|
||||||
|
status: LoadingStatus.SegmentsFound
|
||||||
|
});
|
||||||
|
} else if (response.status === 404 || response.status === 200) {
|
||||||
|
props.setStatus({
|
||||||
|
status: LoadingStatus.NoSegmentsFound
|
||||||
|
});
|
||||||
|
} else if (response.status) {
|
||||||
|
props.setStatus({
|
||||||
|
status: LoadingStatus.ConnectionError,
|
||||||
|
code: response.status
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
props.setStatus({
|
||||||
|
status: LoadingStatus.StillLoading
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
props.setVideoID(response.videoID);
|
props.setVideoID(response.videoID);
|
||||||
props.setCurrentTime(response.time);
|
props.setCurrentTime(response.time);
|
||||||
props.setChannelWhitelisted(response.channelWhitelisted);
|
props.setChannelWhitelisted(response.channelWhitelisted);
|
||||||
|
|||||||
Reference in New Issue
Block a user