/** * Copyright (C) 2024 Puter Technologies Inc. * * This file is part of Puter. * * Puter is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ import UIWindow from './UIWindow.js' import UIWindowLogin from './UIWindowLogin.js' import UIWindowSignup from './UIWindowSignup.js' async function UIWindowSessionList(options){ options = options ?? {}; options.reload_on_success = options.reload_on_success ?? true; return new Promise(async (resolve) => { let h = ''; h += `
`; h += `
Signing in...
` h += `
`; h += `

Sign in with Puter

` for (let index = 0; index < logged_in_users.length; index++) { const l_user = logged_in_users[index]; h += `
${l_user.username}
`; } h += `
`; h += `
`; h += `
`; const el_window = await UIWindow({ title: 'Session List!', app: 'session-list', single_instance: true, icon: null, uid: null, is_dir: false, body_content: h, has_head: false, selectable_body: false, draggable_body: options.draggable_body ?? true, allow_context_menu: false, is_resizable: false, is_droppable: false, init_center: true, allow_native_ctxmenu: false, allow_user_select: false, width: 350, height: 'auto', dominant: true, show_in_taskbar: false, update_window_url: false, cover_page: options.cover_page ?? false, onAppend: function(this_window){ }, window_class: 'window-session-list', body_css: { width: 'initial', height: '100%', 'background-color': 'rgb(245 247 249)', 'backdrop-filter': 'blur(3px)', 'display': 'flex', 'flex-direction': 'column', 'justify-content': 'center', } }) $(el_window).find('.login-c2a-session-list').on('click', async function(e){ const login = await UIWindowLogin({ referrer: options.referrer, reload_on_success: options.reload_on_success, cover_page: options.cover_page ?? false, has_head: options.has_head, send_confirmation_code: options.send_confirmation_code, window_options: { has_head: false, cover_page: options.cover_page ?? false, } }); if(login){ if(options.reload_on_success){ // disable native browser exit confirmation window.onbeforeunload = null; // refresh location.reload(); }else{ resolve(login); } } }) $(el_window).find('.signup-c2a-session-list').on('click', async function(e){ $('.signup-c2a-clickable').parents('.window').close(); // create Signup window const signup = await UIWindowSignup({ referrer: options.referrer, reload_on_success: options.reload_on_success, send_confirmation_code: options.send_confirmation_code, window_options: { has_head: false, cover_page: options.cover_page ?? false, } }); if(signup){ if(options.reload_on_success){ // disable native browser exit confirmation window.onbeforeunload = null; // refresh location.reload(); }else{ resolve(signup); } } }) $(el_window).find('.session-entry').on('click', function(e){ $(el_window).find('.loading').css({display: 'flex'}); setTimeout(() => { let selected_uuid = $(this).attr('data-uuid'); let selected_user; for (let index = 0; index < window.logged_in_users.length; index++) { const l_user = logged_in_users[index]; if(l_user.uuid === selected_uuid){ selected_user = l_user; } } // new logged in user update_auth_data(selected_user.auth_token, selected_user); if(options.reload_on_success){ // disable native browser exit confirmation window.onbeforeunload = null; // refresh location.reload(); }else{ resolve(true); } }, 500); }) }) } export default UIWindowSessionList