export interface OmnifocusTask {
id: string;
name: string;
note: string;
flagged: boolean;
// Status
completed: boolean;
completionDate: string | null;
dropDate: string | null;
taskStatus: string; // One of Task.Status values
active: boolean;
// Dates
dueDate: string | null;
deferDate: string | null;
plannedDate: string | null;
effectivePlannedDate: string | null;
estimatedMinutes: number | null;
// Organization
tags: string[]; // Tag IDs
tagNames: string[]; // Human-readable tag names
parentId: string | null;
containingProjectId: string | null;
projectId: string | null;
// Task relationships
childIds: string[];
hasChildren: boolean;
sequential: boolean;
completedByChildren: boolean;
// Recurring task information
repetitionRule: string | null; // Textual representation of repetition rule
isRepeating: boolean;
repetitionMethod: string | null; // Fixed or due-based repetition
// Attachments
attachments: any[]; // FileWrapper representations
linkedFileURLs: string[];
// Notifications
notifications: any[]; // Task.Notification representations
// Settings
shouldUseFloatingTimeZone: boolean;
}
export interface OmnifocusDatabase {
exportDate: string;
tasks: OmnifocusTask[];
projects: Record<string, OmnifocusProject>;
folders: Record<string, OmnifocusFolder>;
tags: Record<string, OmnifocusTag>;
}
export interface OmnifocusProject {
id: string;
name: string;
status: string;
folderID: string | null;
sequential: boolean;
effectiveDueDate: string | null;
effectiveDeferDate: string | null;
dueDate: string | null;
deferDate: string | null;
completedByChildren: boolean;
containsSingletonActions: boolean;
note: string;
tasks: string[]; // Task IDs
flagged?: boolean;
estimatedMinutes?: number | null;
// Review fields (OmniFocus 4+)
reviewInterval: number | null; // seconds between reviews
nextReviewDate: string | null; // ISO date
lastReviewDate: string | null; // ISO date
}
export interface OmnifocusFolder {
id: string;
name: string;
parentFolderID: string | null;
status: string;
projects: string[]; // Project IDs
subfolders: string[]; // Subfolder IDs
}
export interface OmnifocusTag {
id: string;
name: string;
parentTagID: string | null;
active: boolean;
allowsNextAction: boolean;
tasks: string[]; // Task IDs
}