Files
MBMNET-APP/shop/source/store.h
T

56 lines
2.2 KiB
C

#pragma once
#include <3ds/types.h>
#include <stdbool.h>
#include <stddef.h>
#define SHOP_SERVER "mbmnetapi.mbm.wtf:81"
#define SHOP_DIR "sdmc:/3ds/mbmnet-shop"
typedef enum { APP_NEW, APP_INSTALLED, APP_UPDATE } AppStatus;
typedef struct {
char slug[72], title[64], author[44], version[28], category[16], updated[12];
// Gewählte Variante (das lädt der Knopf): "cia" oder "3dsx", Dateiname, Größe
char kind[6], file[72];
int sheet, icon; // Symbol: Blatt und Nummer darin (-1 = keins)
u32 size, stars;
char ciaFile[72], dsxFile[72]; // beide Varianten (leer = gibt es nicht)
u32 ciaSize, dsxSize;
int shots; // Anzahl Screenshots (/shop/shot/<slug>/<n>)
bool banner; // Bannerbild vorhanden (/shop/banner/<slug>)
u32 colorBg; // Hintergrundfarbe der App (0xRRGGBB), 0 = keine
char license[44];
char *description;
// Installiert (aus SHOP_DIR/installed.txt)
bool installed;
char installedVersion[28];
char instKind[6], instFile[72]; // installierte Variante
u64 titleId; // bei CIAs, 0 sonst
} App;
// --- Katalog (läuft im Hintergrund) ---
typedef enum { CAT_IDLE, CAT_LOADING, CAT_READY, CAT_ERROR } CatalogState;
void catalog_start(void);
CatalogState catalog_state(void);
const char *catalog_message(void); // Fortschritt bzw. Fehler
bool catalog_offline(void); // aus dem Zwischenspeicher auf der SD (Server nicht erreichbar)
int catalog_count(void);
App *catalog_app(int i);
int catalog_sheet_count(void);
const char *catalog_sheet_path(int n); // Symbol-Blatt auf der SD (leer, wenn nicht da)
AppStatus app_status(const App *a);
bool app_has_both(const App *a);
// Variante wählen ("cia" / "3dsx"); remember = als Standard für andere Apps merken
void app_choose(App *a, const char *kind, bool remember);
// --- Installieren / Entfernen (läuft im Hintergrund) ---
typedef enum { JOB_IDLE, JOB_RUNNING, JOB_DONE, JOB_FAILED } JobState;
void job_install(App *a);
void job_remove(App *a);
JobState job_state(void);
float job_progress(void); // 0..1, < 0 wenn unbekannt
const char *job_message(void);
void job_acknowledge(void); // Ergebnis gesehen, zurück auf JOB_IDLE
void store_exit(void);