polyv-live-cli
Version:
CLI tool for managing PolyV live streaming services.
129 lines • 4.09 kB
TypeScript
import { EventEmitter } from 'events';
import { BaseComponent } from './base.component';
import { ComponentConfig } from '../types/monitoring';
import { ChannelDetailModel } from '../types/channel';
export type WatchStatus = 'live' | 'playback' | 'end' | 'waiting' | 'unStart' | 'banpush';
export interface ChannelStatusInfo {
channelId: string;
name: string;
status: WatchStatus;
statusText: string;
viewerCount: number;
maxViewer: number;
publisher: string;
startTime: number;
endTime: number;
createdTime: number;
selected?: boolean;
}
export interface ChannelStatusPanelConfig extends ComponentConfig {
refreshInterval: number;
maxChannels: number;
showColors: boolean;
columnWidths: number[];
sortField: keyof ChannelStatusInfo;
sortOrder: 'asc' | 'desc';
filters: {
status?: WatchStatus[];
searchTerm?: string;
};
}
export interface SortConfig {
field: keyof ChannelStatusInfo;
order: 'asc' | 'desc';
secondaryField?: keyof ChannelStatusInfo;
secondaryOrder?: 'asc' | 'desc';
}
export interface FilterConfig {
status?: WatchStatus[];
searchTerm?: string;
viewerCountMin?: number;
viewerCountMax?: number;
publisherFilter?: string;
dateRange?: {
startDate?: Date;
endDate?: Date;
};
}
export declare class ChannelStatusPanel extends BaseComponent {
private table;
private container;
private headerBox;
private footerBox;
private noDataBox;
private detailsPopup;
private batchDialog;
private channels;
private filteredChannels;
private selectedChannels;
private currentIndex;
private sortConfig;
private filterConfig;
private lastUpdateTime;
private selectionStartIndex;
private isRangeSelecting;
private lastJumpPosition;
private navigationHistory;
constructor(config: ChannelStatusPanelConfig, eventBus: EventEmitter);
protected createWidget(): void;
private initializeDetailsPopup;
private initializeBatchDialog;
private setupKeyBindings;
render(): void;
update(data: ChannelDetailModel[] | ChannelDetailModel | {
channels: ChannelDetailModel[];
}): void;
private convertToStatusInfo;
private compareValues;
private applyFiltersAndSort;
private updateTableDisplay;
private formatCellValue;
private formatStatusCell;
private updateStatusColors;
private getChannelHealthSummary;
private getStatusColors;
private getTerminalSafeColor;
private getStatusHealthLevel;
private formatDate;
private updateHeader;
private updateFooter;
private getHeaderContent;
private getFooterContent;
private getNoDataMessage;
private moveSelection;
private moveToTop;
private moveToBottom;
private showQuickJumpDialog;
private showGoToLineDialog;
private extendSelectionUp;
private extendSelectionDown;
private updateRangeSelection;
private clearRangeSelection;
private copySelectionInfo;
private copyChannelInfo;
private copyMultipleChannelsInfo;
private saveNavigationHistory;
private emitNavigationEvent;
jumpToLine(lineNumber: number): boolean;
jumpToChannel(searchTerm: string): boolean;
private toggleSelection;
private selectAll;
private deselectAll;
private cycleSortField;
private toggleSortOrder;
setMultiFieldSort(primary: keyof ChannelStatusInfo, primaryOrder: 'asc' | 'desc', secondary?: keyof ChannelStatusInfo, secondaryOrder?: 'asc' | 'desc'): void;
private showFilterDialog;
private showAdvancedFilterDialog;
private quickFilterByStatus;
private clearFilters;
setAdvancedFilter(filter: Partial<FilterConfig>): void;
private showChannelDetails;
private showBatchOperations;
private getConfig;
getSelectedChannels(): string[];
getCurrentChannel(): ChannelStatusInfo | null;
setFilter(filter: FilterConfig): void;
setSort(sort: SortConfig): void;
destroy(): void;
}
//# sourceMappingURL=channel-status.panel.d.ts.map