@@ -11,6 +11,15 @@ const overrides = {
1111 PokeMMO : 'A free-to-play online monster mmorpg.' ,
1212} ;
1313
14+ const additions = [
15+ // Example:
16+ {
17+ name : 'MeloNX' ,
18+ desc : 'A Nintendo Switch Emulator for iOS / iPadOS devices on 15.0+.' ,
19+ iconURL : 'https://git.ryujinx.app/melonx/emu/-/raw/XC-ios-ht/src/MeloNX/MeloNX/Assets/Assets.xcassets/AppIcon.appiconset/nxgradientpng.png?ref_type=heads'
20+ } ,
21+ ] ;
22+
1423const folderExists = async ( path ) => {
1524 let exists = false ;
1625 try {
@@ -114,6 +123,49 @@ const outFolder = path.join(__dirname, '../src/assets/apps_data/');
114123 } ) ;
115124 await Promise . all ( promises ) ;
116125
126+ // Process custom additions
127+ console . log ( `✨ Processing ${ additions . length } custom additions...` ) ;
128+ for ( const app of additions ) {
129+ const { name, desc, iconURL } = app ;
130+
131+ if ( ! name || ! desc ) {
132+ console . log ( `🚫 Skipping custom app - missing name or desc` ) ;
133+ continue ;
134+ }
135+
136+ let exists = false ;
137+ try {
138+ exists = await fs . stat ( outFolder + name + '.webp' ) ;
139+ } catch { }
140+
141+ // Download and process icon if provided
142+ if ( iconURL && ! exists ) {
143+ try {
144+ console . log ( `🖼️ Downloading icon for custom app ${ name } ...` ) ;
145+ const file = await fetch ( iconURL , {
146+ headers : {
147+ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' ,
148+ } ,
149+ } ) ;
150+ const buffer = await file . arrayBuffer ( ) ;
151+ const buffer2 = Buffer . from ( buffer ) ;
152+ const image = sharp ( buffer2 ) ;
153+
154+ image . resize ( 128 , 128 ) ;
155+ image . webp ( ) ;
156+ await image . toFile ( `${ outFolder } ${ name } .webp` ) ;
157+ } catch ( e ) {
158+ console . log ( `🚫 Failed to download icon for custom app ${ name } ... - ${ iconURL } ` ) ;
159+ console . log ( e ) ;
160+ }
161+ }
162+
163+ built . push ( {
164+ name,
165+ desc,
166+ } ) ;
167+ }
168+
117169 //remove dupe apps based on name
118170 built = built . filter ( ( thing , index , self ) => index === self . findIndex ( ( t ) => t . name === thing . name ) ) ;
119171 console . log ( `📝 Writing applist.json (${ built . length } apps)...` ) ;
0 commit comments