Code Monkey home page Code Monkey logo

skyscraper's Introduction

Skyscraper

Powerful and versatile game data scraper written in Qt and C++.

Build status Releases Issues

InstallationQuick UsageUser ManualChangelog


Preface

Since autumn 2023 this repo you have reached is the official successor of Lars' awesome Skyscraper and also the official version used in RetroPie. Read all about the change since then here. Happy scraping!

Skyscraper was temporarily maintained by Joe Huss (2022-2023). The original project is by Lars Muldjord (2017-2022), who did all the heavy lifting.

In addition to this brief README, there is the extensive user manual. It contains everything from docs/ but with an enhanced layout (mkdocs) which should be easier to read and navigate.


A powerful and versatile yet easy to use game scraper written in C++ for use with multiple frontends running on a Linux system (macOS and Windows too, but not officially supported). It scrapes and caches various game resources from various scraping sources, including media such as screenshot, cover and video. It then gives you the option to generate a game list and artwork for the chosen frontend by combining all of the cached resources.

All Skyscraper features are well-documented and there's also a F.A.Q with answers.

🎮Platforms Supported (set with '-p'):

Check the full list of platforms here.

🕹Frontends Supported (set with '-f'):

  • EmulationStation
  • AttractMode
  • Pegasus
  • RetroBat

📚Supported scraping modules (set with '-s')

Skyscraper supports a variety of different scraping sources called scraping modules. Use these to gather game data into the Skyscraper resource cache. Check the full list of scraping modules here and read more about the resource cache here.

🧑‍💻Code contributions

I welcome any contributions, although I would like to keep things backwards compatible.

How to install Skyscraper

Follow the steps below to install the latest version of Skyscraper. Lines beginning with $ signifies a command you need run in a terminal on the machine you wish to install it on.

NOTE! If you are using the RetroPie distribution, you have the option to install Skyscraper directly from the RetroPie-Setup script (you need to update the script before installing it!). Read more about all of that here. If not, read on.

Installation of Skyscraper Enhanced on RetroPie

This goes in the usual RetroPie stanza: Either run sudo RetroPie-Setup/retropie_setup.sh and folow the menus (Manage packages -> Manage optional packages -> then look for Skyscraper) or run sudo RetroPie-Setup/retropie_packages.sh skyscraper.

Installation Prerequisites on Other Systems or Architectures

Linux

Skyscraper needs Qt5.3 or later to compile. For a Retropie, Ubuntu or other Debian derived distro, you can install Qt5 using the following commands:

$ sudo apt update
$ sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools p7zip-full
# You may need these too, if they are not installed already
$ sudo apt install make g++ gcc git

You might be asked for your sudo password. On RetroPie the default password is raspberry. To install Qt5 on other Linux distributions, please refer to their documentation.

macOS

Skyscraper works perfectly on macOS as well but is not officially supported as I don't own a Mac. But with the help of HoraceAndTheSpider and abritinthebay here's the commands needed to install the Qt5 and other prerequisites:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install gnu-tar
$ brew install wget
$ brew install qt@5
$ brew link qt@5 --force

If that went well, proceed to the default installation instructions in the next section. It should work and give you a working installation of Skyscraper.

Download, compile and install

When you've installed the prerequisites as described above for Linux or macOS, you can install Skyscraper by typing in the following commands:

$ cd
$ mkdir skysource
$ cd skysource
$ wget -q -O - https://raw.githubusercontent.com/Gemba/skyscraper/master/update_skyscraper.sh | bash

The last command will download and run the latest update script from Github. The script installs the latest release of Skyscraper. During the installation you might be asked for your sudo password. On RetroPie the default password is raspberry.

When the script has completed you are ready to run Skyscraper!

Updating Skyscraper

From Skyscraper 2.3.2 and newer you can update to the latest version simply by running the following commands:

$ cd
$ cd skysource
$ ./update_skyscraper.sh

You might be asked for your sudo password during the update. On RetroPie the default password is raspberry. If your version is older than 2.3.2 (check with --help) you need to follow the installation instructions instead.

Installing the Development Version

If you want to build the latest main/HEAD version use the following commands. Make sure to have the before mentioned packages installed:

git clone --depth 1 https://github.com/Gemba/skyscraper.git
cd skyscraper
[[ -f Makefile ]] && make --ignore-errors clean
rm --force .qmake.stash
QT_SELECT=5 qmake 
make -j$(nproc)
sudo make install

How to uninstall Skyscraper

If you've installed Skyscraper using the instructions in this readme, you can uninstall it using the following commands:

$ cd
$ cd skysource
$ sudo make uninstall
$ cd
$ rm -Rf skysource
$ rm -Rf ~/.skyscraper

You might be asked for your sudo password during the processs. On RetroPie the default password is raspberry.

Windows

Windows is not officially supported at this time! However, you may roll your own Windows 64-bit version that works just fine. And just to be clear: You are on your own if you use this version - please don't ask me questions about it. Use the sources.

How to use Skyscraper

IMPORTANT!!! In order for Skyscraper to work properly, it is necessary to quit your frontend before running it! If you're running EmulationStation, you can quit it by pressing F4.

Remember, you can completely customize the artwork Skyscraper exports. Check out the documentation here. If you just want to use the default (pretty cool looking) artwork Skyscraper provides, read on.

A simple use case

For first-time users I recommend reading the short and to-the-point use case. Please read it and get back here when you got the gist of it.

A quick run-down of Skyscraper

Skyscraper is a command line tool, and has many, many options for you to fiddle around with. I recommend taking a look at all of them to familiarize yourself with the possibilites:

$ Skyscraper --help
$ Skyscraper --flags help
$ Skyscraper --cache help

This will give you a description of everything Skyscraper can do if you feel adventurous! For a thorough description of all available options, check here.

The most important ones are probably:

  • -p <PLATFORM>
  • -s <SCRAPING MODULE>
  • -u <USER:PASS> or -u <KEY>
  • --cache refresh
  • --flags videos

If you have your roms in a non-default location (default for RetroPie users is /home/<USER>/RetroPie/roms/<PLATFORM>) or wish to export the game list or artwork to non-default locations, you will also need these:

  • -i <PATH>
  • -g <PATH>
  • -o <PATH>

For almost any command line option, consider setting them in the /home/<USER>/.skyscraper/config.ini file as described here. This will make the options permanent so you don't need to type them in all the time.

Gathering data for a subset of roms

Skyscraper offers several ways of gathering data for a subset of roms. If you just want to scrape the roms that have no data in the cache whatsoever, you can do so with the --onlymissing command-line option. You can also check out the --startat FILENAME and --endat FILENAME options. If you just want to gather data for a couple of roms you can simply add the filename(s) to the end of the command-line (eg. Skyscraper -p amiga -s openretro "/path/to/rom name 1.lha" "/path/to/rom name 2.lha"). And probably the most advanced (and quite handy) way to gather data for a subset of roms is to make use of the --cache report:missing=RESOURCE option. This can generate a report containing the filenames that are missing a certain resource. You can then feed the report back into Skyscraper with the --fromfile REPORTFILE afterwards. Skyscraper will then only scrape the files contained in the report.

config.ini

A lesser known, but extremely useful, feature of Skyscraper is to add your desired config variables to /home/<USER>/.skyscraper/config.ini. Any options set in this file will be used by default by Skyscraper. So if you always use, for example, -i <SOME FOLDER> on command line, you can set the matching option inputFolder="<SOME FOLDER>" in the config.

For a full description of all availabe config options, check here.

Resource cache

One of Skyscraper's most powerful features is the resource cache. It's important to understand how this works in order to use Skyscraper to its full potential. Read more about it here.

Custom data

I addition to allowing scraping from locally cached resources, Skyscraper also allows you to import your own data into the resource cache with the -s import scraping module. You can also edit existing resources in the cache or add individual user resources with the --cache edit command. Lastly, you also have the option of importing existing EmulationStation game list data into the Skyscraper resource cache if you need it. You can do this with the -s esgamelist scraping module.

To read more about any of the features described above, please check out all of the documentation here.

Artwork look and effects

Check the full artwork documentation here

Skyscraper Configurable Platforms Enhancement

The main goal of this fork is to allow users to easily configurate and add platforms without having the needs to edit the code source directly.

This feature is achieved by adding new config files:

  • peas.json: Describes now the supported platforms by Skyscraper. See all details here.
  • platforms_idmap.csv: Maps the local platform name to the platform ID of screenscraper.fr, Mobygames or The Games DB web API.

These files are copied in the folder /home/pi/.skyscraper on RetroPie (or /usr/local/etc/skyscraper/ in general) at the first run of the program if you want to edit them after an installation.

Previous Release Notes

Release notes for older releases which this fork builds on can be found here.

skyscraper's People

Contributors

calumbrodie avatar detain avatar gemba avatar jeantichoc avatar maxexcloo avatar mend-bolt-for-github[bot] avatar mgerhardy avatar muldjord avatar retrobit avatar s1eve-mcdichae1 avatar seriema avatar spilinek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

skyscraper's Issues

ERROR: 404: Cannot install on Linux host via provided instructions, fails to pull tarball archive

Describe the bug
Unable to install via instructions for linux based hosts.

Specifically: https://github.com/Gemba/skyscraper?tab=readme-ov-file#linux

To Reproduce
Run provided command in instructions
wget -q -O - https://raw.githubusercontent.com/Gemba/skyscraper/master/update_skyscraper.sh | bash

Expected behavior
Install/update skyscraper for usage

Special circumstances
[Replace this text with any special circumstances you might have set up on your system that could interfere with how Skyscraper works.]

Terminal output

root@654fb5f89b79:/usr/local/skysource# wget -q -O - https://raw.githubusercontent.com/Gemba/skyscraper/master/update_skyscraper.sh | bash

--- Fetching Skyscraper v ---
https://github.com/Gemba/skyscraper/archive/.tar.gz:
2024-02-04 16:34:54 ERROR 404: Not Found.
--- Failed to fetch Skyscraper v, exiting with code 8 ---

Technical information

  • Skyscraper version: First time install, latest?
  • Configuration switches applied: N/A
  • Internet connection: N/A
  • OS and Version: Docker - Ubuntu container

Skyscraper Binary Name

Describe the bug
Not so much of a bug as a request, would it be possible to rename/link Skyscraper to skyscraper?

To Reproduce
Build and install as normal.

Expected behavior
A lowercase binary name matching everything else on my Linux/macOS systems.

Additional context
I know this one is a bit pedantic but Skyscraper is the only app I've come across which is named in this way, would be a quick and easy fix. It would also be possible to symlink the old name to the new for backwards compat.

Support scraping game manuals in PDF format

Few frontends support viewing PDF manuals directly from the UI (for example the Emulation Station Desktop and the EmulationStation fork used by Ambernic devices). The ScreenScraper site is also hosting PDFs and for each game, the link to the manual is available from the response json in the section "medias", as type "manuel".
It would be nice if skyscraper could support scraping game manuals.

I created a fork and implemented the feature (PR to follow). For the most part I just copied the logic used for the video, if somebody wants to do something more refined is welcome to ignore my PR.

[Enhancement] Follow XDG Base Directory Specification on Linux systems

Benefits
Specification is widely adopted. It allows to clean home directory by moving configs/cache/etc to specified locations. Another benefit is separation of configuration files, cache and data files. By moving ./cache/ folder and other files/folders that are not supposed to be modified by user to another location, you can ensure they will not be modified by user.

Possible way to implement
It's only a draft.

File/folder Possible XDG location
./cache/ XDG_CACHE_HOME or XDG_DATA_HOME
./resources/ XDG_DATA_HOME
./config.ini, ./artwork.xml and examples XDG_CONFIG_HOME
./reports, skipped-* XDG_STATE_HOME
./import/ and other files XDG_DATA_HOME

To remain backwards compatible, add config option like xdg. When this option is enabled, and XDG_* variables are set, they will be used. If XDG_* variables aren't set either fallback to ~/.config/, ~/.local/state or ~/.cache (preferred) or use current ~/.skyscraper.

Useful resources

Not possible to run from build directory

Describe the bug
It seems Skyscraper is unable to locate some of its support files when run from build directory.

To Reproduce
Build Skyscraper binary and try running it from build directory:

qmake
make
./Skyscraper

Expected behavior
Should work without installation like previous fork does

Terminal output

$ ./Skyscraper 
File not found 'peas.json'. Now quitting...

Technical information

  • Skyscraper version: 3.9.2
  • Ubuntu 22.04

[Enhancement] Support "-p all" for cache commands

Cache commands (such as --cache validate or --cache purge) require a valid platform to be provided with -p.

It would be useful if use of -p all could be used to apply the appropriate command to all platforms within the cache.

For example: Skyscraper -p all --cache validate

The workaround is that I'll have to write a script that runs Skyscraper -p $PLATFORM --cache validate where $PLATFORM contains the name of each directory located in /home/pi/.skyscraper/cache/.

No longer able to use symlinks to roms

Describe the bug
I have my roms on a samba share and mounted to my arcade machine at /mnt/Emulation/MAME. Under that I have various subdirectories for roms for different mame versions, such as /mnt/Emulation/MAME/mame-2010.

In my /home/pi/RetroPie/roms/arcade directory, I have symlinks to the appropriate roms, such as:
/home/pi/RetroPie/roms/arcade/romfile.zip -> /mnt/Emulation/MAME/mame-2010/romfile.zip

This used to work just fine and would result in the gamefile.xml file having a path to the rom as /home/pi/RetroPie/roms/arcade/romfile.zip (the location of the symlink) but now has /mnt/Emulation/MAME/mame-2013/romfile.zip (the target of the symlink) along with some odd directories at the bottom of the file such as:

	<folder>
		<path>./../../../../../mnt/Emulation/MAME/target-mame2003-plus</path>
		<name>target-mame2003-plus</name>
	</folder>
	<folder>
		<path>./../../../../../mnt/Emulation/MAME</path>
		<name>MAME</name>
	</folder>
	<folder>
		<path>./../../../../../mnt/Emulation</path>
		<name>Emulation</name>
	</folder>
	<folder>
		<path>./../../../../../mnt</path>
		<name>mnt</name>
	</folder>
	<folder>
		<path>./../../../../..</path>
		<name>..</name>
	</folder>
	<folder>
		<path>./../../../..</path>
		<name>..</name>
	</folder>
	<folder>
		<path>./../../..</path>
		<name>..</name>
	</folder>
	<folder>
		<path>./../..</path>
		<name>..</name>
	</folder>
	<folder>
		<path>./..</path>
		<name>..</name>
	</folder>
	<folder>
		<path>./../../../../../mnt/Emulation/MAME/target-mame2010</path>
		<name>target-mame2010</name>
	</folder>
	<folder>
		<path>./../../../../../mnt/Emulation/MAME/target-fbneo</path>
		<name>target-fbneo</name>
	</folder>
	<folder>
		<path>./../../../../../mnt/Emulation/MAME/target-mame2016</path>
		<name>target-mame2016</name>
	</folder>
	<folder>
		<path>./../../../../../mnt/Emulation/MAME/target-078</path>
		<name>>target-078</name>
	</folder>

This results in emulationstation not working properly and giving a ton of errors that look like:

Feb 23 01:47:43 lvl0:   File path "/mnt/Emulation/MAME/target-mame2003-plus/sonicwi2.zip" is outside system path "/home/pi/RetroPie/roms/arcade"
Feb 23 01:47:43 lvl0:   Error finding/creating FileData for "/mnt/Emulation/MAME/target-mame2003-plus/sonicwi2.zip", skipping.

It seems that 4aff225 is the root cause. Probably the change from using the absolute path to the canonical path around line 180 in the new file.

To Reproduce
See above

Expected behavior
The path to the symlink should be what is reflected in gamelist.xml file, not the target of the symlink which will break emulationstation.

Special circumstances
Described above

Terminal output
[Replace this text with any useful Skyscraper terminal output that might help clarify your issue. For longer output use pastebin.com, ix.io or similiar.]

Technical information

  • Skyscraper version: 3.10.1 (compiled locally on Raspian Bookworm 64-bit)
  • Configuration switches applied (config.ini, commandline, ...)
    • I've tried a number of things here actually, but this one demonstrates it - an empty config.ini and run like: /opt/retropie/supplementary/skyscraper/Skyscraper -p arcade -g /home/pi/.emulationstation/gamelists/arcade -o /home/pi/.emulationstation/downloaded_media/arcade --flags unattend,skipped,videos I've tried adding flags like relative and nosubdirs to no avail.
  • OS and Version Raspian Bookworm 64-bit

Additional context
[Replace this text with any additional context that might help understand this issue better. Optional.]

<folder> entries not being generated in gamelist.xml files

Describe the bug
When a platform directory has ROMs organized by subfolders (e.x: /snes/Retail/USA/mygame.sfc) corresponding <folder> entities for each subfolder are not generated in the gamelist.xml.

To Reproduce
Organize a platform’s ROMs into various subfolders and then scrape and generate the gamelist.xml with Skyscraper.

Expected behavior
Expected behaviour is to generate a <folder> entity with child <path> and <name> entities for each subfolder. For instance if ROMs were organized within a platform subfolder with /Retail/USA and /Retail/EUR/ subfolders then the generated gamelist.xml should include 3 <folder> entities as follows:

  <folder>
    <path>./Retail</path>
    <name>Retail</name>
  </folder>
  <folder>
    <path>./Retail/USA</path>
    <name>USA</name>
  </folder>
  <folder>
    <path>./Retail/EUR</path>
    <name>EUR</name>
  </folder>

Technical information

  • Skyscraper version: 3.9.1
  • OS and Version: Debian 12.2

Additional context
Unlike emulation station (which I believe auto generates folder entities) some frontends that support gamelist.xml files (such as Titanius launcher) need <folder> entities in order to display roms in subfolders.

update_skyscraper.sh Fails with code 8

Describe the bug

>./update_skyscraper.sh

--- Fetching Skyscraper v ---
https://github.com/Gemba/skyscraper/archive/.tar.gz:
2024-06-29 09:36:34 ERROR 404: Not Found.
--- Failed to fetch Skyscraper v, exiting with code 8 ---

To Reproduce
Enter in skysource folder and run update_skyscraper.sh

Expected behavior
I would expect the script to work and check and potentially update my skyscraper version

Terminal output

>./update_skyscraper.sh

--- Fetching Skyscraper v ---
https://github.com/Gemba/skyscraper/archive/.tar.gz:
2024-06-29 09:36:34 ERROR 404: Not Found.
--- Failed to fetch Skyscraper v, exiting with code 8 ---

Technical information

  • Skyscraper version: 3.11.1
  • Internet connection: fiber cable
  • OS and Version: Debian 6.7.12-1 (2024-04-24) x86_64 GNU/Linux

Additional context

I also tried to perform a new installation from scratch. The wget command outputs in the terminal the contents of update_skyscraper.sh but doesn't run it.

When downloading it manually and running it, the output is the same as mentioned at the top of this bug.

Docker Image

Wondering if it would be possible to use a GitHub action to build the Docker container in an automated fashion (similar to the image I attempted here).

Awesome work BTW, appreciate the revival!

[Enhancement] Respect ESDE_APPDATA_DIR if set for ES-DE

Describe the bug
ES-DE allows to set ESDE_APPDATA_DIR environment variable to change the application data directory (except for Android and Windows). It's mentioned here. It would be nice to respect this variable for default game list location (if it's set).

`aliasMap.csv` is Not Respected for ScreenScraper Scraping Module

Describe the bug

With an alias entry in aliasMap.csv (located at /opt/retropie/configs/all/skyscraper/aliasMap.csv, when scraping, ROM entry is not found even though alias name is confirmed working for another successfully scraped ROM

To Reproduce

  1. Have a unique ROM that can't be found (CRC checksum does not match as an entry in the appropriate scraper module(s) and can not be found by similar name via fuzzy matching):
    Mother 25th Restoration Hack.zip (located at: "/home/pi/RetroPie/ROMs/Nintendo - Nintendo Entertainment System/Hacks/Mother 25th Restoration Hack/Mother 25th Restoration Hack.zip")

  2. Have an alias defined in aliasMap.csv:

#
# Format (without the quotes):
# "Rom Filename (Europe);Use This Name Instead"
#
# Add your lines below this comment:
Mother 25th Restoration Hack;Mother (Japan)
  1. Run Skyscraper in scrape mode for the appropriate system/platform and scraping module:
    skyscraper -p nes -s screenscraper
    OR
    skyscraper -p nes -s screenscraper "/home/pi/RetroPie/ROMs/Nintendo - Nintendo Entertainment System/Hacks/Mother 25th Restoration Hack/Mother 25th Restoration Hack.zip"
    OR
    skyscraper -p nes -s screenscraper -i "/home/pi/RetroPie/ROMs/Nintendo - Nintendo Entertainment System/H acks/Mother 25th Restoration Hack"

Expected behavior

ROM entry will be found, scraped, and stored in cache, ready for game list creation, similar to the ROM with the name the alias uses, e.g. Mother (Japan)

Special circumstances

Custom config.ini (located at /opt/retropie/configs/all/skyscraper/config.ini):

[main]
inputFolder="/home/pi/RetroPie/ROMs"
gameListFolder="/home/pi/.emulationstation/gamelists/"
forceFilename="true"
brackets="no"
videos="true"
unattend="true"
skipped="true"
regionPrios="us,wor,eu,jp,ss"
langPrios="us,jp"
...
[nes]
inputFolder="/home/pi/RetroPie/ROMs/Nintendo - Nintendo Entertainment System"
mediaFolder="/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System"

Terminal output

pi@retropie:~ $ skyscraper -p nes -s screenscraper "/home/pi/RetroPie/ROMs/Nintendo - Nintendo Entertainment System/Hacks/Mother 25th Restoration Hack/Mother 25th Restoration Hack.zip"
------------------------------------------
Running Skyscraper v3.9.2 by Lars Muldjord
------------------------------------------
Platform:           'nes'
Scraping module:    'screenscraper'
Input folder:       '/home/pi/RetroPie/ROMs/Nintendo - Nintendo Entertainment System'
Game list folder:   '/home/pi/.emulationstation/gamelists/nes'
Covers folder:      '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/covers'
Screenshots folder: '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/screenshots'
Wheels folder:      '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/wheels'
Marquees folder:    '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/marquees'
Textures folder:    '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/textures'
Videos folder:      '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/videos'
Cache folder:       'cache/nes'

DID YOU KNOW: If you've manually compressed your roms (zip or 7z), you can use the '--flags unpack' flag to tell Skyscraper to checksum the roms inside the compressed file instead of the compressed file itself. This is only relevant when scraping with the 'screenscraper' scraping module.

Fetching limits for user '<REMOVED>', just a sec...
Setting threads to 1 as allowed for the supplied user credentials.

Reading and parsing quick id xml, please wait... Done!
Reading and parsing resource cache, please wait... Done!
Successfully parsed 60759 resources!

Looking for optional 'priorities.xml' file in cache folder... Found!
Priorities loaded successfully!

Trying to parse and load existing game list metadata... Success!

Starting scraping run on 1 files using 1 threads.
Sit back, relax and let me do the work! :)

#1/1 (T1) Pass 1 ---- Game 'Mother 25th Restoration Hack' not found :( ----


#1/1, (0/1)
Elapsed time   : 00:00:07
Est. time left : 00:00:00

---- Resource gathering run completed! YAY! ----
Writing quick id xml, please wait... Done!
Writing 60759 (0 new) resources to cache, please wait... Done!

---- And here are some neat stats :) ----
Total completion time: 00:00:12

Total number of games: 1
Successfully processed games: 0
Skipped games: 1 (Filenames saved to '/home/<USER>/.skyscraper/skipped-nes-screenscraper.txt')

pi@retropie:~ $ skyscraper -p nes -s screenscraper -i "/home/pi/RetroPie/ROMs/Nintendo - Nintendo Entertainment System/H
acks/Mother 25th Restoration Hack"
------------------------------------------
Running Skyscraper v3.9.2 by Lars Muldjord
------------------------------------------
Platform:           'nes'
Scraping module:    'screenscraper'
Input folder:       '/home/pi/RetroPie/ROMs/Nintendo - Nintendo Entertainment System/Hacks/Mother 25th Restoration Hack'
Game list folder:   '/home/pi/.emulationstation/gamelists/nes'
Covers folder:      '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/covers'
Screenshots folder: '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/screenshots'
Wheels folder:      '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/wheels'
Marquees folder:    '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/marquees'
Textures folder:    '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/textures'
Videos folder:      '/opt/retropie/configs/all/skyscraper/media/Nintendo - Nintendo Entertainment System/videos'
Cache folder:       'cache/nes'

DID YOU KNOW: You can force a refresh of the locally cached data using the '--refresh' option. Skyscraper will then refetch the requested entries from the scraping sources, instead of loading it from cache. Sort of like Ctrl+F5 in a browser.

Fetching limits for user '<REMOVED>', just a sec...
Setting threads to 1 as allowed for the supplied user credentials.

Reading and parsing quick id xml, please wait... Done!
Reading and parsing resource cache, please wait... Done!
Successfully parsed 60759 resources!

Looking for optional 'priorities.xml' file in cache folder... Found!
Priorities loaded successfully!

Trying to parse and load existing game list metadata... Success!

Starting scraping run on 1 files using 1 threads.
Sit back, relax and let me do the work! :)

#1/1 (T1) Pass 1 ---- Game 'Mother 25th Restoration Hack' not found :( ----


#1/1, (0/1)
Elapsed time   : 00:00:08
Est. time left : 00:00:00

---- Resource gathering run completed! YAY! ----
Writing quick id xml, please wait... Done!
Writing 60759 (0 new) resources to cache, please wait... Done!

---- And here are some neat stats :) ----
Total completion time: 00:00:13

Total number of games: 1
Successfully processed games: 0
Skipped games: 1 (Filenames saved to '/home/<USER>/.skyscraper/skipped-nes-screenscraper.txt')

Technical information

  • Skyscraper version: v3.9.2 (latest stable release at time of opening this issue)
  • Configuration switches applied: check above for custom config.ini options as well as commands used
  • Internet connection: 940Mbps symmetrical download/upload service (1Gbps minus TCP/IP packet header overhead), Wi-Fi 6 (802.11ax)
  • OS and Version: RetroPie 4.8.6 (based on Raspbian GNU/Linux 10 (buster)), Raspberry Pi 4, Picade X HAT USB-C

Unable to Build Project

Was starting work on investigating this issue, but I need some guidance.

OS: Windows 11 (latest via Windows Update as of 12/31/2023)
Qt: Desktop Qt 6.6.1 MinGW 64-bit
Compiler: MinGW 11.2.0 64-bit for C++

Downloaded and installed Qt via latest online installer and default values. Immediately fails to build within Qt Creator with provided skyscraper.pro file with a "Qt requires a C++17 compiler" error:

g++ -c -fno-keep-inline-dllexport -std=c++11 -O2 -Wall -Wextra -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DVERSION=\"3.9.3-dev\" -DQT_NO_DEBUG_OUTPUT -DQT_QML_DEBUG -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_XML_LIB -DQT_CORE_LIB -I../skyscraper -I. -I../skyscraper -IC:/Qt/6.6.1/mingw_64/include -IC:/Qt/6.6.1/mingw_64/include/QtGui -IC:/Qt/6.6.1/mingw_64/include/QtNetwork -IC:/Qt/6.6.1/mingw_64/include/QtXml -IC:/Qt/6.6.1/mingw_64/include/QtCore -Irelease -I/include -IC:/Qt/6.6.1/mingw_64/mkspecs/win32-g++  -o release\imgtools.o ..\skyscraper\src\imgtools.cpp
In file included from C:/Qt/6.6.1/mingw_64/include/QtCore/qtcoreexports.h:7,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qglobal.h:26,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qpair.h:7,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qarraydata.h:8,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qarraydataops.h:8,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qarraydatapointer.h:7,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qlist.h:8,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qstringlist.h:5,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qcommandlineparser.h:7,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/QCommandLineParser:1,
                 from ..\skyscraper\src\cli.h:23,
                 from ..\skyscraper\src\main.cpp:26:
C:/Qt/6.6.1/mingw_64/include/QtCore/qcompilerdetection.h:1239:6: error: #error "Qt requires a C++17 compiler"
 1239 | #    error "Qt requires a C++17 compiler"
      |      ^~~~~

Upon updating skyscraper.pro with CONFIG += release to CONFIG += release c++17, I get new errors, but far fewer, however they are within MinGW itself:

g++ -c -fno-keep-inline-dllexport -std=c++11 -O2 -std=gnu++1z -Wall -Wextra -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DVERSION=\"3.9.3-dev\" -DQT_NO_DEBUG_OUTPUT -DQT_QML_DEBUG -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_XML_LIB -DQT_CORE_LIB -I../skyscraper -I. -I../skyscraper -IC:/Qt/6.6.1/mingw_64/include -IC:/Qt/6.6.1/mingw_64/include/QtGui -IC:/Qt/6.6.1/mingw_64/include/QtNetwork -IC:/Qt/6.6.1/mingw_64/include/QtXml -IC:/Qt/6.6.1/mingw_64/include/QtCore -Irelease -I/include -IC:/Qt/6.6.1/mingw_64/mkspecs/win32-g++  -o release\importscraper.o ..\skyscraper\src\importscraper.cpp
<command-line>: error: expected unqualified-id before string constant
../skyscraper/version:1:1: note: in expansion of macro 'VERSION'
    1 | VERSION="3.9.3-dev"
      | ^~~~~~~
In file included from C:/Qt/Tools/mingw1120_64/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++/bits/move.h:57,
                 from C:/Qt/Tools/mingw1120_64/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++/bits/stl_pair.h:59,
                 from C:/Qt/Tools/mingw1120_64/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++/utility:70,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qcompilerdetection.h:864,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qgenericatomic.h:8,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qatomic_cxx11.h:8,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qbasicatomic.h:8,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qatomic.h:8,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qrefcount.h:7,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/qbytearray.h:8,
                 from C:/Qt/6.6.1/mingw_64/include/QtCore/QByteArray:1,
                 from ..\skyscraper\src\gameentry.h:45,
                 from ..\skyscraper\src\xmlreader.h:29,
                 from ..\skyscraper\src\xmlreader.cpp:25:
C:/Qt/Tools/mingw1120_64/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++/type_traits:200:27: error: 'size_t' has not been declared
  200 |   template <typename _Tp, size_t = sizeof(_Tp)>
      |                           ^~~~~~

Leaving me to suspect this project is built using a different compiler altogether.

I've checked the project documentation and have not found any project build instructions or contribution guidelines. I will gladly document these once I figure them out.

Apologies if this is obvious to anyone else: I haven't touched C++ since school, never Qt, and have only worked on projects small enough where a manually-managed make file was appropriate. Believe I used g++. Since then, my career has largely been in Java and C#, so I'm rusty on some things.

So I guess the best thing to do now is ask the question:

How is the project built? (compiler, C++ version, IDE, etc.)

Override PREFIX in skyscraper.pro

I am trying to make a distro package for skyscraper, but I'm not too familiar with the build system, qmake. What is the correct way set the PREFIX to /usr rather than /usr/local? Can it be done from the configure command? Or do I need a patch... The problem is the generated Makefile installs to /usr/local.

aliasMap.csv not working with Screenscraper

Hi, it's me again :)

I came across this issue and saw you already worked on it and made some fix here and here. It doesn't work for me, but maybe I just don't know how to use aliasMap.csv properly.

Problem description
So I have some roms that weren't scraped, among them:
/home/pi/RetroPie/roms/gbc/Arle's Adventure - Magical Jewels (Japan) (SGB Enhanced) (GB Compatible) [T-En by Jazz v1.0] [n].zip
/home/pi/RetroPie/roms/gbc/Catz (Europe).zip

I added these lines to my aliasMap.csv (residing at /opt/retropie/configs/all/skyscraper):

Arle's Adventure - Magical Jewels (Japan) (SGB Enhanced) (GB Compatible) [T-En by Jazz v1.0] [n];Arle No Bouken - Mahou No Jewel
Catz (Europe);Catz - Your Virtual Petz Palz

I scraped gbc again, via the Retropie script. But still these roms aren't found even though they are in the database:
Arle:
https://www.screenscraper.fr/romsinfos.php?plateforme=10&alpha=A&numpage=3
https://www.screenscraper.fr/rominfos.php?romid=166110
Catz:
https://www.screenscraper.fr/romsinfos.php?plateforme=10&alpha=C&numpage=2
https://www.screenscraper.fr/rominfos.php?romid=166249

Am I doing it wrong? Does it only work from the console? Do I need to edit aliasMap.csv differently? If so, the guide is not clear enough (at least for me).

Technical information

  • Skyscraper version: built from source today - It says commit is "06c1d96423a9a0cc75995b5f94b50f5b59deaefb" - Is this the problem? That's from 2 weeks ago, not up-to-date? How do I build with the latest commits?
  • Internet connection: LAN
  • OS: RetroPie
  • OS Version: 4.8.6

Option "skipped" does not seem to work (some roms without bracket info)

Problem description:

So I have some files that are scraped and some that are not, for example in PC9800 roms.
Example for a scraped file: Farland Story III - Angel's Tears [T-En by BTAxis v1.0].zip
Example for a file that is not found: Farland Story III - Angel's Tears [T-En by BTAxis v1.0] [Original Difficulty].zip

To differentiate all my files, I would like to have the bracket information always added for all files. Thus, in my /opt/retropie/configs/all/skyscraper/config.ini I have
#brackets="true"
unchanged. I know it's commented out but "true" should be the default, right? By the way, most of the options are unchanged in my config.ini. When generating a gamelist, I use the option "rom names: source name" because it's sometimes more informative and the bracket information should be added, too, right? Either from filename or source. So what I get now is a /opt/retropie/configs/all/emulationstation/gamelists/pc98/gamelist.xml with

<path>/home/pi/RetroPie/roms/pc98/Farland Story III - Angel&apos;s Tears [T-En by BTAxis v1.0].zip</path>
<name>Farland Story 3 [T-En by BTAxis v1.0]</name>

and

<path>/home/pi/RetroPie/roms/pc98/Farland Story III - Angel&apos;s Tears [T-En by BTAxis v1.0] [Original Difficulty].zip</path>
<name>Farland Story III - Angel&apos;s Tears</name>

That's the main problem: The scraped one has the bracket info added to its name, the non-scraped has not. How can I have the bracket info also added for the non-scraped one? I thought the "skipped" option might do this. Docs says "If a rom has no resources attached to it in the cache, it will be left out when generating a game list file." So if it's left out, the non-scraped ones shouldn't appear in the gamelist at all and Emulationstation should use the filename. But no matter whether I use

[main]
skipped="true"

or

[main]
skipped="false"

or

[main]
unattendSkip="true"

or

[main]
unattendSkip="false"

nothing changes. The non-scraped rom always appears in the gamelist too and the brackets are removed. What can I do about it?

Technical information

  • Skyscraper version: 3.10.1
  • Internet connection: LAN
  • OS: RetroPie
  • OS Version: 4.8.6

Scrape only one rom to custom directory

Hi,

Im trying to scrape for one rom not whole folder

Skyscraper -p "nes" -s "screenscraper" -o "/folder/.tmp/" "/folder/game.nes"

But its not working

Can i ouput the image name to same name as rom game name? Or this will be crazy number 234234235?

[Build/macOS] | Compile errors when using newest versions of qt5 and Xcode Command Line Tools (macOS 13+)

Describe the bug
Error when building on macOS possibly related to changes in nametools.cpp (bug introduced?)

To Reproduce
I'm aware the macOS is unsupported but I wanted to note this in case any other users using macOS have seen the same issue and it's something we can solve.

This bug happens when attempting to build the project on macOS14.5 and macOS13.0, but only with this fork.
Bug can be seen by installing required documented dependencies and running the install process via update_skyscraper.sh.

I've tried on both the tagged release and also the development version (in dev I just comment out the part which downloads and untars the latest version of the code).

The general tooling of qt5 via homebrew and other required dependencies are installed and work correctly, as I'm able to build the version at: https://github.com/muldjord/skyscraper without any issue using the same build process and dependencies (i.e I just swap the git location for the source code and it installs without error).

The error:

src/nametools.cpp:59:19: error: call to deleted constructor of 'QFile'
            QFile romFile = QFile(info.absoluteFilePath());
                  ^         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/homebrew/Cellar/qt@5/5.15.13_1/lib/QtCore.framework/Headers/qfile.h:163:20: note: 'QFile' has been explicitly marked deleted here
    Q_DISABLE_COPY(QFile)

I note that this file has been changed quite significantly, also that it works fine on Linux and probably older versions of macOS as other people have been able to run your fork.

I also note the very first warning when running the script:

Qt has only been tested with version 12 of the platform SDK, you're using 14.

This relates to the version of the CommandLineTools (Xcode) SDK. I'm investigating if it's possible to either get qt to use another version of the SDK or I might have to install Xcode (the full version) to be able to switch versions directly at the system level. (edit: not required, see my below update)

Terminal output

Technical information

  • Skyscraper version: 3.12.0-dev
  • MacOS 14.5 / 13.0
qmake --version
QMake version 3.1
Using Qt version 5.15.13 in /opt/homebrew/Cellar/qt@5/5.15.13_1/lib

which gcc
/usr/bin/gcc

gcc -v
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: arm64-apple-darwin23.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

.qmake.stash

QMAKE_MAC_SDK.macosx.Path = /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
QMAKE_MAC_SDK.macosx.SDKVersion = 14.4
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_CC = /Library/Developer/CommandLineTools/usr/bin/clang
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_CXX = /Library/Developer/CommandLineTools/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_FIX_RPATH = \
    /Library/Developer/CommandLineTools/usr/bin/install_name_tool \
    -id
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_AR = \
    /Library/Developer/CommandLineTools/usr/bin/ar \
    cq
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_RANLIB = \
    /Library/Developer/CommandLineTools/usr/bin/ranlib \
    -s
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK = /Library/Developer/CommandLineTools/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK_SHLIB = /Library/Developer/CommandLineTools/usr/bin/clang++
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK_C = /Library/Developer/CommandLineTools/usr/bin/clang
QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK_C_SHLIB = /Library/Developer/CommandLineTools/usr/bin/clang
QMAKE_CXX.QT_COMPILER_STDCXX = 199711L
QMAKE_CXX.QMAKE_APPLE_CC = 6000
QMAKE_CXX.QMAKE_APPLE_CLANG_MAJOR_VERSION = 15
QMAKE_CXX.QMAKE_APPLE_CLANG_MINOR_VERSION = 0
QMAKE_CXX.QMAKE_APPLE_CLANG_PATCH_VERSION = 0
QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 4
QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 2
QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 1
QMAKE_CXX.COMPILER_MACROS = \
    QT_COMPILER_STDCXX \
    QMAKE_APPLE_CC \
    QMAKE_APPLE_CLANG_MAJOR_VERSION \
    QMAKE_APPLE_CLANG_MINOR_VERSION \
    QMAKE_APPLE_CLANG_PATCH_VERSION \
    QMAKE_GCC_MAJOR_VERSION \
    QMAKE_GCC_MINOR_VERSION \
    QMAKE_GCC_PATCH_VERSION
QMAKE_CXX.INCDIRS = \
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 \
    /Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/include \
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include \
    /Library/Developer/CommandLineTools/usr/include
QMAKE_CXX.LIBDIRS = \
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib \
    /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/swift
QMAKE_MAC_SDK.macosx.SDKVersion = 14.4
QMAKE_MAC_SDK.macosx.Path = /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
QMAKE_XCODE_DEVELOPER_PATH = /Library/Developer/CommandLineTools

Full output of update_skyscraper.sh

~/Applications/skysource/skyscraper_mac master* ❯ sh update_skyscraper_dev.sh

Project WARNING: Qt has only been tested with version 12 of the platform SDK, you're using 14.
Project WARNING: This is an unsupported configuration. You may experience build issues, and by using
Project WARNING: the 14.4 SDK you are opting in to new features that Qt has not been prepared for.
Project WARNING: Please downgrade the SDK you use to build your app to version 12, or configure
Project WARNING: with CONFIG+=sdk_no_version_check when running qmake to silence this warning.

Project WARNING: Qt has only been tested with version 12 of the platform SDK, you're using 14.
Project WARNING: This is an unsupported configuration. You may experience build issues, and by using
Project WARNING: the 14.4 SDK you are opting in to new features that Qt has not been prepared for.
Project WARNING: Please downgrade the SDK you use to build your app to version 12, or configure
Project WARNING: with CONFIG+=sdk_no_version_check when running qmake to silence this warning.
In file included from src/main.cpp:28:
In file included from src/skyscraper.h:34:
In file included from src/scraperworker.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
In file included from src/skyscraper.cpp:50:
src/esde.h:37:17: warning: 'createEsVariantXml' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    QStringList createEsVariantXml(const GameEntry &entry);
                ^
src/emulationstation.h:61:25: note: overridden virtual function is here
    virtual QStringList createEsVariantXml(const GameEntry &entry);
                        ^
In file included from src/skyscraper.cpp:50:
src/esde.h:38:17: warning: 'extraGamelistTags' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    QStringList extraGamelistTags(bool isFolder);
                ^
src/emulationstation.h:62:25: note: overridden virtual function is here
    virtual QStringList extraGamelistTags(bool isFolder /* ignored on RP ES */);
                        ^
In file included from src/skyscraper.cpp:50:
src/esde.h:39:23: warning: 'gamelistFormat' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    GameEntry::Format gamelistFormat() { return GameEntry::Format::ESDE; };
                      ^
src/emulationstation.h:63:31: note: overridden virtual function is here
    virtual GameEntry::Format gamelistFormat() {
                              ^
In file included from src/skyscraper.cpp:53:
In file included from src/skyscraper.h:34:
In file included from src/scraperworker.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
1 warning generated.
In file included from src/esgamelist.cpp:26:
In file included from src/esgamelist.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
In file included from src/scraperworker.cpp:26:
In file included from src/scraperworker.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
1 warning generated.
4 warnings generated.
In file included from src/importscraper.cpp:26:
In file included from src/importscraper.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
In file included from src/localscraper.cpp:26:
In file included from src/localscraper.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
1 warning generated.
In file included from src/abstractscraper.cpp:26:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
src/abstractscraper.cpp:496:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
        if (QString whdTitle = config->whdLoadMap[baseName].first;
            ^
src/abstractscraper.cpp:506:16: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
    } else if (QString romTitle = lookupArcadeTitle(baseName);
               ^
src/abstractscraper.cpp:577:13: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
        if (QString whdTitle = config->whdLoadMap[baseName].first;
            ^
src/abstractscraper.cpp:586:16: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
    } else if (QString romTitle = lookupArcadeTitle(baseName);
               ^
src/abstractscraper.cpp:619:9: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
    if (int leftParPos = fn.indexOf("("); leftParPos != -1) {
        ^
1 warning generated.
In file included from src/esde.cpp:20:
src/esde.h:37:17: warning: 'createEsVariantXml' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    QStringList createEsVariantXml(const GameEntry &entry);
                ^
src/emulationstation.h:61:25: note: overridden virtual function is here
    virtual QStringList createEsVariantXml(const GameEntry &entry);
                        ^
In file included from src/esde.cpp:20:
src/esde.h:38:17: warning: 'extraGamelistTags' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    QStringList extraGamelistTags(bool isFolder);
                ^
src/emulationstation.h:62:25: note: overridden virtual function is here
    virtual QStringList extraGamelistTags(bool isFolder /* ignored on RP ES */);
                        ^
In file included from src/esde.cpp:20:
src/esde.h:39:23: warning: 'gamelistFormat' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    GameEntry::Format gamelistFormat() { return GameEntry::Format::ESDE; };
                      ^
src/emulationstation.h:63:31: note: overridden virtual function is here
    virtual GameEntry::Format gamelistFormat() {
                              ^
3 warnings generated.
6 warnings generated.
In file included from src/openretro.cpp:26:
In file included from src/openretro.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
1 warning generated.
In file included from src/thegamesdb.cpp:26:
In file included from src/thegamesdb.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
1 warning generated.
In file included from src/worldofspectrum.cpp:26:
In file included from src/worldofspectrum.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
In file included from src/screenscraper.cpp:26:
In file included from src/screenscraper.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
1 warning generated.
In file included from src/mobygames.cpp:26:
In file included from src/mobygames.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
1 warning generated.
src/screenscraper.cpp:612:21: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
                if (QString ret = getUrlOrTextPropertyValue(
                    ^
src/screenscraper.cpp:649:58: warning: 'if' initialization statements are a C++17 extension [-Wc++17-extensions]
                                                    type);
                                                         ^
In file included from src/igdb.cpp:26:
In file included from src/igdb.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
In file included from src/arcadedb.cpp:26:
In file included from src/arcadedb.h:29:
src/abstractscraper.h:47:38: warning: braces around scalar initializer [-Wbraced-scalar-init]
                    MatchType type = {ABSTRACT});
                                     ^~~~~~~~~~
1 warning generated.
1 warning generated.
1 warning generated.
3 warnings generated.
src/nametools.cpp:59:19: error: call to deleted constructor of 'QFile'
            QFile romFile = QFile(info.absoluteFilePath());
                  ^         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/homebrew/Cellar/qt@5/5.15.13_1/lib/QtCore.framework/Headers/qfile.h:163:20: note: 'QFile' has been explicitly marked deleted here
    Q_DISABLE_COPY(QFile)
                   ^
1 error generated.
make: *** [nametools.o] Error 1
make: *** Waiting for unfinished jobs....

[Bug] Install script fails on Fedora 40

Installation script fails on Fedora 40. Full explanation included in the fixing PR: #78

Technical information

  • Skyscraper version: 3.12.0
  • OS and Version: Fedora 40 Workstation

Make a difference between "Screenshot" and "Screenshot Title" for Screenscraper

Screenscraper provides two types of screenshots: "Screenshots" and "Screenshot Titles".

Unbenannt

Skyscraper seems to have only one category for both types. My problem is, if I set my prefered region in Sykscraper to let's say Germany, it will scrape the "Screenshot Title", because the "regular" screenshots are mostly international. And yeah.. I don't want these Screenshot Titles, I want the regular ones.

So my request is to make a difference between these screenshot types. You could add a new category for screenshot titles or add an option to config.ini where people could choose one or the other.

Regarding the Windows version

I compiled it and it starts up.
However it throws "WARN: QSslSocket::connectToHostEncrypted: TLS initialization failed"
at me. Something to do with openssl?

Install Instructions aren't updated

Install instructions weren't completely updated after forking from detain

  1. README points you to curl | bash from the update script on the master branch, but this script still points to detain's fork and thus results in 3.7.7 from detain being installed, should just need to update the reference from master to dev_reloaded
  2. There's an extra backtick in the update script on line 3 at the end from a refactor changing backticks to $() style command execution in bash

[enhancement] Ability to add content to the scraped data

Greetings!

there is a little QOL enhancement ide like to bring up making it way eaier for some of us to sort our games.
Option: -addcontent
Function: Appends valid Text to a given column of the scraped data in the format of Column:"Data"

Example1: Skyscraper -p snes-lg --addcontent Control:"Lightgun, "
Example2: Skyscraper -p snes --addcontent Name:"SNES-"

Segmentation fault when running with invalid frontend name

Describe the bug
If you supply an invalid frontend name in the config file or via the command line, Skyscraper ungracefully crashes with the message "Segmentation fault (core dumped)"

Note this happens even if you supply the write frontend name but with the wrong case.

To Reproduce
Run Skyscraper with an invalid frontend. For example:
Skyscraper -p snes -s screenscraper -f Pegasus

Expected behavior
We should tell the user the frontend is invalid, and perhaps print out a list of valid names

Special circumstances
This was running Linux Mint which is case sensitive for many more things than other platforms like Windows might be. But this probably not due to filesystem case sensitivity.

Technical information

  • Skyscraper version: 3.10.0
  • Configuration switches applied: -f switch, or frontend cvar
  • OS and Version: Linux Mint 21.2 Cinnamon

ES-DE Gamelist Format Change

Describe the bug
EmulationStation (now known as ES-DE) no longer uses certain tags in gamelist.xml, these tags are: "image", "marquee", "texture", "thumbnail", "video"

Instead it finds these files using the following method (which has been working fine, this ticket is more about removing unused tags): https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md?ref_type=heads#manually-copying-game-media-files

To Reproduce
Create a gamelist.xml using Skyscraper, it will contain tags not required by ES-DE.

Expected behavior
Valid

Special circumstances
NA

Terminal output
NA

Technical information

  • Skyscraper v3.10.1

Additional context
https://gitlab.com/es-de/emulationstation-de/-/issues/1663

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.