/**
* 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 += `
Log Into Another Account • Create Account
`;
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