From 250414f683db01f37194eb04070093b56e2ea67c Mon Sep 17 00:00:00 2001 From: LawnCable Date: Wed, 26 Sep 2018 19:07:54 +0200 Subject: added possibility to start manaplus without any server preselected --- assets/media/server/noServer/LICENCE_NOTICE | 2 + assets/media/server/noServer/background1.png | Bin 0 -> 118889 bytes assets/media/server/noServer/icon.svg | 89 +++++++++ package.json | 2 +- src/main/manaplus/manaplus.ts | 4 +- src/renderer/gameserver/data.ts | 24 ++- src/renderer/gameserver/server.ts | 267 ++++++++++++++------------- 7 files changed, 251 insertions(+), 137 deletions(-) create mode 100644 assets/media/server/noServer/LICENCE_NOTICE create mode 100644 assets/media/server/noServer/background1.png create mode 100644 assets/media/server/noServer/icon.svg diff --git a/assets/media/server/noServer/LICENCE_NOTICE b/assets/media/server/noServer/LICENCE_NOTICE new file mode 100644 index 0000000..0bf5ae8 --- /dev/null +++ b/assets/media/server/noServer/LICENCE_NOTICE @@ -0,0 +1,2 @@ +All things in this folder belong to ManaPlus +see https://gitlab.com/manaplus/manaplus/#5-licenses \ No newline at end of file diff --git a/assets/media/server/noServer/background1.png b/assets/media/server/noServer/background1.png new file mode 100644 index 0000000..05420f9 Binary files /dev/null and b/assets/media/server/noServer/background1.png differ diff --git a/assets/media/server/noServer/icon.svg b/assets/media/server/noServer/icon.svg new file mode 100644 index 0000000..ea95640 --- /dev/null +++ b/assets/media/server/noServer/icon.svg @@ -0,0 +1,89 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/package.json b/package.json index f619a5c..10047a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mana-launcher", - "version": "1.0.0", + "version": "1.0.1", "private": true, "homepage": "https://tmw2.org", "description": "A launcher for manaplus.", diff --git a/src/main/manaplus/manaplus.ts b/src/main/manaplus/manaplus.ts index 2f028b8..0c56b7d 100644 --- a/src/main/manaplus/manaplus.ts +++ b/src/main/manaplus/manaplus.ts @@ -109,7 +109,7 @@ function wasInitilized(){ async function makeParams(server: any,port: any,engine: any,username?: any,password?: any):Promise{ let parameters:string[] = []; - if(server && engine && port){ + if(server && engine && port && server != 'noServer'){ parameters.push(...[ "-s", server, "-y", engine, @@ -134,7 +134,7 @@ async function makeParams(server: any,port: any,engine: any,username?: any,passw "-L", localDataDir, "--screenshot-dir", screenshotsDir, ]); - //console.log(parameters); + console.log(parameters); return parameters; } diff --git a/src/renderer/gameserver/data.ts b/src/renderer/gameserver/data.ts index eb0f74f..e86c95b 100644 --- a/src/renderer/gameserver/data.ts +++ b/src/renderer/gameserver/data.ts @@ -75,8 +75,30 @@ const TMW = new GameServer( {parser:OnlineListParser.TMW, url:"https://server.themanaworld.org/"} ); +const noServer = new GameServer( + new GameServerProfile( + 'noServer', + 6901, + "tmwAthena" + ), + "Mana Plus", + "Open Mana Plus", + "Opens the ManaPlus client", + 'http://manaplus.org/changelog', + undefined, + [{isVideo:false,file:"noServer/background1.png"}], + "noServer/icon.svg", + [ + new socialLink("fas fa-home","Website","http://manaplus.org/"), + new socialLink("fab fa-gitlab","Gitlab","https://gitlab.com/manaplus/manaplus/"), + ], + undefined, + null +); + export const GameServers = [ TMW2, Evol, - TMW + TMW, + noServer, ] diff --git a/src/renderer/gameserver/server.ts b/src/renderer/gameserver/server.ts index 4c54235..654eaac 100644 --- a/src/renderer/gameserver/server.ts +++ b/src/renderer/gameserver/server.ts @@ -6,20 +6,20 @@ import { makeOnlineCounterList, OnlineListParser } from './onlineCount'; export default class GameServer { constructor( - public profile:GameServerProfile, - public menuName:string, - public name:string, - public shortDescription:string,// the server in 1-2 sentences - public newsPageUrl:string, - public newsLatestPage:{url:string,type:NewsType}, - public backgrounds:{isVideo:boolean,file:string}[], - public icon:string, - public socialLinks:socialLink[], - public TOSLink:string, - public OnlineList:{parser:OnlineListParser,url:string}, - ){} - - getMenuEntry():HTMLElement{ + public profile: GameServerProfile, + public menuName: string, + public name: string, + public shortDescription: string,// the server in 1-2 sentences + public newsPageUrl: string, + public newsLatestPage: { url: string, type: NewsType }, + public backgrounds: { isVideo: boolean, file: string }[], + public icon: string, + public socialLinks: socialLink[], + public TOSLink: string, + public OnlineList: { parser: OnlineListParser, url: string }, + ) { } + + getMenuEntry(): HTMLElement { const sidebarItem = document.createElement('div'); sidebarItem.classList.add("sidebarItem"); //Online counter @@ -42,44 +42,45 @@ export default class GameServer { title.appendChild(titleText); - title.addEventListener('click', ()=>{ - switchPage("SERVER",this.name); + title.addEventListener('click', () => { + switchPage("SERVER", this.name); }); - - let onlineBoxActive:boolean = false; - let onlineBoxSchouldBeActive:boolean = false; - let updateOnlineContainer = async () => { - if(onlineBoxSchouldBeActive == onlineBoxActive)return; - onlineBoxActive = onlineBoxSchouldBeActive; - while (OnlineCounterContainer.firstChild) { + if (this.profile.address != 'noServer') { + let onlineBoxActive: boolean = false; + let onlineBoxSchouldBeActive: boolean = false; + let updateOnlineContainer = async () => { + if (onlineBoxSchouldBeActive == onlineBoxActive) return; + onlineBoxActive = onlineBoxSchouldBeActive; + while (OnlineCounterContainer.firstChild) { OnlineCounterContainer.removeChild(OnlineCounterContainer.firstChild); + } + if (onlineBoxSchouldBeActive) { + OnlineCounterContainer.appendChild(await makeOnlineCounterList(this)); + } + console.log(onlineBoxSchouldBeActive); } - if(onlineBoxSchouldBeActive){ - OnlineCounterContainer.appendChild(await makeOnlineCounterList(this)); - } - console.log(onlineBoxSchouldBeActive); - } - let SetUpdate = (state:boolean)=>{ - onlineBoxSchouldBeActive = state; - setTimeout(()=>{updateOnlineContainer();},160); - }; + let SetUpdate = (state: boolean) => { + onlineBoxSchouldBeActive = state; + setTimeout(() => { updateOnlineContainer(); }, 160); + }; - title.addEventListener("mouseover", ()=>{ - SetUpdate(true); - }); + title.addEventListener("mouseover", () => { + SetUpdate(true); + }); - title.addEventListener("mouseout", ()=>{ - SetUpdate(false); - }); + title.addEventListener("mouseout", () => { + SetUpdate(false); + }); - OnlineCounterContainer.addEventListener("mouseover", ()=>{ - SetUpdate(true); - }); + OnlineCounterContainer.addEventListener("mouseover", () => { + SetUpdate(true); + }); - OnlineCounterContainer.addEventListener("mouseout", ()=>{ - SetUpdate(false); - }); + OnlineCounterContainer.addEventListener("mouseout", () => { + SetUpdate(false); + }); + } sidebarItem.appendChild(title); @@ -91,14 +92,14 @@ export default class GameServer { info.innerHTML = 'Information'; container.appendChild(info); - info.addEventListener('click', ()=>{ - switchPage("SERVER",this.name); + info.addEventListener('click', () => { + switchPage("SERVER", this.name); }); const news = document.createElement('div'); news.innerHTML = 'News '; - if(this.newsPageUrl && this.newsPageUrl!==null){ - news.addEventListener('click', ()=>{ + if (this.newsPageUrl && this.newsPageUrl !== null) { + news.addEventListener('click', () => { shell.openExternal(this.newsPageUrl); }); } else { @@ -111,35 +112,35 @@ export default class GameServer { screenshots.innerHTML = 'Screenshots'; container.appendChild(screenshots); - screenshots.addEventListener('click', ()=>{ + screenshots.addEventListener('click', () => { switchPage("SERVER", this.name, "SCREENSHOTS"); - }); - + }) const preferences = document.createElement('div'); - preferences.innerHTML = 'Preferences'; - preferences.addEventListener('click', ()=>{ - switchPage("SERVER",this.name,"PREF"); - }); - container.appendChild(preferences); - + if(this.profile.address != 'noServer'){ + preferences.innerHTML = 'Preferences'; + preferences.addEventListener('click', () => { + switchPage("SERVER", this.name, "PREF"); + }); + container.appendChild(preferences); + } sidebarItem.appendChild(container); //event Target / interactivity const events = document.createElement('span'); events.classList.add("switch-page-event"); - events.addEventListener("site-changed", (event:CustomEvent)=>{ + events.addEventListener("site-changed", (event: CustomEvent) => { sidebarItem.classList.remove("selected"); info.classList.remove("selected"); //news.classList.remove("selected"); screenshots.classList.remove("selected"); preferences.classList.remove("selected"); - if(event.detail.sitetype === "SERVER" && event.detail.page === this.name){ + if (event.detail.sitetype === "SERVER" && event.detail.page === this.name) { sidebarItem.classList.add("selected"); // if(event.detail.subPage === "NEWS") { // news.classList.add("selected"); // } else - if(event.detail.subPage === "PREF") { + if (event.detail.subPage === "PREF") { preferences.classList.add("selected"); - } else if(event.detail.subPage === "SCREENSHOTS") { + } else if (event.detail.subPage === "SCREENSHOTS") { screenshots.classList.add("selected"); } else { info.classList.add("selected"); @@ -151,13 +152,13 @@ export default class GameServer { return sidebarItem; } - getPage(type:string):HTMLElement{ + getPage(type: string): HTMLElement { const page = document.createElement('div'); - if (typeof(type) === undefined || type == null){ + if (typeof (type) === undefined || type == null) { page.appendChild(this.getInfoPage()); - } else if (type == "SCREENSHOTS"){ + } else if (type == "SCREENSHOTS") { page.appendChild(this.getScreenshotsPage()); - } else if (type == "PREF"){ + } else if (type == "PREF") { page.appendChild(this.getPreferencesPage()); } else { const content = document.createElement('div'); @@ -169,7 +170,7 @@ export default class GameServer { return page; } - private getInfoPage():HTMLElement{ + private getInfoPage(): HTMLElement { const content = document.createElement('div'); content.classList.add("infoServerPage"); @@ -180,8 +181,8 @@ export default class GameServer { const socialContainer = document.createElement('div'); socialContainer.classList.add("socialContainer"); - setTimeout(()=>{ - this.socialLinks.forEach((link)=>{ + setTimeout(() => { + this.socialLinks.forEach((link) => { socialContainer.appendChild(link.getHTML()); }); }, 5); @@ -191,17 +192,17 @@ export default class GameServer { shrtDsrption.classList.add("shortDescription"); shrtDsrption.innerText = this.shortDescription; content.appendChild(shrtDsrption); - if(this.newsLatestPage && this.newsLatestPage != null){ + if (this.newsLatestPage && this.newsLatestPage != null) { const latestNews = document.createElement('div'); latestNews.classList.add("news"); content.appendChild(latestNews); - News.get(this.newsLatestPage.url,this.newsLatestPage.type).then((result:string)=>{ + News.get(this.newsLatestPage.url, this.newsLatestPage.type).then((result: string) => { latestNews.innerHTML = result; const aTags = latestNews.getElementsByTagName("a"); for (var i = 0; i < aTags.length; i++) { const href = aTags[i].href.toString(); - aTags[i].addEventListener('click', ()=>{ - shell.openExternal(href); + aTags[i].addEventListener('click', () => { + shell.openExternal(href); }); aTags[i].href = "#"; } @@ -211,7 +212,7 @@ export default class GameServer { return content; } - private getPreferencesPage():HTMLElement{ + private getPreferencesPage(): HTMLElement { const content = document.createElement('div'); content.classList.add("preferencesServerPage"); @@ -226,22 +227,22 @@ export default class GameServer { const loginUsernameLabel = document.createElement('label'); loginUsernameLabel.innerText = "Username"; const loginUsername = document.createElement('input') as HTMLInputElement; - loginUsername.value = localStorage.getItem("2_username_"+this.profile.address); + loginUsername.value = localStorage.getItem("2_username_" + this.profile.address); loginUsernameLabel.appendChild(loginUsername); const loginPinLabel = document.createElement('label'); loginPinLabel.innerText = "Password"; const loginPin = document.createElement('input') as HTMLInputElement; loginPin.type = "password"; - loginPin.value = localStorage.getItem("2_pin_"+this.profile.address); + loginPin.value = localStorage.getItem("2_pin_" + this.profile.address); loginPinLabel.appendChild(loginPin); - const saveBtn = document.createElement('button') as HTMLButtonElement; + const saveBtn = document.createElement('button') as HTMLButtonElement; saveBtn.innerText = "save"; - saveBtn.addEventListener('click', ()=>{ - localStorage.setItem("2_username_"+this.profile.address, loginUsername.value); - localStorage.setItem("2_pin_"+this.profile.address, loginPin.value); + saveBtn.addEventListener('click', () => { + localStorage.setItem("2_username_" + this.profile.address, loginUsername.value); + localStorage.setItem("2_pin_" + this.profile.address, loginPin.value); this.updateLoginTextElement(); }); @@ -253,94 +254,94 @@ export default class GameServer { return content; } - private getScreenshotsPage():HTMLElement{ + private getScreenshotsPage(): HTMLElement { const screenshotContainer = document.createElement('div'); screenshotContainer.classList.add("screenshotsContainer"); - screenshotContainer.id="screenshots"; + screenshotContainer.id = "screenshots"; ipcRenderer.send('getScreenshots', this.profile.address); return screenshotContainer; } - updateLoginTextElement():void{ - const account = localStorage.getItem("2_username_"+this.profile.address); - const pin = localStorage.getItem("2_pin_"+this.profile.address); + updateLoginTextElement(): void { + const account = localStorage.getItem("2_username_" + this.profile.address); + const pin = localStorage.getItem("2_pin_" + this.profile.address); const element = document.getElementById('LoginText'); - if(account && pin){ + if (account && pin) { element.innerHTML = `Logged in as ${account}`; - }else{ + } else { element.innerHTML = "Automatic login not set up"; } } - play(){ - const args:any = JSON.parse(JSON.stringify(this.profile)); - args.username = localStorage.getItem("2_username_"+this.profile.address); - args.password = localStorage.getItem("2_pin_"+this.profile.address); + play() { + const args: any = JSON.parse(JSON.stringify(this.profile)); + args.username = localStorage.getItem("2_username_" + this.profile.address); + args.password = localStorage.getItem("2_pin_" + this.profile.address); ipcRenderer.send('play', args); } } export class socialLink { constructor( - public icon:string,// has to be one from font awesome -https://fontawesome.com/icons - public tooltip:string, - public url:string - ){} + public icon: string,// has to be one from font awesome -https://fontawesome.com/icons + public tooltip: string, + public url: string + ) { } - getHTML():HTMLElement{ + getHTML(): HTMLElement { //
const element = document.createElement('button'); - element.onclick = ()=>{this.open()}; + element.onclick = () => { this.open() }; element.innerHTML = ``; element.title = this.tooltip; return element; } - open(){ + open() { console.log("A link was clicked!", this.url); - if(this.url) - shell.openExternal(this.url.indexOf("://")!==-1?this.url:`https://${this.url}`); + if (this.url) + shell.openExternal(this.url.indexOf("://") !== -1 ? this.url : `https://${this.url}`); } } -ipcRenderer.on('getScreenshots', (event:any, data:{dir:string, screenshots:string[]}) => { +ipcRenderer.on('getScreenshots', (event: any, data: { dir: string, screenshots: string[] }) => { console.log(data) - const screenshots = document.getElementById('screenshots'); - if(screenshots){ - // Display screenshots if that tab is open - if(data.screenshots.length!==0){ - data.screenshots.forEach((fileName:string)=>{ - const screenshot = document.createElement("div"); - screenshot.classList.add("screenshot"); - screenshots.appendChild(screenshot); - const img = document.createElement("img"); - img.src = data.dir+fileName; - screenshot.appendChild(img); - - // const text = document.createElement("span"); - // text.innerText = fileName; - // screenshot.appendChild(text); - screenshot.addEventListener('dragstart', (event) => { - event.preventDefault() - ipcRenderer.send('dragFileOut', data.dir+fileName) - }) + const screenshots = document.getElementById('screenshots'); + if (screenshots) { + // Display screenshots if that tab is open + if (data.screenshots.length !== 0) { + data.screenshots.forEach((fileName: string) => { + const screenshot = document.createElement("div"); + screenshot.classList.add("screenshot"); + screenshots.appendChild(screenshot); + const img = document.createElement("img"); + img.src = data.dir + fileName; + screenshot.appendChild(img); + + // const text = document.createElement("span"); + // text.innerText = fileName; + // screenshot.appendChild(text); + screenshot.addEventListener('dragstart', (event) => { + event.preventDefault() + ipcRenderer.send('dragFileOut', data.dir + fileName) + }) - }); - } else { - const nothingHere = document.createElement("p"); - nothingHere.classList.add("nothingHere"); - nothingHere.innerText = "There is nothing here, yet. Make some screenshots in Game and come back here. The default key for snaping screenshots is 'P'." + }); + } else { + const nothingHere = document.createElement("p"); + nothingHere.classList.add("nothingHere"); + nothingHere.innerText = "There is nothing here, yet. Make some screenshots in Game and come back here. The default key for snaping screenshots is 'P'." - screenshots.appendChild(nothingHere); - } + screenshots.appendChild(nothingHere); + } - const openFolderButton = document.createElement('button'); - openFolderButton.innerText = "Open folder to see all"; - openFolderButton.addEventListener('click', ()=>{ - shell.openItem(data.dir); - }); - screenshots.appendChild(openFolderButton); - } + const openFolderButton = document.createElement('button'); + openFolderButton.innerText = "Open folder to see all"; + openFolderButton.addEventListener('click', () => { + shell.openItem(data.dir); + }); + screenshots.appendChild(openFolderButton); + } }) -- cgit v1.2.3-70-g09d2