Merge pull request #142 from arabcoders/dev

fixed small bug in console
This commit is contained in:
Abdulmohsen 2024-12-11 21:15:54 +03:00 committed by GitHub
commit 4688f60a05
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 601 additions and 473 deletions

160
Pipfile.lock generated
View file

@ -34,86 +34,86 @@
},
"aiohttp": {
"hashes": [
"sha256:0411777249f25d11bd2964a230b3ffafcbed6cd65d0f2b132bc2b8f5b8c347c7",
"sha256:0a97d657f6cf8782a830bb476c13f7d777cfcab8428ac49dde15c22babceb361",
"sha256:0b5a5009b0159a8f707879dc102b139466d8ec6db05103ec1520394fdd8ea02c",
"sha256:0bcb7f6976dc0b6b56efde13294862adf68dd48854111b422a336fa729a82ea6",
"sha256:14624d96f0d69cf451deed3173079a68c322279be6030208b045ab77e1e8d550",
"sha256:15c4e489942d987d5dac0ba39e5772dcbed4cc9ae3710d1025d5ba95e4a5349c",
"sha256:176f8bb8931da0613bb0ed16326d01330066bb1e172dd97e1e02b1c27383277b",
"sha256:17af09d963fa1acd7e4c280e9354aeafd9e3d47eaa4a6bfbd2171ad7da49f0c5",
"sha256:1a8b13b9950d8b2f8f58b6e5842c4b842b5887e2c32e3f4644d6642f1659a530",
"sha256:202f40fb686e5f93908eee0c75d1e6fbe50a43e9bd4909bf3bf4a56b560ca180",
"sha256:21cbe97839b009826a61b143d3ca4964c8590d7aed33d6118125e5b71691ca46",
"sha256:27935716f8d62c1c73010428db310fd10136002cfc6d52b0ba7bdfa752d26066",
"sha256:282e0a7ddd36ebc411f156aeaa0491e8fe7f030e2a95da532cf0c84b0b70bc66",
"sha256:28f29bce89c3b401a53d6fd4bee401ee943083bf2bdc12ef297c1d63155070b0",
"sha256:2ac9fd83096df36728da8e2f4488ac3b5602238f602706606f3702f07a13a409",
"sha256:30f9f89ae625d412043f12ca3771b2ccec227cc93b93bb1f994db6e1af40a7d3",
"sha256:317251b9c9a2f1a9ff9cd093775b34c6861d1d7df9439ce3d32a88c275c995cd",
"sha256:31de2f10f63f96cc19e04bd2df9549559beadd0b2ee2da24a17e7ed877ca8c60",
"sha256:36df00e0541f264ce42d62280281541a47474dfda500bc5b7f24f70a7f87be7a",
"sha256:39625703540feb50b6b7f938b3856d1f4886d2e585d88274e62b1bd273fae09b",
"sha256:3f5461c77649358610fb9694e790956b4238ac5d9e697a17f63619c096469afe",
"sha256:4313f3bc901255b22f01663eeeae167468264fdae0d32c25fc631d5d6e15b502",
"sha256:442356e8924fe1a121f8c87866b0ecdc785757fd28924b17c20493961b3d6697",
"sha256:44cb1a1326a0264480a789e6100dc3e07122eb8cd1ad6b784a3d47d13ed1d89c",
"sha256:44d323aa80a867cb6db6bebb4bbec677c6478e38128847f2c6b0f70eae984d72",
"sha256:499368eb904566fbdf1a3836a1532000ef1308f34a1bcbf36e6351904cced771",
"sha256:4b01d9cfcb616eeb6d40f02e66bebfe7b06d9f2ef81641fdd50b8dd981166e0b",
"sha256:5720ebbc7a1b46c33a42d489d25d36c64c419f52159485e55589fbec648ea49a",
"sha256:5cc5e0d069c56645446c45a4b5010d4b33ac6c5ebfd369a791b5f097e46a3c08",
"sha256:618b18c3a2360ac940a5503da14fa4f880c5b9bc315ec20a830357bcc62e6bae",
"sha256:6435a66957cdba1a0b16f368bde03ce9c79c57306b39510da6ae5312a1a5b2c1",
"sha256:647ec5bee7e4ec9f1034ab48173b5fa970d9a991e565549b965e93331f1328fe",
"sha256:6e1e9e447856e9b7b3d38e1316ae9a8c92e7536ef48373de758ea055edfd5db5",
"sha256:6ef1550bb5f55f71b97a6a395286db07f7f2c01c8890e613556df9a51da91e8d",
"sha256:6ffa45cc55b18d4ac1396d1ddb029f139b1d3480f1594130e62bceadf2e1a838",
"sha256:77f31cebd8c27a36af6c7346055ac564946e562080ee1a838da724585c67474f",
"sha256:7a3b5b2c012d70c63d9d13c57ed1603709a4d9d7d473e4a9dfece0e4ea3d5f51",
"sha256:7a7ddf981a0b953ade1c2379052d47ccda2f58ab678fca0671c7c7ca2f67aac2",
"sha256:84de955314aa5e8d469b00b14d6d714b008087a0222b0f743e7ffac34ef56aff",
"sha256:8dcfd14c712aa9dd18049280bfb2f95700ff6a8bde645e09f17c3ed3f05a0130",
"sha256:928f92f80e2e8d6567b87d3316c1fd9860ccfe36e87a9a7f5237d4cda8baa1ba",
"sha256:9384b07cfd3045b37b05ed002d1c255db02fb96506ad65f0f9b776b762a7572e",
"sha256:96726839a42429318017e67a42cca75d4f0d5248a809b3cc2e125445edd7d50d",
"sha256:96bbec47beb131bbf4bae05d8ef99ad9e5738f12717cfbbf16648b78b0232e87",
"sha256:9bcf97b971289be69638d8b1b616f7e557e1342debc7fc86cf89d3f08960e411",
"sha256:a0cf4d814689e58f57ecd5d8c523e6538417ca2e72ff52c007c64065cef50fb2",
"sha256:a7c6147c6306f537cff59409609508a1d2eff81199f0302dd456bb9e7ea50c39",
"sha256:a9266644064779840feec0e34f10a89b3ff1d2d6b751fe90017abcad1864fa7c",
"sha256:afbe85b50ade42ddff5669947afde9e8a610e64d2c80be046d67ec4368e555fa",
"sha256:afcda759a69c6a8be3aae764ec6733155aa4a5ad9aad4f398b52ba4037942fe3",
"sha256:b2fab23003c4bb2249729a7290a76c1dda38c438300fdf97d4e42bf78b19c810",
"sha256:bd3f711f4c99da0091ced41dccdc1bcf8be0281dc314d6d9c6b6cf5df66f37a9",
"sha256:be0c7c98e38a1e3ad7a6ff64af8b6d6db34bf5a41b1478e24c3c74d9e7f8ed42",
"sha256:c1f2d7fd583fc79c240094b3e7237d88493814d4b300d013a42726c35a734bc9",
"sha256:c5bba6b83fde4ca233cfda04cbd4685ab88696b0c8eaf76f7148969eab5e248a",
"sha256:c6beeac698671baa558e82fa160be9761cf0eb25861943f4689ecf9000f8ebd0",
"sha256:c7333e7239415076d1418dbfb7fa4df48f3a5b00f8fdf854fca549080455bc14",
"sha256:c8a02f74ae419e3955af60f570d83187423e42e672a6433c5e292f1d23619269",
"sha256:c9c23e62f3545c2216100603614f9e019e41b9403c47dd85b8e7e5015bf1bde0",
"sha256:cca505829cdab58c2495ff418c96092d225a1bbd486f79017f6de915580d3c44",
"sha256:d3108f0ad5c6b6d78eec5273219a5bbd884b4aacec17883ceefaac988850ce6e",
"sha256:d4b8a1b6c7a68c73191f2ebd3bf66f7ce02f9c374e309bdb68ba886bbbf1b938",
"sha256:d6e274661c74195708fc4380a4ef64298926c5a50bb10fbae3d01627d7a075b7",
"sha256:db2914de2559809fdbcf3e48f41b17a493b58cb7988d3e211f6b63126c55fe82",
"sha256:e738aabff3586091221044b7a584865ddc4d6120346d12e28e788307cd731043",
"sha256:e7f6173302f8a329ca5d1ee592af9e628d3ade87816e9958dcf7cdae2841def7",
"sha256:e9d036a9a41fc78e8a3f10a86c2fc1098fca8fab8715ba9eb999ce4788d35df0",
"sha256:ea142255d4901b03f89cb6a94411ecec117786a76fc9ab043af8f51dd50b5313",
"sha256:ebd3e6b0c7d4954cca59d241970011f8d3327633d555051c430bd09ff49dc494",
"sha256:ec656680fc53a13f849c71afd0c84a55c536206d524cbc831cde80abbe80489e",
"sha256:ec8df0ff5a911c6d21957a9182402aad7bf060eaeffd77c9ea1c16aecab5adbf",
"sha256:ed95d66745f53e129e935ad726167d3a6cb18c5d33df3165974d54742c373868",
"sha256:ef2c9499b7bd1e24e473dc1a85de55d72fd084eea3d8bdeec7ee0720decb54fa",
"sha256:f5252ba8b43906f206048fa569debf2cd0da0316e8d5b4d25abe53307f573941",
"sha256:f737fef6e117856400afee4f17774cdea392b28ecf058833f5eca368a18cf1bf",
"sha256:fc726c3fa8f606d07bd2b500e5dc4c0fd664c59be7788a16b9e34352c50b6b6b"
"sha256:012f176945af138abc10c4a48743327a92b4ca9adc7a0e078077cdb5dbab7be0",
"sha256:02c13415b5732fb6ee7ff64583a5e6ed1c57aa68f17d2bda79c04888dfdc2769",
"sha256:03b6002e20938fc6ee0918c81d9e776bebccc84690e2b03ed132331cca065ee5",
"sha256:04814571cb72d65a6899db6099e377ed00710bf2e3eafd2985166f2918beaf59",
"sha256:0580f2e12de2138f34debcd5d88894786453a76e98febaf3e8fe5db62d01c9bf",
"sha256:06a8e2ee1cbac16fe61e51e0b0c269400e781b13bcfc33f5425912391a542985",
"sha256:076bc454a7e6fd646bc82ea7f98296be0b1219b5e3ef8a488afbdd8e81fbac50",
"sha256:0c9527819b29cd2b9f52033e7fb9ff08073df49b4799c89cb5754624ecd98299",
"sha256:0dc49f42422163efb7e6f1df2636fe3db72713f6cd94688e339dbe33fe06d61d",
"sha256:14cdb5a9570be5a04eec2ace174a48ae85833c2aadc86de68f55541f66ce42ab",
"sha256:15fccaf62a4889527539ecb86834084ecf6e9ea70588efde86e8bc775e0e7542",
"sha256:24213ba85a419103e641e55c27dc7ff03536c4873470c2478cce3311ba1eee7b",
"sha256:31d5093d3acd02b31c649d3a69bb072d539d4c7659b87caa4f6d2bcf57c2fa2b",
"sha256:3691ed7726fef54e928fe26344d930c0c8575bc968c3e239c2e1a04bd8cf7838",
"sha256:386fbe79863eb564e9f3615b959e28b222259da0c48fd1be5929ac838bc65683",
"sha256:3bbbfff4c679c64e6e23cb213f57cc2c9165c9a65d63717108a644eb5a7398df",
"sha256:3de34936eb1a647aa919655ff8d38b618e9f6b7f250cc19a57a4bf7fd2062b6d",
"sha256:40d1c7a7f750b5648642586ba7206999650208dbe5afbcc5284bcec6579c9b91",
"sha256:44224d815853962f48fe124748227773acd9686eba6dc102578defd6fc99e8d9",
"sha256:47ad15a65fb41c570cd0ad9a9ff8012489e68176e7207ec7b82a0940dddfd8be",
"sha256:482cafb7dc886bebeb6c9ba7925e03591a62ab34298ee70d3dd47ba966370d2c",
"sha256:49c7dbbc1a559ae14fc48387a115b7d4bbc84b4a2c3b9299c31696953c2a5219",
"sha256:4b2c7ac59c5698a7a8207ba72d9e9c15b0fc484a560be0788b31312c2c5504e4",
"sha256:4cca22a61b7fe45da8fc73c3443150c3608750bbe27641fc7558ec5117b27fdf",
"sha256:4cfce37f31f20800a6a6620ce2cdd6737b82e42e06e6e9bd1b36f546feb3c44f",
"sha256:502a1464ccbc800b4b1995b302efaf426e8763fadf185e933c2931df7db9a199",
"sha256:53bf2097e05c2accc166c142a2090e4c6fd86581bde3fd9b2d3f9e93dda66ac1",
"sha256:593c114a2221444f30749cc5e5f4012488f56bd14de2af44fe23e1e9894a9c60",
"sha256:5d6958671b296febe7f5f859bea581a21c1d05430d1bbdcf2b393599b1cdce77",
"sha256:5ef359ebc6949e3a34c65ce20230fae70920714367c63afd80ea0c2702902ccf",
"sha256:613e5169f8ae77b1933e42e418a95931fb4867b2991fc311430b15901ed67079",
"sha256:61b9bae80ed1f338c42f57c16918853dc51775fb5cb61da70d590de14d8b5fb4",
"sha256:6362cc6c23c08d18ddbf0e8c4d5159b5df74fea1a5278ff4f2c79aed3f4e9f46",
"sha256:65a96e3e03300b41f261bbfd40dfdbf1c301e87eab7cd61c054b1f2e7c89b9e8",
"sha256:65e55ca7debae8faaffee0ebb4b47a51b4075f01e9b641c31e554fd376595c6c",
"sha256:68386d78743e6570f054fe7949d6cb37ef2b672b4d3405ce91fafa996f7d9b4d",
"sha256:68ff6f48b51bd78ea92b31079817aff539f6c8fc80b6b8d6ca347d7c02384e33",
"sha256:6ab29b8a0beb6f8eaf1e5049252cfe74adbaafd39ba91e10f18caeb0e99ffb34",
"sha256:77ae58586930ee6b2b6f696c82cf8e78c8016ec4795c53e36718365f6959dc82",
"sha256:77c4aa15a89847b9891abf97f3d4048f3c2d667e00f8a623c89ad2dccee6771b",
"sha256:78153314f26d5abef3239b4a9af20c229c6f3ecb97d4c1c01b22c4f87669820c",
"sha256:7852bbcb4d0d2f0c4d583f40c3bc750ee033265d80598d0f9cb6f372baa6b836",
"sha256:7e97d622cb083e86f18317282084bc9fbf261801b0192c34fe4b1febd9f7ae69",
"sha256:7f3dc0e330575f5b134918976a645e79adf333c0a1439dcf6899a80776c9ab39",
"sha256:80886dac673ceaef499de2f393fc80bb4481a129e6cb29e624a12e3296cc088f",
"sha256:811f23b3351ca532af598405db1093f018edf81368e689d1b508c57dcc6b6a32",
"sha256:86a5dfcc39309470bd7b68c591d84056d195428d5d2e0b5ccadfbaf25b026ebc",
"sha256:8b3cf2dc0f0690a33f2d2b2cb15db87a65f1c609f53c37e226f84edb08d10f52",
"sha256:8cc5203b817b748adccb07f36390feb730b1bc5f56683445bfe924fc270b8816",
"sha256:909af95a72cedbefe5596f0bdf3055740f96c1a4baa0dd11fd74ca4de0b4e3f1",
"sha256:974d3a2cce5fcfa32f06b13ccc8f20c6ad9c51802bb7f829eae8a1845c4019ec",
"sha256:98283b94cc0e11c73acaf1c9698dea80c830ca476492c0fe2622bd931f34b487",
"sha256:98f5635f7b74bcd4f6f72fcd85bea2154b323a9f05226a80bc7398d0c90763b0",
"sha256:99b7920e7165be5a9e9a3a7f1b680f06f68ff0d0328ff4079e5163990d046767",
"sha256:9bca390cb247dbfaec3c664326e034ef23882c3f3bfa5fbf0b56cad0320aaca5",
"sha256:9e2e576caec5c6a6b93f41626c9c02fc87cd91538b81a3670b2e04452a63def6",
"sha256:9ef405356ba989fb57f84cac66f7b0260772836191ccefbb987f414bcd2979d9",
"sha256:a55d2ad345684e7c3dd2c20d2f9572e9e1d5446d57200ff630e6ede7612e307f",
"sha256:ab7485222db0959a87fbe8125e233b5a6f01f4400785b36e8a7878170d8c3138",
"sha256:b1fc6b45010a8d0ff9e88f9f2418c6fd408c99c211257334aff41597ebece42e",
"sha256:b78f053a7ecfc35f0451d961dacdc671f4bcbc2f58241a7c820e9d82559844cf",
"sha256:b99acd4730ad1b196bfb03ee0803e4adac371ae8efa7e1cbc820200fc5ded109",
"sha256:be2b516f56ea883a3e14dda17059716593526e10fb6303189aaf5503937db408",
"sha256:beb39a6d60a709ae3fb3516a1581777e7e8b76933bb88c8f4420d875bb0267c6",
"sha256:bf3d1a519a324af764a46da4115bdbd566b3c73fb793ffb97f9111dbc684fc4d",
"sha256:c49a76c1038c2dd116fa443eba26bbb8e6c37e924e2513574856de3b6516be99",
"sha256:c5532f0441fc09c119e1dca18fbc0687e64fbeb45aa4d6a87211ceaee50a74c4",
"sha256:c6b9e6d7e41656d78e37ce754813fa44b455c3d0d0dced2a047def7dc5570b74",
"sha256:c87bf31b7fdab94ae3adbe4a48e711bfc5f89d21cf4c197e75561def39e223bc",
"sha256:cbad88a61fa743c5d283ad501b01c153820734118b65aee2bd7dbb735475ce0d",
"sha256:cf14627232dfa8730453752e9cdc210966490992234d77ff90bc8dc0dce361d5",
"sha256:db1d0b28fcb7f1d35600150c3e4b490775251dea70f894bf15c678fdd84eda6a",
"sha256:ddf5f7d877615f6a1e75971bfa5ac88609af3b74796ff3e06879e8422729fd01",
"sha256:e44a9a3c053b90c6f09b1bb4edd880959f5328cf63052503f892c41ea786d99f",
"sha256:efb15a17a12497685304b2d976cb4939e55137df7b09fa53f1b6a023f01fcb4e",
"sha256:fbbaea811a2bba171197b08eea288b9402faa2bab2ba0858eecdd0a4105753a3"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==3.11.9"
"version": "==3.11.10"
},
"aiosignal": {
"hashes": [
@ -428,12 +428,12 @@
},
"httpx": {
"hashes": [
"sha256:0858d3bab51ba7e386637f22a61d8ccddaeec5f3fe4209da3a6168dbb91573e0",
"sha256:dc0b419a0cfeb6e8b34e85167c0da2671206f5095f1baa9663d23bcfd6b535fc"
"sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc",
"sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==0.28.0"
"version": "==0.28.1"
},
"humanfriendly": {
"hashes": [

View file

@ -1,11 +1,15 @@
#!/usr/bin/env python3
import argparse
import asyncio
import base64
from datetime import datetime
import errno
import json
import os
import pty
import random
import shlex
import time
from Config import Config
from DownloadQueue import DownloadQueue
@ -601,45 +605,80 @@ class Main:
await self.sio.emit('cli_close', {'exitcode': 0})
return
proc = None
try:
async def _read_stream(streamType, stream):
while True:
line = await stream.readline()
if line:
await self.sio.emit('cli_output', {
'type': streamType,
'line': line.decode('utf-8')
})
else:
break
LOG.info(f'CLI: {data}')
proc = await asyncio.subprocess.create_subprocess_exec(
'yt-dlp', data,
args = ['yt-dlp'] + shlex.split(data)
_env = os.environ.copy()
_env.update({
"TERM": "xterm-256color",
"LANG": "en_US.UTF-8",
"SHELL": "/bin/bash",
"LC_ALL": "en_US.UTF-8",
"PWD": self.config.download_path,
"FORCE_COLOR": "1",
"PYTHONUNBUFFERED": "1",
})
master_fd, slave_fd = pty.openpty()
proc = await asyncio.create_subprocess_exec(
*args,
cwd=self.config.download_path,
stdin=asyncio.subprocess.DEVNULL,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
env=os.environ.copy().update({
"TERM": "xterm-256color",
"LANG": "en_US.UTF-8",
"SHELL": "/bin/bash",
"LC_ALL": "en_US.UTF-8",
"PWD": self.config.download_path,
}),
stdout=slave_fd,
stderr=slave_fd,
env=_env,
)
await asyncio.gather(
_read_stream('stdout', proc.stdout),
_read_stream('stderr', proc.stderr),
)
try:
os.close(slave_fd)
except Exception as e:
LOG.error(f'Error closing PTY: {str(e)}')
while proc.returncode is None:
await asyncio.sleep(0.1)
async def read_pty():
loop = asyncio.get_running_loop()
buffer = b''
while True:
try:
chunk = await loop.run_in_executor(None, lambda: os.read(master_fd, 1024))
except OSError as e:
if e.errno == errno.EIO:
break
else:
raise
await self.sio.emit('cli_close', {'exitcode': proc.returncode})
if not chunk:
# No more output
if buffer:
# Emit any remaining partial line
await self.sio.emit('cli_output', {
'type': 'stdout',
'line': buffer.decode('utf-8', errors='replace')
})
break
buffer += chunk
*lines, buffer = buffer.split(b'\n')
for line in lines:
await self.sio.emit('cli_output', {
'type': 'stdout',
'line': line.decode('utf-8', errors='replace')
})
try:
os.close(master_fd)
except Exception as e:
LOG.error(f'Error closing PTY: {str(e)}')
# Start reading output from PTY
read_task = asyncio.create_task(read_pty())
# Wait until process finishes
returncode = await proc.wait()
# Ensure reading is done
await read_task
await self.sio.emit('cli_close', {'exitcode': returncode})
except Exception as e:
LOG.error(f'CLI Error: {str(e)}')
await self.sio.emit('cli_output', {

File diff suppressed because it is too large Load diff

View file

@ -15,7 +15,8 @@
<span class="icon"><font-awesome-icon icon="fa-solid fa-terminal" /></span> Terminal
</p>
<p class="card-header-icon">
<span v-tooltip.top="'Clear console window'" class="icon" @click="clearOutput"><font-awesome-icon icon="fa-solid fa-broom" /></span>
<span v-tooltip.top="'Clear console window'" class="icon" @click="clearOutput"><font-awesome-icon
icon="fa-solid fa-broom" /></span>
</p>
</header>
<section class="card-content p-0 m-0">
@ -23,16 +24,23 @@
</section>
<section class="card-content p-1 m-1">
<div class="field is-grouped">
<div class="control is-expanded has-icons-left">
<div class="control">
<span class="icon-text input is-unselectable">
<span class="icon"><font-awesome-icon icon="fa-solid fa-terminal" /></span>
<span>yt-dlp</span>
</span>
</div>
<div class="control is-expanded">
<input type="text" class="input" v-model="command" placeholder="ls -la" autocomplete="off"
ref="command_input" @keydown.enter="runCommand" :disabled="props.isLoading" id="command">
<span class="icon is-left"><font-awesome-icon icon="fa-solid fa-terminal"
:spin="props.isLoading" /></span>
</div>
<p class="control">
<button class="button is-primary" type="button" :disabled="props.isLoading || '' === command"
@click="runCommand">
<span class="icon"><font-awesome-icon icon="fa-solid fa-paper-plane" /></span>
<span class="icon">
<font-awesome-icon icon="fa-solid fa-spinner" spin v-if="props.isLoading" />
<font-awesome-icon icon="fa-solid fa-paper-plane" v-else />
</span>
</button>
</p>
</div>
@ -132,7 +140,8 @@ const runCommand = async () => {
}
emitter('runCommand', command.value)
terminal.value.writeln(`~ ${command.value}`)
terminal.value.writeln(`user@YTPTube ~`)
terminal.value.writeln(`$ yt-dlp ${command.value}`)
}
const clearOutput = async (withCommand = false) => {

View file

@ -7,12 +7,7 @@ import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import {
faCog, faTrash, faLink, faPlus, faTrashCan, faCircleXmark, faCircleCheck, faRotateRight, faDownload, faUpRightFromSquare,
faSpinner, faArrowUp, faArrowDown, faTasks, faCalendar, faArrowUpAZ, faArrowDownAZ, faEject, faGlobe, faMoon, faSun,
faTerminal,
faBroom,
faServer,
faPowerOff,
faPaperPlane,
faBoxArchive
faTerminal, faBroom, faServer, faPowerOff, faPaperPlane, faBoxArchive,
} from '@fortawesome/free-solid-svg-icons'
import { faSquare, faSquareCheck } from '@fortawesome/free-regular-svg-icons'