feat(media): implement integrated media manager with sidebar and picker
- Implement DriveService and ShopifyMediaService for backend operations - Create MediaSidebar.html with premium UI and auto-polling - Integrate Google Picker API for robust file selection - Orchestrate sync logic via MediaService (Drive -> Staged Upload -> Shopify) - Add secure config handling for API keys and tokens - Update ppsscript.json with required OAuth scopes - Update MEMORY.md and README.md with architecture details
This commit is contained in:
55
src/services/MockDriveService.ts
Normal file
55
src/services/MockDriveService.ts
Normal file
@ -0,0 +1,55 @@
|
||||
import { IDriveService } from "../interfaces/IDriveService"
|
||||
|
||||
export class MockDriveService implements IDriveService {
|
||||
private folders: Map<string, any> = new Map() // id -> folder
|
||||
private files: Map<string, any[]> = new Map() // folderId -> files
|
||||
|
||||
constructor() {
|
||||
// Setup root folder mock if needed or just handle dynamic creation
|
||||
}
|
||||
|
||||
getOrCreateFolder(folderName: string, parentFolderId: string): GoogleAppsScript.Drive.Folder {
|
||||
// Mock implementation finding by name "under" parent
|
||||
const key = `${parentFolderId}/${folderName}`
|
||||
if (!this.folders.has(key)) {
|
||||
const newFolder = {
|
||||
getId: () => `mock_folder_${folderName}_id`,
|
||||
getName: () => folderName,
|
||||
getUrl: () => `https://mock.drive/folders/${folderName}`,
|
||||
createFile: (blob) => this.saveFile(blob, `mock_folder_${folderName}_id`)
|
||||
} as unknown as GoogleAppsScript.Drive.Folder;
|
||||
this.folders.set(key, newFolder)
|
||||
}
|
||||
return this.folders.get(key)
|
||||
}
|
||||
|
||||
saveFile(blob: GoogleAppsScript.Base.Blob, folderId: string): GoogleAppsScript.Drive.File {
|
||||
const newFile = {
|
||||
getId: () => `mock_file_${Date.now()}`,
|
||||
getName: () => blob.getName(),
|
||||
getBlob: () => blob,
|
||||
getUrl: () => `https://mock.drive/files/${blob.getName()}`,
|
||||
getLastUpdated: () => new Date()
|
||||
} as unknown as GoogleAppsScript.Drive.File
|
||||
|
||||
if (!this.files.has(folderId)) {
|
||||
this.files.set(folderId, [])
|
||||
}
|
||||
this.files.get(folderId).push(newFile)
|
||||
console.log(`[MockDrive] Saved file ${newFile.getName()} to ${folderId}. Total files: ${this.files.get(folderId).length}`)
|
||||
return newFile
|
||||
}
|
||||
|
||||
getFiles(folderId: string): GoogleAppsScript.Drive.File[] {
|
||||
return this.files.get(folderId) || []
|
||||
}
|
||||
|
||||
getFileById(id: string): GoogleAppsScript.Drive.File {
|
||||
// Naive lookup for mock
|
||||
for (const fileList of this.files.values()) {
|
||||
const found = fileList.find(f => f.getId() === id)
|
||||
if (found) return found
|
||||
}
|
||||
throw new Error("File not found in mock")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user