mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-18 06:44:46 -07:00
155 lines
3.7 KiB
JavaScript
155 lines
3.7 KiB
JavaScript
|
|
import { promises as fs } from 'fs'
|
|
import slugify from 'slugify'
|
|
import axios from 'axios'
|
|
|
|
// import { statuses } from './build-app-list'
|
|
|
|
|
|
// console.log('process.env.GAMES_SOURCE', process.env.GAMES_SOURCE)
|
|
|
|
// export const statuses = {
|
|
// '✅': 'native',
|
|
// '✳️': 'rosetta',
|
|
// '⏹': 'no-in-progress',
|
|
// '🚫': 'no'
|
|
// }
|
|
|
|
const statusesTranslations = {
|
|
'Native': 'native',
|
|
'Rosetta': 'rosetta',
|
|
// 'CrossOver': 'rosetta',
|
|
// '': 'no'
|
|
}
|
|
|
|
const statusesMessages = {
|
|
'Native': '✅ Yes, Full Native Apple Silicon Support',
|
|
'Rosetta': '✳️ Yes, works via Rosetta 2',
|
|
// 'CrossOver': '✳️ Yes, works via Rosetta 2',
|
|
// 'no': '🚫 No, not yet supported only works on Intel-based Macs'
|
|
}
|
|
|
|
function isPlayable(game) {
|
|
return game.Playable.toLowerCase() === 'yes'
|
|
}
|
|
|
|
function environmentName(game) {
|
|
return game['Environment'].trim()
|
|
}
|
|
|
|
|
|
function getStatusText(game) {
|
|
if (isPlayable(game) === false) return '🚫 No, not yet supported only works on Intel-based Macs'
|
|
|
|
// Match status to Sheet Status
|
|
return statusesMessages[environmentName(game)]
|
|
}
|
|
|
|
|
|
function parseStatus(game) {
|
|
if (isPlayable(game) === false) return 'no'
|
|
|
|
// Match status to Sheet Status
|
|
return statusesTranslations[environmentName(game)]
|
|
}
|
|
|
|
export default async function () {
|
|
|
|
// Fetch Sheet data
|
|
const gamesSheet = await axios
|
|
.get(process.env.GAMES_SOURCE)
|
|
.then(function (response) {
|
|
// handle success
|
|
return response.data.records
|
|
})
|
|
.catch(function (error) {
|
|
// handle error
|
|
console.log(error);
|
|
})
|
|
|
|
const gameList = []
|
|
|
|
// console.log('gamesSheet', gamesSheet)
|
|
|
|
for (const game of gamesSheet) {
|
|
|
|
// If there's no title
|
|
// then skip this report
|
|
if (game.Games.length === 0) continue
|
|
|
|
// If there's no 'Environment' status
|
|
// then skip this report
|
|
if (environmentName(game).length === 0) continue
|
|
|
|
// If this game is playable
|
|
// BUT it's 'Environment' status is not in statusesTranslations
|
|
// then skip this report
|
|
if (isPlayable(game) && statusesTranslations.hasOwnProperty(environmentName(game)) === false) continue
|
|
|
|
// Generate slug
|
|
const slug = slugify(game.Games, {
|
|
lower: true,
|
|
strict: true
|
|
})
|
|
|
|
// Find index of game is list so far
|
|
const gameIndex = gameList.findIndex(game => {
|
|
return game.slug === slug
|
|
})
|
|
|
|
// Game already has entry
|
|
if (gameIndex !== -1) {
|
|
|
|
// console.log('Existing Game', game)
|
|
|
|
gameList[gameIndex].reports.push(game)
|
|
|
|
continue
|
|
}
|
|
|
|
|
|
const status = parseStatus(game)
|
|
|
|
if (typeof status !== 'string') {
|
|
console.warn('Non-string status', game)
|
|
|
|
continue
|
|
}
|
|
|
|
gameList.push({
|
|
name: game.Games,
|
|
status,
|
|
url: `https://rawg.io/search?query=${encodeURIComponent(game.Games)}`,
|
|
text: getStatusText(game),
|
|
slug,
|
|
endpoint: `/game/${slug}`,
|
|
category: {
|
|
slug: 'games'
|
|
},
|
|
content: '',
|
|
relatedLinks: [
|
|
{
|
|
"href": `https://rawg.io/search?query=${encodeURIComponent(game.Games)}`,
|
|
"label": "View"
|
|
}
|
|
],
|
|
reports: [
|
|
game
|
|
]
|
|
})
|
|
|
|
}
|
|
|
|
// console.log('gameList', gameList)
|
|
|
|
|
|
return gameList
|
|
|
|
// fs.readFile('../README.md', 'utf8')
|
|
// .then((err, data) => {
|
|
// const result = md.parse(data)
|
|
// console.log('result', result)
|
|
|
|
// return result
|
|
// })
|
|
}
|