Update mtape.lua

Added update mechanism, changed minor stuff
This commit is contained in:
LDDestroier 2023-09-30 15:47:03 -04:00 committed by GitHub
parent 3f4ed18780
commit 7c9cd5460e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 72 additions and 22 deletions

View File

@ -2,6 +2,8 @@
-- tape managing program
-- made by LDDestroier
local _DEBUG = true
local function checkOption(argName, argInfo, isShort)
for i = 1, #argInfo do
if argInfo[i][isShort and 2 or 3] == argName then
@ -106,6 +108,7 @@ local function getHelp(specify)
print("mtape [-e --erase]")
print("mtape [-u --unclean]")
print("mtape [-c --cc-media]")
print("mtape [-u]")
print("Use -h with other options for details")
else
if specify == "--info" then
@ -120,16 +123,31 @@ local function getHelp(specify)
print("Adds URL info from LDDestroier's personal CC-Media github to make it easier to pull from there.")
print("Ex. 'tapey -c krabii'")
print(" 'tapey -c simple'")
elseif specify == "--reinstall" then
print("Updates Mtape to the latest version on the LDDestroier/CC github.")
end
end
end
local tierInfo = {
-- damage value indicates type of tape
-- value of tierInfo indicates minutes of storage
[0] = 4,
[1] = 8,
[2] = 16,
[3] = 32,
[4] = 64,
[5] = 2,
[6] = 6,
[8] = 128
}
local function getFileContents(path, isURL)
local file, contents
if isURL then
file = http.get(path, nil, true)
else
file = fs.open(fs.combine(shell.dir(), path), "r")
file = fs.open(fs.combine(shell.dir(), path), "rb")
end
if not file then
return false, ""
@ -172,13 +190,25 @@ local function writeToTape(tape, contents, tapeName)
tape.setLabel(tapeName)
end
tape.stop()
tape.seek(-tape.getPosition())
if #contents > totalTapeSize then
output = "Tape too small, audio truncated."
for i = 0, 8 do
if tierInfo[i] then
if tierInfo[i] * 360000 >= #contents then
output = output .. "\nIt would fit on a" .. (tierInfo[i] == 8 and "n " or " ") .. tostring(tierInfo[i]) .. " minute tape."
break
end
end
end
contents = contents:sub(1, totalTapeSize)
output = "Tape too small. Audio was written incompletely."
end
tape.write(contents)
tape.seek(-tape.getPosition())
tape.stop()
return output
end
local function infoMode(tape)
@ -192,19 +222,6 @@ local function infoMode(tape)
inserted = gi ~= nil
}
local tierInfo = {
-- damage value indicates type of tape
-- value of tierInfo indicates minutes of storage
[0] = 4,
[1] = 8,
[2] = 16,
[3] = 32,
[4] = 64,
[5] = 2,
[6] = 6,
[8] = 128
}
local minute = 360000
if not info.inserted then
@ -233,7 +250,8 @@ local argInfo = {
[3] = {1, "d", "drive"},
[4] = {0, "e", "erase"},
[5] = {0, "u", "unclean"},
[6] = {1, "c", "cc-media"}
[6] = {1, "c", "cc-media"},
[7] = {0, "r", "reinstall"}
}
local arguments, options, errors = argParse({...}, argInfo)
@ -255,6 +273,7 @@ local wantedInfo = options[2] == true
local wantedErase = options[4] == true
local doUnclean = options[5] == true
local getFromGithub = options[6][1]
local wantedUpdate = options[7] == true
if wantedHelp then
if wantedInfo then
@ -265,12 +284,38 @@ if wantedHelp then
getHelp("--unclean")
elseif getFromGithub then
getHelp("--ldd-github")
elseif wantedUpdate then
getHelp("--reinstall")
else
getHelp()
end
return
end
if wantedUpdate then
print("Redownloading Mtape...")
local cpath = shell.getRunningProgram()
local file = http.get("https://github.com/LDDestroier/CC/raw/master/mtape.lua")
local contents
local sizeBefore = fs.getSize(cpath)
local sizeAfter = 0
if file then
contents = file.readAll()
sizeAfter = #contents
file.close()
file = fs.open(cpath, "w")
file.write(contents)
file.close()
print("Done! (diff: " .. tostring(sizeAfter - sizeBefore) .. " bytes)")
return
else
print("Couldn't update.")
return
end
end
-- Try to wrap specified tape drive OR find tape drive
success, tape, totalTapeSize = getTapeDrive(tapeDriveName)
if not success then
@ -310,22 +355,27 @@ end
if not success then
error("Could not get file. Abort.")
else
if _DEBUG then
print("File size: " .. tostring(#contents) .. " bytes")
print("Tape size: " .. tostring(tape.getSize()) .. " bytes")
end
end
-- Adds null data to the end of the file if you want a clean tape write
if doUnclean then
print("Won't clean up tape first.")
else
contents = contents .. string.char(0):rep(totalTapeSize - #contents)
contents = contents .. string.char(0):rep(math.max(0, totalTapeSize - #contents))
end
print("Writing...")
write("Writing...")
success = writeToTape(tape, contents, tapeName)
if success then
print(success)
print("\n" .. success)
print("Nonetheless, it is written.")
else
print("\nIt is written.")
print("done!")
end
return true