mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-11-20 23:56:12 +00:00
Various library/platform index update fixes
- IDE2 can start if the package index download fails. Closes #1084 - Split the lib and platform index update. Closes #1156 Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
This commit is contained in:
@@ -11,6 +11,7 @@ import type {
|
||||
} from '../../common/protocol/boards-service';
|
||||
import type { Programmer } from './boards-service';
|
||||
import type { Sketch } from './sketches-service';
|
||||
import { IndexUpdateSummary } from './notification-service';
|
||||
|
||||
export const CompilerWarningLiterals = [
|
||||
'None',
|
||||
@@ -112,6 +113,33 @@ export interface CoreService {
|
||||
* Refreshes the underling core gRPC client for the Arduino CLI.
|
||||
*/
|
||||
refresh(): Promise<void>;
|
||||
/**
|
||||
* Updates the index of the given index types and refreshes (`init`) the underlying core gRPC client.
|
||||
* If `types` is empty, only the refresh part will be executed.
|
||||
*/
|
||||
updateIndex({ types }: { types: IndexType[] }): Promise<void>;
|
||||
/**
|
||||
* If the IDE2 detects invalid or missing indexes on core client init,
|
||||
* IDE2 tries to update the indexes before the first frontend connects.
|
||||
* Use this method to determine whether the backend has already updated
|
||||
* the indexes before updating them.
|
||||
*
|
||||
* If yes, the connected frontend can update the local storage with the most
|
||||
* recent index update date-time for a particular index type,
|
||||
* and IDE2 can avoid the double indexes update.
|
||||
*/
|
||||
indexUpdateSummaryBeforeInit(): Promise<Readonly<IndexUpdateSummary>>;
|
||||
}
|
||||
|
||||
export const IndexTypeLiterals = ['platform', 'library'] as const;
|
||||
export type IndexType = typeof IndexTypeLiterals[number];
|
||||
export namespace IndexType {
|
||||
export function is(arg: unknown): arg is IndexType {
|
||||
return (
|
||||
typeof arg === 'string' && IndexTypeLiterals.includes(arg as IndexType)
|
||||
);
|
||||
}
|
||||
export const All: IndexType[] = IndexTypeLiterals.filter(is);
|
||||
}
|
||||
|
||||
export namespace CoreService {
|
||||
|
||||
@@ -5,27 +5,62 @@ import type {
|
||||
Config,
|
||||
ProgressMessage,
|
||||
Sketch,
|
||||
IndexType,
|
||||
} from '../protocol';
|
||||
import type { LibraryPackage } from './library-service';
|
||||
|
||||
/**
|
||||
* Values are [ISO 8601](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)
|
||||
* strings representing the date-time when the update of the index has been completed.
|
||||
*/
|
||||
export type IndexUpdateSummary = {
|
||||
[T in IndexType]: string;
|
||||
} & { message?: string };
|
||||
export interface IndexUpdateParams {
|
||||
/**
|
||||
* Application unique ID of the progress.
|
||||
*/
|
||||
readonly progressId: string;
|
||||
/**
|
||||
* The type of the index is which is being updated.
|
||||
*/
|
||||
readonly types: IndexType[];
|
||||
}
|
||||
export type IndexUpdateWillStartParams = IndexUpdateParams;
|
||||
export interface IndexUpdateDidCompleteParams
|
||||
extends Omit<IndexUpdateParams, 'types'> {
|
||||
readonly summary: IndexUpdateSummary;
|
||||
}
|
||||
export interface IndexUpdateDidFailParams extends IndexUpdateParams {
|
||||
/**
|
||||
* Describes the reason of the index update failure.
|
||||
*/
|
||||
readonly message: string;
|
||||
}
|
||||
|
||||
export interface NotificationServiceClient {
|
||||
notifyIndexWillUpdate(progressId: string): void;
|
||||
// Index
|
||||
notifyIndexUpdateWillStart(params: IndexUpdateWillStartParams): void;
|
||||
notifyIndexUpdateDidProgress(progressMessage: ProgressMessage): void;
|
||||
notifyIndexDidUpdate(progressId: string): void;
|
||||
notifyIndexUpdateDidFail({
|
||||
progressId,
|
||||
message,
|
||||
}: {
|
||||
progressId: string;
|
||||
message: string;
|
||||
}): void;
|
||||
notifyIndexUpdateDidComplete(params: IndexUpdateDidCompleteParams): void;
|
||||
notifyIndexUpdateDidFail(params: IndexUpdateDidFailParams): void;
|
||||
|
||||
// Daemon
|
||||
notifyDaemonDidStart(port: string): void;
|
||||
notifyDaemonDidStop(): void;
|
||||
|
||||
// CLI config
|
||||
notifyConfigDidChange(event: { config: Config | undefined }): void;
|
||||
|
||||
// Platforms
|
||||
notifyPlatformDidInstall(event: { item: BoardsPackage }): void;
|
||||
notifyPlatformDidUninstall(event: { item: BoardsPackage }): void;
|
||||
|
||||
// Libraries
|
||||
notifyLibraryDidInstall(event: { item: LibraryPackage }): void;
|
||||
notifyLibraryDidUninstall(event: { item: LibraryPackage }): void;
|
||||
|
||||
// Boards discovery
|
||||
notifyAttachedBoardsDidChange(event: AttachedBoardsChangeEvent): void;
|
||||
notifyRecentSketchesDidChange(event: { sketches: Sketch[] }): void;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user