command-your-favorite
Version:
Launch your favorite websites
139 lines (111 loc) • 3.04 kB
JavaScript
const args = process.argv.slice(2)
const command = args[0]
const favorite = args[1]
const url = args[2]
import sqlite from 'better-sqlite3'
const db = sqlite('./favorites.db');
const createTableQuery = `
CREATE TABLE IF NOT EXISTS favorites (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
url TEXT NOT NULL
)
`
db.exec(createTableQuery)
const argCount = args.length
import {exec} from 'child_process'
import open, {apps} from 'open'
function displayUsage(){
console.log('ls : List all saved favorites')
console.log('open <favorite> : Open a saved favorite')
console.log('add <favorite> <URL> : add a new fav to some URL')
console.log('rm <favorite> : revmove a saved favorite')
}
function checkBrowser(){
const browser = process.env?.BROWSER?.toLocaleLowerCase()
let appName = browser
switch (browser){
case 'chrome':
appName = apps.chrome
break
case 'edge':
appName = apps.edge
break
case 'firefox':
appName = apps.firefox
break
}
return appName
}
function openFavorite(favorite){
const row = db.prepare('SELECT * FROM favorites WHERE name = ?').get(favorite)
if(!row){
console.log('Favorite', favorite, 'does not exist.')
return
}
const url = row.url
const browser = checkBrowser()
if (browser){
open(url, {app: {name: appName}})
}else{
open(url)
}
exec(command, (error, stdout, stderr) => {
if(error){
console.log('error: ', error.message)
}
if(stderr){
console.log('stderr:', stderr)
}
if (error || stderr){
return
}
console.log(stdout)
})
}
function add(favorite, url){
db.prepare('INSERT INTO favorites (name, url) VALUES (?, ?)').run(favorite, url)
console.log('Added', favorite, url)
}
function rm(favorite){
db.prepare('DELETE FROM favorites WHERE name = ?').run(favorite)
console.log('Removed', favorite)
}
function ls(){
const rows = db.prepare('SELECT * FROM favorites').all()
console.log('All favorites:')
rows.forEach((row) => console.log(`${row.name}: ${row.url}`))
}
if (argCount === 0 || !['ls', 'open', 'rm', 'add'].includes(command)){
displayUsage()
process.exit(1)
}
else{
switch (command){
case 'ls':
ls()
break
case 'open':
if (argCount < 2){
displayUsage()
break
}
openFavorite(favorite)
break
case 'add':
if (argCount < 2){
displayUsage()
break
}
add(favorite, url)
break
case 'rm':
if (argCount < 3){
displayUsage()
break
}
rm(favorite)
break
}
}