FIX: Đã fix cross-machine (v202608060500)
This commit is contained in:
+38
-9
@@ -14775,17 +14775,37 @@ const App = () => {
|
||||
if (!pendingWasNull) return;
|
||||
|
||||
var lastId = localStorage.getItem('sonic_project_id');
|
||||
if (!lastId) return;
|
||||
var lastName = localStorage.getItem('sonic_project_name') || 'Dự án';
|
||||
try {
|
||||
var parsed = null;
|
||||
if (lastId.startsWith('local_')) {
|
||||
var localData = localStorage.getItem('sonic_local_project_data');
|
||||
if (localData) parsed = JSON.parse(localData);
|
||||
} else {
|
||||
var proj = await window.SonicAPI.getCloudProject(lastId);
|
||||
if (proj) parsed = JSON.parse(proj.data_json);
|
||||
var parsed = null;
|
||||
if (!lastId) {
|
||||
// Máy mới / browser ẩn danh: localStorage TRỐNG (id/name không tồn tại
|
||||
// trên máy này) → tự mở project Cloud GẦN NHẤT của tài khoản đang đăng
|
||||
// nhập — project tạo trên máy khác vẫn mở được ngay.
|
||||
const prof = currentUser || (function () { try { return JSON.parse(localStorage.getItem('sonic_user') || 'null'); } catch (e) { return null; } })();
|
||||
if (prof && window.SonicAPI && window.SonicAPI.listCloudProjects) {
|
||||
try {
|
||||
const cloudList = await window.SonicAPI.listCloudProjects();
|
||||
if (cloudList && cloudList.length > 0) {
|
||||
const latest = cloudList[0]; // backend ORDER BY updated_at DESC
|
||||
lastId = latest.id;
|
||||
lastName = latest.name || lastName;
|
||||
const proj = await window.SonicAPI.getCloudProject(lastId);
|
||||
if (proj && proj.data_json) parsed = JSON.parse(proj.data_json);
|
||||
}
|
||||
} catch (e) { console.warn('restore cloud fallback error:', e); }
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
if (lastId.startsWith('local_')) {
|
||||
var localData = localStorage.getItem('sonic_local_project_data');
|
||||
if (localData) parsed = JSON.parse(localData);
|
||||
} else {
|
||||
var proj = await window.SonicAPI.getCloudProject(lastId);
|
||||
if (proj) parsed = JSON.parse(proj.data_json);
|
||||
}
|
||||
} catch (e) { console.warn('restore load error:', e); }
|
||||
}
|
||||
try {
|
||||
if (!parsed) return;
|
||||
var restoredBpm = bpm;
|
||||
var restoredTracks = [];
|
||||
@@ -21740,6 +21760,15 @@ const App = () => {
|
||||
setProjectName(finalName);
|
||||
window.SonicStorage.exportProjectToSFS(projectSchemaObj);
|
||||
showToast(`Đã lưu dự án local "${finalName}" thành công!`, "success");
|
||||
// Đã đăng nhập → đồng bộ lên Cloud (fire-and-forget): project mở được từ
|
||||
// máy khác / browser ẩn danh khi đăng nhập cùng tài khoản.
|
||||
if (currentUser && window.SonicAPI && window.SonicAPI.saveCloudProject) {
|
||||
window.SonicAPI.saveCloudProject(finalName, dataStr).then(function (res) {
|
||||
if (res && res.project_id) {
|
||||
console.log('[Cloud] local project synced:', res.project_id);
|
||||
}
|
||||
}).catch(function (e) { console.warn('Cloud sync local project failed:', e); });
|
||||
}
|
||||
};
|
||||
|
||||
const handleSaveCloudProject = async (name, existingProjectId) => {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -24,7 +24,7 @@
|
||||
<script src="/static/js/services/midiExtractor.js?v=202607281052"></script>
|
||||
<script src="/static/js/services/promptTemplateManager.js?v=202607281039"></script>
|
||||
<script src="/static/js/services/undoRedoEngine.js?v=202607290941"></script>
|
||||
<script src="/static/js/app.precompiled.js?v=202608060430" defer></script>
|
||||
<script src="/static/js/app.precompiled.js?v=202608060500" defer></script>
|
||||
<link rel="stylesheet" href="/static/css/styles.css?v=202607271016">
|
||||
<style>
|
||||
:root {
|
||||
|
||||
Reference in New Issue
Block a user