FIX: Đã fix cross-machine (v202608060500)

This commit is contained in:
2026-08-05 17:40:35 +07:00
parent 289746f187
commit e9f29e09ca
4 changed files with 56 additions and 12 deletions
+38 -9
View File
@@ -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 mi / browser n danh: localStorage TRNG (id/name không tn ti
// trên máy này) t m project Cloud GN NHT ca tài khon đang đăng
// nhp project to trên máy khác vn 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 nhp đng b lên Cloud (fire-and-forget): project m đưc t
// máy khác / browser n danh khi đăng nhp cùng tài khon.
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
+1 -1
View File
@@ -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 {