2 function loadGames(string $gamesDir)
4 $gamesDir = str_replace('//', '/', $gamesDir . '/');
7 foreach (glob($gamesDir . '*.json') as $gameFile) {
8 $gameData = json_decode(file_get_contents($gameFile));
9 if ($gameData === null) {
10 throw new \Exception('Cannot load game file: ' . $gameFile);
12 $games[$gameData->package] = $gameData;
18 * Convert a meta data game info into a structure that is suitable
19 * for http://l2.gamestickservices.net/api/rest/connect/stick/stick/xxx/view.json
21 function convertGameDataForConnect($gameData): array
23 $userCurrency = 'EUR';
26 'id' => $gameData->id,
27 'package' => $gameData->package,
28 'name' => $gameData->name,
29 'description' => $gameData->description,
31 'minAge' => $gameData->minAge,
32 'genre' => current($gameData->genres),
33 'genres' => $gameData->genres,
47 'downloadedfree' => false,
51 'price' => $userCurrency . ' '
52 . $gameData->prices->buy->$userCurrency->amount,
65 'companyname' => $gameData->companyname,
66 'companylogofile' => '',
67 'companyiconsize' => 0,
71 foreach ($gameData->prices->buy as $currencySymbol => $price) {
72 $connectData['multipricing']['buy'][] = [
73 'amount' => $price->amount,
74 'isocurrency' => $currencySymbol,
75 'symbol' => $price->symbol,
76 'symbolpostindex' => $price->symbolpostindex,
77 'formattedcurrency' => $price->formattedcurrency,
82 $highestVersionCode = 0;
83 $highestVersionKey = null;
84 foreach ($gameData->releases as $releaseKey => $release) {
85 if (isset($release->broken) && $release->broken === true) {
88 if ($release->versionCode > $highestVersionCode) {
89 $highestVersionKey = $releaseKey;
92 if ($highestVersionKey !== null) {
93 $release = $gameData->releases[$highestVersionKey];
94 $connectData['version'] = $release->uuid;
95 $connectData['gameversion'] = $release->gsName ?? $release->name;
96 $connectData['size'] = round($release->size / 1024 / 1024 * 1000);
97 $connectData['download'] = [
98 'url' => $release->url,
99 'version' => $release->gsVersion,
103 foreach ($gameData->videos as $videoNum => $video) {
104 $connectData['videos'][] = [
105 'version' => $video->version,
106 'url' => $video->url,
108 $connectData['images'][] = [
111 'url' => $video->thumb,
115 'name' => 'STICK_VIDEO' . ($videoNum + 1) . '_SCREENSHOT',
123 'name' => 'STICK_THUMBNAIL1',
128 'name' => 'STICK_THUMBNAIL4',
133 'name' => 'STICK_THUMBNAIL4',
138 'name' => 'STICK_THUMBNAIL4',
143 'name' => 'STICK_THUMBNAIL1_1080',
148 'name' => 'STICK_THUMBNAIL2_1080',
153 'name' => 'STICK_THUMBNAIL3_1080',
158 'name' => 'STICK_THUMBNAIL4_1080',
162 'icon-registration' => [
163 'name' => 'STICK_REGISTRATION_GAME_ICON',
168 'name' => 'STICK_ICON',
173 'name' => 'STICK_SCREENSHOT',
177 'screenshots-big' => [
178 'name' => 'STICK_SCREENSHOT_1080',
183 foreach ($gameData->images as $imageKey => $imageData) {
184 if (!isset($imageNameMap[$imageKey])) {
185 throw new \Exception('Unknown image key: ' . $imageKey);
187 if ($imageData === null) {
191 'name' => $imageNameMap[$imageKey]['name'],
192 'width' => $imageNameMap[$imageKey]['width'],
193 'height' => $imageNameMap[$imageKey]['height'],
195 $urls = (array) $imageData;
196 foreach ($urls as $imageUrl) {
197 $connectImage['urls'][] = [
202 $connectData['images'][] = $connectImage;