Kodi Community Forum

Full Version: Advanced Emulator Launcher - Multi-emulator frontend for Kodi
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
@master Blaster

Have you tried lowercase zip as extension instead of upper case? All my launchers have No-Intro zipped ROMs an they work OK so they should work for you as well.

The $AEL_DATA_DIR directory in Windows machines is located in:

Code:
$AEL_DATA_DIR = C:\Users\your_username\AppData\Roaming\Kodi\userdata\addon_data\plugin.program.advanced.emulator.launcher\

Be careful because AppData is a hidden directory.

Regarding the scrapers: they are disabled by default because you are supposed to download the artwork packs for your launcher. You have links in the first post. Also, make sure you read the "Scrapers demistified" post (link in the first post). Although very similar in purpose, AEL works in a different way to RCB. I guess I will take some time for you to get used to AEL ways.
Ok, here it is:

*** Starting ROM scanner ... ***
  Launcher name "Super Nintendo"
  launcher ID   "77da0a51d6b0074696a2f6c4cd621604"
  ROM path      "G:\Games\Emu_Zone\SNES\snes roms\"
  ROM ext       ".zip"
  Platform      "Nintendo SNES"
Loading launcher ROMs ...
1 ROMs currently in database
Removing dead ROMs ...
Scanning files ...
  Directory G:\Games\Emu_Zone\SNES\snes roms\
  File scanner found 1530 files
Processing files ...
>>> G:\Games\Emu_Zone\SNES\snes roms\2020 Super Baseball (U).zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\3 Ninjas Kick Back (U).zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\7th Saga, The (U) [!].zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\A.S.P. Air Strike Patrol (U).zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\AAAHH!!! Real Monsters (U) [!].zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\ABC Monday Night Football (U).zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\ACME Animation Factory (U).zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\AD&D - Eye of the Beholder (U) [!].zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\ActRaiser (U) [!].zip
  File has not an expected extension. Skipping file.
>>> G:\Games\Emu_Zone\SNES\snes roms\ActRaiser 2 (U) [!].zip
  File has not an expected extension. Skipping file.


...and so on !

so what is the expected extension to be ?

back to scrapers one more time: i have most of the artwork for NES and i have it in my asset folder (e.g. under boxfronts), but when i open my NES rom collection there is no picture for any rom. I have to say that i chose boxfront as symbol to be shown. And the directory is also set correct.
(2017-11-25, 14:53)Wintermute0110 Wrote: [ -> ]
(2017-11-24, 23:43)crono141 Wrote: [ -> ]As a follow up bug: If you have your ROM asset folders set to a folder that does not exist, that also causes an error, instead of creating that folder first.  This appears to be true in 0.9.7 as well.

OK. That can only be possible if the user deletes the directory. Either if you use the Add Launcher wizard or use an XML config file to create the Launcher, asset directories are automatically created at launcher creation time. I think the correct behavior for AEL in this situation is not crash (of course) and notify the user the directory does not exist and treat it like an unconfigured directory. I don't think that creating missing directories that should be there would be such a good idea because, for example, you may have your artwork in a remote filesystem that is current unavailable. By notifying the user then you can open the Kodi File Manager to confirm the remote filesystem is not mounted.

EDIT: I can reproduce the bug. I've looking at the code responsible and it needs some refactoring (both in the ROM scanner and in "Rescan Launcher assets/artwork". I will fix it ASAP but is going to take some time. 

You are correct.  I didn't realize (or remember) that asset folders are set on a per launcher basis.  So I saw some in my expected folder, and also a sub-folder created by another launcher when it scraped.  I moved the existing assets over and deleted the original folder.  When I moved everything back, the crash disappeared.

So... operator error on my part.  Thanks.
(2017-11-26, 20:34)Master_Blaster Wrote: [ -> ]Ok, here it is:
Code:
*** Starting ROM scanner ... ***
  Launcher name "Super Nintendo"
  launcher ID   "77da0a51d6b0074696a2f6c4cd621604"
  ROM path      "G:\Games\Emu_Zone\SNES\snes roms\"
  ROM ext       ".zip"
  Platform      "Nintendo SNES"
Loading launcher ROMs ...
1 ROMs currently in database
Removing dead ROMs ...
Scanning files ...
  Directory G:\Games\Emu_Zone\SNES\snes roms\
  File scanner found 1530 files
Processing files ...
>>> G:\Games\Emu_Zone\SNES\snes roms\2020 Super Baseball (U).zip
  File has not an expected extension. Skipping file.
...

...and so on !

so what is the expected extension to be ?

back to scrapers one more time: i have most of the artwork for NES and i have it in my asset folder (e.g. under boxfronts), but when i open my NES rom collection there is no picture for any rom. I have to say that i chose boxfront as symbol to be shown. And the directory is also set correct. 

I think I found the problem. Instead of .zip try zip as the extension!

The ROM Scanner only scans new ROMs and skips ROMs already in the database. This means that if you want the scanner to pick the local artwork you have to delete the ROMs from the Launcher first and the run the ROM scanner again. You can also use the context menu, "Edit Launcher", "Manage ROMs", "Rescan ROMs assets/artwork" to search for local available artwork.

There are several ways to know if the artwork is there:

1) ROM context menu, "Edit assets", you should be able the artwork pieces you have.

2) ROM context menu, "View", "View ROM data". The raw database ROM information will show. Look for fields starting with s_ like s_title, s_snap, etc.
Hi !

I was wondering if there are a way to desativate the mutli disc option.

I have many CHD, like the Shenmue series on dreamcast etc.. . I can't make this option do work properly. It only show some of them, not always the same and I can't understand the way it works. For exemple , i can see twice shemnue 2 disc 3 but not the first one, and not the first shenmue etc.. I tried to rename them without succes...

How can I remove this "group" and just show the 4 CD ?

Thanks For all!

regards
Regarding UNC path support mentioned earlier in this thread. Does anyone know if I should expect that to work on Android (Fire TV) as well? 

I'm a new user and just set up AEL and RetroArch. I can get a ROM to launch through AEL from a local directory, but when using an smb share AEL doesn't find anything when it  scans the remote  directory. I can add a ROM from that directory manually , but when it tries to launch it says it can't find the ROM.

The 2nd launcher below is the one I'm using ("sega2").
Code:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Exported by AEL on 2017-11-27 15:53:40 -->
<advanced_emulator_launcher_configuration>
<category>
  <name>Sega</name>
  <genre />
  <rating />
  <plot />
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_trailer />
</category>
<launcher>
  <name>Genesis</name>
  <category>Sega</category>
  <year />
  <genre />
  <developer />
  <rating />
  <plot />
  <platform>Sega MegaDrive</platform>
  <application>/system/bin/am</application>
  <args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
  <args_extra>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/picodrive_libretro.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args_extra>
  <ROM_path />
  <ROM_ext>zip|md|7z</ROM_ext>
  <path_title />
  <path_snap />
  <path_boxfront />
  <path_boxback />
  <path_cartridge />
  <path_fanart />
  <path_banner />
  <path_clearlogo />
  <path_flyer />
  <path_map />
  <path_manual />
  <path_trailer />
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_controller />
  <s_trailer />
</launcher>
<launcher>
  <name>sega2</name>
  <category>Sega</category>
  <year />
  <genre />
  <developer />
  <rating />
  <plot />
  <platform>Sega Genesis</platform>
  <application>/system/bin/am</application>
  <args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
  <args_extra />
  <ROM_path>smb://192.168.0.11/wd3tb/ROMs/Sega/</ROM_path>
  <ROM_ext>zip|md|7z</ROM_ext>
  <ROM_asset_path>/storage/emulated/0/Android/data/org.xbmc.kodi/files/.kodi/userdata/addon_data/plugin.program.advanced.emulator.launcher/asset-collections</ROM_asset_path>
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_controller />
  <s_trailer />
</launcher>
</advanced_emulator_launcher_configuration>

The JSON file https://pastebin.com/0YM3Kjpx

A portion of the log https://pastebin.com/5txkGbEW
(2017-11-27, 17:39)yevaman44 Wrote: [ -> ]Hi !

I was wondering if there are a way to desativate the mutli disc option.

I have many CHD, like the Shenmue series on dreamcast etc.. . I can't make this option do work properly. It only show some of them, not always the same and I can't understand the way it works. For exemple , i can see twice shemnue 2 disc 3 but not the first one, and not the first shenmue etc.. I tried to rename them without succes...

How can I remove this "group" and just show the 4 CD ?

Thanks For all!

regards

Adding a global settings (Enable/Disable multidisc for all ROMs) or a per-launcher setting (Enable/Disable multidisc support for each Launcher) is very easy. What do you think?

In case multidisc is enabled (in current AEL is always enabled and you cannot disable it unless you change the Python code) having mixed cases would be very complicated. Some other folk, a few pages ago, mention that some launchers require special treatment: for example, Amiga games that require several floppy disk, an each floppy disk requires custom launcher arguments. This is similar to the multidisc case and then I proposed to create some ROM XML configuration, similar to the NFO files, but instead of metadata the ROM XML has info about the several disks in the game and any particular arguments required. I never heard of this guy again so I forgot about this. I'm telling you this because a good implementation for what you want is to disable multidisc support and have the feature of recognizing special ROM launcher cases with XML config files.

Current multidisc support is rather incomplete and requires some improvement. However, the multidisc ROM name parser should work OK and correctly identify Disk 1, Disk 2, etc. Please upload an AEL debug log of the ROM Scanner (delete all ROMs from the Dreamcast launcher and run the scanner again).
(2017-11-27, 23:26)einniv Wrote: [ -> ]Regarding UNC path support mentioned earlier in this thread. Does anyone know if I should expect that to work on Android (Fire TV) as well? 

I'm a new user and just set up AEL and RetroArch. I can get a ROM to launch through AEL from a local directory, but when using an smb share AEL doesn't find anything when it  scans the remote  directory. I can add a ROM from that directory manually , but when it tries to launch it says it can't find the ROM.

The 2nd launcher below is the one I'm using ("sega2").
Code:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Exported by AEL on 2017-11-27 15:53:40 -->
<advanced_emulator_launcher_configuration>
<category>
  <name>Sega</name>
  <genre />
  <rating />
  <plot />
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_trailer />
</category>
<launcher>
  <name>Genesis</name>
  <category>Sega</category>
  <year />
  <genre />
  <developer />
  <rating />
  <plot />
  <platform>Sega MegaDrive</platform>
  <application>/system/bin/am</application>
  <args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
  <args_extra>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/picodrive_libretro.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args_extra>
  <ROM_path />
  <ROM_ext>zip|md|7z</ROM_ext>
  <path_title />
  <path_snap />
  <path_boxfront />
  <path_boxback />
  <path_cartridge />
  <path_fanart />
  <path_banner />
  <path_clearlogo />
  <path_flyer />
  <path_map />
  <path_manual />
  <path_trailer />
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_controller />
  <s_trailer />
</launcher>
<launcher>
  <name>sega2</name>
  <category>Sega</category>
  <year />
  <genre />
  <developer />
  <rating />
  <plot />
  <platform>Sega Genesis</platform>
  <application>/system/bin/am</application>
  <args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
  <args_extra />
  <ROM_path>smb://192.168.0.11/wd3tb/ROMs/Sega/</ROM_path>
  <ROM_ext>zip|md|7z</ROM_ext>
  <ROM_asset_path>/storage/emulated/0/Android/data/org.xbmc.kodi/files/.kodi/userdata/addon_data/plugin.program.advanced.emulator.launcher/asset-collections</ROM_asset_path>
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_controller />
  <s_trailer />
</launcher>
</advanced_emulator_launcher_configuration>

The JSON file https://pastebin.com/0YM3Kjpx

A portion of the log https://pastebin.com/5txkGbEW

The only current piece of documentation about UNC paths is in AEL changelog. I reproduce it here for convenience.
Code:
FEATURE ROMs in UNC paths. It seems Retroarch added UNC path support recently.
See https://forum.kodi.tv/showthread.php?tid=287826&pid=2647152#pid2647152

[Windows]
Workaround in _run_process() to add an extra '\\' character if argument starts with
a '\\'. This is to fix shlex.split() behaviour.

Tested in Windows only with the following configuration:
<ROM_path>\\SERVER_NAME\AEL-ROMs\sega-genesis\</ROM_path>
<ROM_asset_path>smb://SERVER_NAME/AEL-assets/sega-genesis/</ROM_asset_path>

This configuration also works in Windows:
<ROM_path>smb://SERVER_NAME/AEL-ROMs/sega-genesis/</ROM_path>
<ROM_asset_path>smb://SERVER_NAME/AEL-assets/sega-genesis/</ROM_asset_path>

Artwork is stored in JSON DB as "smb://SERVER_NAME/AEL-assets/sega-genesis/boxbacks\\Sonic.jpg"
ROMs are saved in JSON DB as "\\\\SERVER_NAME\\AEL-ROMs\\sega-genesis\\Sonic.md"

Kodi artwork does not work with paths like \\SERVER_NAME\AEL-ROMs\sega-genesis\image.png.
Correct path for artwork is smb://SERVER_NAME/AEL-ROMs/sega-genesis/image.png.

Retroarch requires a ROM path like \\SERVER_NAME\AEL-ROMs\sega-genesis\Sonic.md.

Note that I tested the UNC support in a Windows computer at work. I have not tested it on Linux (at thome) and since I don't have an Android machine I won't be able to test it on Android. However, my tests indicate Retroarch requires paths like \\SERVER_NAME\AEL-ROMs\sega-genesis\Sonic.md in spite that in Windows having a ROM path like smb://SERVER_NAME/AEL-ROMs/sega-genesis/ seems to work (that is, AEL scans the ROM path, finds the ROMs and adds them to the database). Note that AEL may be able to find the ROMs in the remote but Retroarch is not able to launch the ROM if the UNC path is not in the correct format.

In order to do some test, I recommend you create one or several Standalone Launchers using AEL XML config files to launch Retroarch and load Sonic.md ROM. Currently AEL is not launching your ROM because it does not find the ROM in the remote before launching. Standalone launcher do not check this so you can do your tests unconstrained. Please test the cases of having a \\Server\dir\Rom.md path and having a smb://Server/dir/Rom.md. With the XML launcher config files it is very quick to change stuff and then reload, and do some tests. Please report back you findings so I can add them to the docs and help other Android users.
Yeah !! Now i got SNES and NES setup and running. For some reason i had to scan for roms in case of NES 3 times in a row until any roms were in the NES folder, After the first two scrapings in was just zero. Anyway...is it also possible to show gameinformation for each rom ? And is there an option to have mutiple icons viewing fpr each rom, lets say boxback and bockfront with logo and gameinfons at once ?
(2017-11-28, 15:31)Master_Blaster Wrote: [ -> ]Yeah !! Now i got SNES and NES setup and running. For some reason i had to scan for roms in case of NES 3 times in a row until any roms were in the NES folder, After the first two scrapings in was just zero. Anyway...is it also possible to show gameinformation for each rom ? And is there an option to have mutiple icons viewing fpr each rom, lets say boxback and bockfront with logo and gameinfons at once ?

It is of course possible but you need to install a skin that supports AEL. At the moment you have 3 choices for Kodi Krypton: Arctic Zephyr Plus, Estuary AEL Mod, Confluence AEL Mod. About Estuary AEL Mod and Confluence AEL Mod, you have more information on the second post of this thread.
(2017-11-28, 09:17)Wintermute0110 Wrote: [ -> ]
(2017-11-27, 17:39)yevaman44 Wrote: [ -> ] 
Adding a global settings (Enable/Disable multidisc for all ROMs) or a per-launcher setting (Enable/Disable multidisc support for each Launcher) is very easy. What do you think? 

It would be a great idea yes !!

I'm not at home but I will try to give you the log as soon as I can !

Thx for the support ! It's glad to see a dev so implicated for his community !
(2017-11-28, 09:24)Wintermute0110 Wrote: [ -> ]
(2017-11-27, 23:26)einniv Wrote: [ -> ]Regarding UNC path support mentioned earlier in this thread. Does anyone know if I should expect that to work on Android (Fire TV) as well? 

I'm a new user and just set up AEL and RetroArch. I can get a ROM to launch through AEL from a local directory, but when using an smb share AEL doesn't find anything when it  scans the remote  directory. I can add a ROM from that directory manually , but when it tries to launch it says it can't find the ROM.

The 2nd launcher below is the one I'm using ("sega2").
Code:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Exported by AEL on 2017-11-27 15:53:40 -->
<advanced_emulator_launcher_configuration>
<category>
  <name>Sega</name>
  <genre />
  <rating />
  <plot />
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_trailer />
</category>
<launcher>
  <name>Genesis</name>
  <category>Sega</category>
  <year />
  <genre />
  <developer />
  <rating />
  <plot />
  <platform>Sega MegaDrive</platform>
  <application>/system/bin/am</application>
  <args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
  <args_extra>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/picodrive_libretro.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args_extra>
  <ROM_path />
  <ROM_ext>zip|md|7z</ROM_ext>
  <path_title />
  <path_snap />
  <path_boxfront />
  <path_boxback />
  <path_cartridge />
  <path_fanart />
  <path_banner />
  <path_clearlogo />
  <path_flyer />
  <path_map />
  <path_manual />
  <path_trailer />
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_controller />
  <s_trailer />
</launcher>
<launcher>
  <name>sega2</name>
  <category>Sega</category>
  <year />
  <genre />
  <developer />
  <rating />
  <plot />
  <platform>Sega Genesis</platform>
  <application>/system/bin/am</application>
  <args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;%rom%&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
  <args_extra />
  <ROM_path>smb://192.168.0.11/wd3tb/ROMs/Sega/</ROM_path>
  <ROM_ext>zip|md|7z</ROM_ext>
  <ROM_asset_path>/storage/emulated/0/Android/data/org.xbmc.kodi/files/.kodi/userdata/addon_data/plugin.program.advanced.emulator.launcher/asset-collections</ROM_asset_path>
  <Asset_Prefix />
  <s_icon />
  <s_fanart />
  <s_banner />
  <s_poster />
  <s_clearlogo />
  <s_controller />
  <s_trailer />
</launcher>
</advanced_emulator_launcher_configuration>

The JSON file https://pastebin.com/0YM3Kjpx

A portion of the log https://pastebin.com/5txkGbEW

The only current piece of documentation about UNC paths is in AEL changelog. I reproduce it here for convenience.
Code:
FEATURE ROMs in UNC paths. It seems Retroarch added UNC path support recently.
See https://forum.kodi.tv/showthread.php?tid=287826&pid=2647152#pid2647152

[Windows]
Workaround in _run_process() to add an extra '\\' character if argument starts with
a '\\'. This is to fix shlex.split() behaviour.

Tested in Windows only with the following configuration:
<ROM_path>\\SERVER_NAME\AEL-ROMs\sega-genesis\</ROM_path>
<ROM_asset_path>smb://SERVER_NAME/AEL-assets/sega-genesis/</ROM_asset_path>

This configuration also works in Windows:
<ROM_path>smb://SERVER_NAME/AEL-ROMs/sega-genesis/</ROM_path>
<ROM_asset_path>smb://SERVER_NAME/AEL-assets/sega-genesis/</ROM_asset_path>

Artwork is stored in JSON DB as "smb://SERVER_NAME/AEL-assets/sega-genesis/boxbacks\\Sonic.jpg"
ROMs are saved in JSON DB as "\\\\SERVER_NAME\\AEL-ROMs\\sega-genesis\\Sonic.md"

Kodi artwork does not work with paths like \\SERVER_NAME\AEL-ROMs\sega-genesis\image.png.
Correct path for artwork is smb://SERVER_NAME/AEL-ROMs/sega-genesis/image.png.

Retroarch requires a ROM path like \\SERVER_NAME\AEL-ROMs\sega-genesis\Sonic.md.

Note that I tested the UNC support in a Windows computer at work. I have not tested it on Linux (at thome) and since I don't have an Android machine I won't be able to test it on Android. However, my tests indicate Retroarch requires paths like \\SERVER_NAME\AEL-ROMs\sega-genesis\Sonic.md in spite that in Windows having a ROM path like smb://SERVER_NAME/AEL-ROMs/sega-genesis/ seems to work (that is, AEL scans the ROM path, finds the ROMs and adds them to the database). Note that AEL may be able to find the ROMs in the remote but Retroarch is not able to launch the ROM if the UNC path is not in the correct format.

In order to do some test, I recommend you create one or several Standalone Launchers using AEL XML config files to launch Retroarch and load Sonic.md ROM. Currently AEL is not launching your ROM because it does not find the ROM in the remote before launching. Standalone launcher do not check this so you can do your tests unconstrained. Please test the cases of having a \\Server\dir\Rom.md path and having a smb://Server/dir/Rom.md. With the XML launcher config files it is very quick to change stuff and then reload, and do some tests. Please report back you findings so I can add them to the docs and help other Android users.   
Thanks for the tip on how to quickly test the setup.  It appears UNC paths do not work in RetroArch on Android. The Windows version must be relying on the operating system (which makes sense).

These are the launchers I added. Only the first one (using a file on the Firestick itself) worked. 
Code:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Exported by AEL on 2017-11-28 11:30:23 -->
<advanced_emulator_launcher_configuration>
<category>
<name>Sega</name>
<genre />
<rating />
<plot />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_trailer />
</category>
<launcher>
<name>Genesis Chess Local</name>
<category>Sega</category>
<year />
<genre />
<developer />
<rating />
<plot />
<platform>Sega Genesis</platform>
<application>/system/bin/am</application>
<args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;/storage/emulated/0/ROMs/Chess.gen&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
<args_extra />
<ROM_path />
<ROM_ext />
<path_title />
<path_snap />
<path_boxfront />
<path_boxback />
<path_cartridge />
<path_fanart />
<path_banner />
<path_clearlogo />
<path_flyer />
<path_map />
<path_manual />
<path_trailer />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_controller />
<s_trailer />
</launcher>
<launcher>
<name>Genesis Chess SMB</name>
<category>Sega</category>
<year />
<genre />
<developer />
<rating />
<plot />
<platform>Sega Genesis</platform>
<application>/system/bin/am</application>
<args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;smb://192.168.0.11/wd3tb/ROMs/Sega/Chess.gen&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
<args_extra />
<ROM_path />
<ROM_ext />
<path_title />
<path_snap />
<path_boxfront />
<path_boxback />
<path_cartridge />
<path_fanart />
<path_banner />
<path_clearlogo />
<path_flyer />
<path_map />
<path_manual />
<path_trailer />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_controller />
<s_trailer />
</launcher>
<launcher>
<name>Genesis Chess UNC</name>
<category>Sega</category>
<year />
<genre />
<developer />
<rating />
<plot />
<platform>Sega Genesis</platform>
<application>/system/bin/am</application>
<args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;\\192.168.0.11\wd3tb\ROMs\Sega\Chess.gen&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
<args_extra />
<ROM_path />
<ROM_ext />
<path_title />
<path_snap />
<path_boxfront />
<path_boxback />
<path_cartridge />
<path_fanart />
<path_banner />
<path_clearlogo />
<path_flyer />
<path_map />
<path_manual />
<path_trailer />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_controller />
<s_trailer />
</launcher>
<launcher>
<name>Genesis Chess UNC2</name>
<category>Sega</category>
<year />
<genre />
<developer />
<rating />
<plot />
<platform>Sega Genesis</platform>
<application>/system/bin/am</application>
<args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;\\\\192.168.0.11\\wd3tb\\ROMs\\Sega\\Chess.gen&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
<args_extra />
<ROM_path />
<ROM_ext />
<path_title />
<path_snap />
<path_boxfront />
<path_boxback />
<path_cartridge />
<path_fanart />
<path_banner />
<path_clearlogo />
<path_flyer />
<path_map />
<path_manual />
<path_trailer />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_controller />
<s_trailer />
</launcher>
</advanced_emulator_launcher_configuration>
(2017-11-28, 16:08)yevaman44 Wrote: [ -> ]It would be a great idea yes !!

I'm not at home but I will try to give you the log as soon as I can !

Thx for the support ! It's glad to see a dev so implicated for his community ! 

You are welcome.

Global setting or per-launcher setting?
(2017-11-28, 18:50)einniv Wrote: [ -> ]Thanks for the tip on how to quickly test the setup.  It appears UNC paths do not work in RetroArch on Android. The Windows version must be relying on the operating system (which makes sense).

These are the launchers I added. Only the first one (using a file on the Firestick itself) worked. 
Code:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Exported by AEL on 2017-11-28 11:30:23 -->
<advanced_emulator_launcher_configuration>
<category>
<name>Sega</name>
<genre />
<rating />
<plot />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_trailer />
</category>
<launcher>
<name>Genesis Chess Local</name>
<category>Sega</category>
<year />
<genre />
<developer />
<rating />
<plot />
<platform>Sega Genesis</platform>
<application>/system/bin/am</application>
<args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;/storage/emulated/0/ROMs/Chess.gen&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
<args_extra />
<ROM_path />
<ROM_ext />
<path_title />
<path_snap />
<path_boxfront />
<path_boxback />
<path_cartridge />
<path_fanart />
<path_banner />
<path_clearlogo />
<path_flyer />
<path_map />
<path_manual />
<path_trailer />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_controller />
<s_trailer />
</launcher>
<launcher>
<name>Genesis Chess SMB</name>
<category>Sega</category>
<year />
<genre />
<developer />
<rating />
<plot />
<platform>Sega Genesis</platform>
<application>/system/bin/am</application>
<args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;smb://192.168.0.11/wd3tb/ROMs/Sega/Chess.gen&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
<args_extra />
<ROM_path />
<ROM_ext />
<path_title />
<path_snap />
<path_boxfront />
<path_boxback />
<path_cartridge />
<path_fanart />
<path_banner />
<path_clearlogo />
<path_flyer />
<path_map />
<path_manual />
<path_trailer />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_controller />
<s_trailer />
</launcher>
<launcher>
<name>Genesis Chess UNC</name>
<category>Sega</category>
<year />
<genre />
<developer />
<rating />
<plot />
<platform>Sega Genesis</platform>
<application>/system/bin/am</application>
<args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;\\192.168.0.11\wd3tb\ROMs\Sega\Chess.gen&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
<args_extra />
<ROM_path />
<ROM_ext />
<path_title />
<path_snap />
<path_boxfront />
<path_boxback />
<path_cartridge />
<path_fanart />
<path_banner />
<path_clearlogo />
<path_flyer />
<path_map />
<path_manual />
<path_trailer />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_controller />
<s_trailer />
</launcher>
<launcher>
<name>Genesis Chess UNC2</name>
<category>Sega</category>
<year />
<genre />
<developer />
<rating />
<plot />
<platform>Sega Genesis</platform>
<application>/system/bin/am</application>
<args>start --user 0 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -e ROM &quot;\\\\192.168.0.11\\wd3tb\\ROMs\\Sega\\Chess.gen&quot; -e LIBRETRO /data/data/com.retroarch/cores/genesis_plus_gx_libretro_android.so -e CONFIGFILE /storage/emulated/0/Android/data/com.retroarch/files/retroarch.cfg -e IME com.android.inputmethod.latin/.LatinIME -e REFRESH 60 -n com.retroarch/.browser.retroactivity.RetroActivityFuture</args>
<args_extra />
<ROM_path />
<ROM_ext />
<path_title />
<path_snap />
<path_boxfront />
<path_boxback />
<path_cartridge />
<path_fanart />
<path_banner />
<path_clearlogo />
<path_flyer />
<path_map />
<path_manual />
<path_trailer />
<Asset_Prefix />
<s_icon />
<s_fanart />
<s_banner />
<s_poster />
<s_clearlogo />
<s_controller />
<s_trailer />
</launcher>
</advanced_emulator_launcher_configuration>

Yesterday I did some tests at home with my box (Kodi Linux Ubuntu) and UNC paths don't work. Then, I checked on Stack Overflow  and yes ... UNC paths only work on Windows. Yes, the reason is that the Python interpreter (CPython) relies in the OS functions like open(), clone(), etc. and in Windows it happens they support SMB (windows network) protocol.

Also, I did a quick check to test if Retroarch is able to launch ROMs in UNC paths in Linux and it looks like it doesn't work, presumably for the same reasons.

So,

1) For the time being use local ROMs and assets.

2) Alternatively, you can use tools like autofs (some help here and here) to automatically mount remotes when they are needed. In my setup, I keep ROMs and artwork in a Synology NAS and then use autofs to mount the remote filesystems using SSH on demand. SSH is configured to auto log in with a SSH key pair. It works like a charm. I'm not sure if autofs (or a similar utility) is available for Android, though.

3) Kodi Leia will include Retroplayer and I believe it will be able to launch ROMs from any remote Kodi supports (however, it is still not clear). In any case, soon AEL will stop using the Pyhton filesystem functions and move to Kodi VFS filesystem functions which will enable true ROMs and artwork in remotes. However, if you want to use external emulators ROMs in remotes won't work so the most flexible option if you want to have ROMs in your NAS is to mount the remote filesystem with an external tool like autofs.
(2017-11-29, 08:12)Wintermute0110 Wrote: [ -> ]
(2017-11-28, 16:08)yevaman44 Wrote: [ -> ]It would be a great idea yes !!

I'm not at home but I will try to give you the log as soon as I can !

Thx for the support ! It's glad to see a dev so implicated for his community ! 

You are welcome.

Global setting or per-launcher setting? 
I think " per-launcher setting? " would be better, with that, we can choose to keep the launcher that are working ok with multisic support. Indeed, it seems that it acts differently with differents sets, so... Smile