/
Gabryelf
/
Icons-Customize-Gen
Обзор
Документация
Войти
/
Gabryelf
/
Icons-Customize-Gen
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
js/core/Storage.js
120 строк
3 KB
Valeev Serj
exp_version_0.0.1-->0.02
17 июл 2026, 00:16
17 июл 2026, 00:16
6c659ac
Код
Авторство
О чём код?
// core/Storage.js import { UserProfile } from '../models/UserProfile.js'; import { ProjectMeta } from '../models/ProjectMeta.js'; export class Storage { static PREFIX = 'iconforge_'; static VERSION = '2.0'; static save(key, data) { try { const payload = { version: this.VERSION, timestamp: Date.now(), data }; localStorage.setItem(this.PREFIX + key, JSON.stringify(payload)); return true; } catch (e) { console.warn('[Storage] save error:', e); return false; } } static load(key) { try { const raw = localStorage.getItem(this.PREFIX + key); if (!raw) return null; const payload = JSON.parse(raw); if (payload.version !== this.VERSION) return null; return payload.data; } catch (e) { console.warn('[Storage] load error:', e); return null; } } static remove(key) { localStorage.removeItem(this.PREFIX + key); } static loadProfile() { const data = this.load('profile'); return data ? new UserProfile(data) : new UserProfile(); } static saveProfile(profile) { this.save('profile', profile); } static getAllProjects() { const keys = Object.keys(localStorage); const projectKeys = keys.filter(k => k.startsWith(this.PREFIX + 'project_') && k !== this.PREFIX + 'project_index' ); const projects = []; for (const key of projectKeys) { try { const raw = localStorage.getItem(key); if (!raw) continue; const payload = JSON.parse(raw); if (payload.data && payload.data.meta) { projects.push(new ProjectMeta(payload.data.meta)); } } catch (e) { console.warn('Ошибка загрузки проекта:', e); } } return projects; } static saveProject(id, projectData, meta) { // Генерируем миниатюру, если её нет if (!meta.thumbnail) { // Создаём простую миниатюру на основе данных проекта meta.thumbnail = this.generateThumbnail(projectData); } this.save(`project_${id}`, { project: projectData, meta: meta }); return true; } static generateThumbnail(projectData) { // Создаём простую SVG миниатюру const layers = projectData.layers || []; if (layers.length === 0) { return ''; } // Берём первый слой для миниатюры const firstLayer = layers[0]; if (firstLayer && firstLayer.src) { // Используем первую иконку как миниатюру return firstLayer.src; } return ''; } static loadProject(id) { const data = this.load(`project_${id}`); if (!data) return null; return { project: data.project, meta: data.meta }; } static deleteProject(id) { this.remove(`project_${id}`); return true; } static generateId() { return Date.now().toString(36) + '_' + Math.random().toString(36).substr(2, 5); } }