83 lines
3.0 KiB
JavaScript
83 lines
3.0 KiB
JavaScript
import { api, post, sourceLabel, normalizeSource, setMessage } from './ui-core.js';
|
|
import { createShell } from './shell.js';
|
|
import { createLibrary } from './library.js';
|
|
import { createDownloads } from './downloads.js';
|
|
import { createSettings } from './settings.js';
|
|
import { createFollowing } from './following.js';
|
|
import { createDetails } from './details.js';
|
|
import { initializeViewer } from './viewer.js';
|
|
import { createAccount } from './account.js';
|
|
import { createUsers } from './users.js';
|
|
import { createEmby } from './emby.js';
|
|
|
|
const app = {api, post};
|
|
app.play = (id, title) => {
|
|
if (window.JukuHistory.get(id)) window.dramaPlayer.openHistory(id, title);
|
|
else window.dramaPlayer.open(id, title);
|
|
app.following.acknowledge(id);
|
|
app.library.refreshDrama(id);
|
|
};
|
|
app.shell = createShell(app);
|
|
app.library = createLibrary(app);
|
|
app.downloads = createDownloads(app);
|
|
app.settings = createSettings(app);
|
|
app.following = createFollowing(app);
|
|
app.details = createDetails(app);
|
|
app.account = createAccount(app);
|
|
app.users = createUsers(app);
|
|
app.emby = createEmby(app);
|
|
|
|
app.shell.init();
|
|
window.addEventListener('jukuviewerchange', () => {
|
|
document.getElementById('viewerNotice').textContent = '账号权限已变化,正在重新加载…';
|
|
document.getElementById('viewerNotice').hidden = false;
|
|
window.location.reload();
|
|
});
|
|
|
|
async function initialize() {
|
|
try {
|
|
app.viewer = await initializeViewer();
|
|
} catch (error) {
|
|
const notice = document.getElementById('viewerNotice');
|
|
const retry = document.createElement('button');
|
|
retry.type = 'button';
|
|
retry.className = 'secondary';
|
|
retry.textContent = '重试';
|
|
retry.addEventListener('click', () => window.location.reload());
|
|
notice.replaceChildren(document.createTextNode(error.message), retry);
|
|
notice.hidden = false;
|
|
return;
|
|
}
|
|
if (app.account.init()) return;
|
|
app.users.init();
|
|
app.emby.init();
|
|
app.shell.access();
|
|
window.JukuVIP.init(app.viewer?.sources?.includes('huangdou') !== false);
|
|
window.JukuHistory.init({
|
|
api, post,
|
|
sourceLabel: value => sourceLabel(normalizeSource(value) || value),
|
|
onChanged: () => {app.library.refreshFollowing(); app.following.render(); app.details.refresh(); app.downloads.render();},
|
|
onError: message => setMessage(message, true),
|
|
play: app.play
|
|
});
|
|
window.JukuRankings.init({
|
|
api, post,
|
|
getSource: () => document.getElementById('sourceSelect').value,
|
|
getDrama: id => app.library.get(id),
|
|
sourceLabel,
|
|
onLibraryChanged: () => app.library.refresh(),
|
|
canDownload: () => !app.viewer?.onlineOnly,
|
|
onDownloadsChanged: app.downloads.refresh,
|
|
getDownloadQuality: app.downloads.quality,
|
|
play: app.play
|
|
});
|
|
Promise.allSettled([app.settings.init(), app.library.init(), app.downloads.init(), app.following.init()]).then(results => {
|
|
const failure = results.find(result => result.status === 'rejected');
|
|
if (failure) setMessage('部分功能未能初始化:' + (failure.reason?.message || '请刷新页面重试'), true);
|
|
document.documentElement.dataset.ready = 'true';
|
|
});
|
|
|
|
}
|
|
|
|
initialize();
|