« get me outta code hell

Experimental telnet server - mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
path: root/index.js
diff options
context:
space:
mode:
authorFlorrie <towerofnix@gmail.com>2019-07-06 00:16:02 -0300
committerFlorrie <towerofnix@gmail.com>2019-07-06 11:23:55 -0300
commit8512c44b6403c126bf961c0fd0c2798d6bfdfcea (patch)
tree626ac64af2fb889fd7ec1a1032d14df5a87d4ad6 /index.js
parentf96eeceefc94256babe016b0e18b95f0cf467880 (diff)
Experimental telnet server
Diffstat (limited to 'index.js')
-rwxr-xr-xindex.js88
1 files changed, 23 insertions, 65 deletions
diff --git a/index.js b/index.js
index 102e75a..10e0696 100755
--- a/index.js
+++ b/index.js
@@ -5,7 +5,9 @@
 const { getAllCrawlersForArg } = require('./crawlers')
 const AppElement = require('./ui')
 const Backend = require('./backend')
+const TelnetServer = require('./telnet-server')
 const processSmartPlaylist = require('./smart-playlist')
+const setupClient = require('./client')
 
 const {
   getItemPathString,
@@ -48,12 +50,14 @@ process.on('unhandledRejection', error => {
 })
 
 async function main() {
-  const interfacer = new CommandLineInterfacer()
-
-  const root = new Root(interfacer)
-
   const backend = new Backend()
 
+  const result = await backend.setup()
+  if (result.error) {
+    console.error(result.error)
+    process.exit(1)
+  }
+
   backend.on('playing', track => {
     if (track) {
       writeFile(backend.rootDirectory + '/current-track.txt',
@@ -63,58 +67,24 @@ async function main() {
     }
   })
 
-  const appElement = new AppElement(backend)
-  root.addChild(appElement)
-  root.select(appElement)
-
-  const result = await backend.setup()
-
-  if (result.error) {
-    console.error(result.error)
-    process.exit(1)
-  }
-
-  const cleanTerminal = () => {
-    process.stdout.write(ansi.cleanCursor())
-    process.stdout.write(ansi.disableAlternateScreen())
-  }
-
-  const dirtyTerminal = () => {
-    process.stdout.write(ansi.enableAlternateScreen())
-    process.stdout.write(ansi.startTrackingMouse())
-  }
+  const { appElement, renderInterval } = await setupClient({
+    backend,
+    interfacer: new CommandLineInterfacer(),
+    writable: process.stdout
+  })
 
   appElement.on('quitRequested', () => {
-    cleanTerminal()
+    if (telnetServer) {
+      telnetServer.disconnectAllSockets('User closed mtui - see you!')
+    }
+    clearInterval(renderInterval)
     process.exit(0)
   })
 
   appElement.on('suspendRequested', () => {
-    cleanTerminal()
     process.kill(process.pid, 'SIGTSTP')
   })
 
-  let grouplike = {
-    name: 'My ~/Music Library',
-    comment: (
-      '(Add songs and folders to ~/Music to make them show up here,' +
-      ' or pass mtui your own playlist.json file!)'),
-    source: ['crawl-local', process.env.HOME + '/Music']
-  }
-
-  grouplike = await processSmartPlaylist(grouplike)
-
-  appElement.tabber.currentElement.loadGrouplike(grouplike)
-
-  root.select(appElement)
-
-  // Check size, now that we're about to display.
-  const size = await interfacer.getScreenSize()
-  root.w = size.width
-  root.h = size.height
-  root.fixAllLayout()
-
-  dirtyTerminal()
   process.on('SIGCONT', () => {
     flushable.resizeScreen({lines: flushable.screenLines, cols: flushable.screenCols})
     process.stdin.setRawMode(false)
@@ -122,19 +92,6 @@ async function main() {
     dirtyTerminal()
   })
 
-  const flushable = new Flushable(process.stdout, true)
-  flushable.resizeScreen(size)
-  flushable.shouldShowCompressionStatistics = process.argv.includes('--show-ansi-stats')
-  flushable.write(ansi.clearScreen())
-  flushable.flush()
-
-  interfacer.on('resize', newSize => {
-    root.w = newSize.width
-    root.h = newSize.height
-    flushable.resizeScreen(newSize)
-    root.fixAllLayout()
-  })
-
   const loadPlaylists = async () => {
     for (let i = 2; i < process.argv.length; i++) {
       if (!process.argv[i].startsWith('--')) {
@@ -145,6 +102,12 @@ async function main() {
 
   const loadPlaylistPromise = loadPlaylists()
 
+  let telnetServer
+  if (process.argv.includes('--telnet-server')) {
+    telnetServer = new TelnetServer(backend)
+    await telnetServer.listen(1244)
+  }
+
   if (process.argv.includes('--stress-test')) {
     await loadPlaylistPromise
 
@@ -191,11 +154,6 @@ async function main() {
 
     return
   }
-
-  setInterval(() => {
-    root.renderTo(flushable)
-    flushable.flush()
-  }, 50)
 }
 
 main().catch(err => {