this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

#923: fixed FS dir back function, fixed SURF async cover loading

Nesbox 46edc3a6 1359b31e

+39 -68
+3 -10
src/studio/fs.c
··· 55 55 #include <emscripten.h> 56 56 #endif 57 57 58 - #define PUBLIC_DIR TIC_HOST "/play" 59 - #define PUBLIC_DIR_SLASH PUBLIC_DIR "/" 60 - 61 - 62 - 63 - 64 - static const char* PublicDir = PUBLIC_DIR; 58 + static const char* PublicDir = TIC_HOST; 65 59 66 60 struct FileSystem 67 61 { ··· 497 491 char* start = fs->work; 498 492 char* ptr = start + strlen(fs->work); 499 493 500 - while(ptr > start && *ptr != '/') ptr--; 501 - 502 - *ptr = '\0'; 494 + while (ptr > start && *ptr != '/') ptr--; 495 + while (*ptr) *ptr++ = '\0'; 503 496 } 504 497 505 498 void fsGetDir(FileSystem* fs, char* dir)
+3 -3
src/studio/net.c
··· 21 21 // SOFTWARE. 22 22 23 23 #include "net.h" 24 + #include "defines.h" 24 25 25 26 #include <stdlib.h> 26 27 #include <stdio.h> ··· 672 673 { 673 674 struct Curl_easy* curl = curl_easy_init(); 674 675 675 - CurlData* data = calloc(1, sizeof(CurlData)); 676 - *data = (CurlData) 676 + CurlData* data = OBJCOPY((CurlData) 677 677 { 678 678 .async = curl, 679 679 .callback = callback, 680 680 .calldata = calldata, 681 - }; 681 + }); 682 682 683 683 strcpy(data->url, path); 684 684
+33 -55
src/studio/screens/surf.c
··· 156 156 tic_screen* cover; 157 157 tic_palette* palettes; 158 158 159 - bool coverLoaded; 159 + bool coverLoading; 160 160 bool dir; 161 161 bool project; 162 162 }; ··· 299 299 } 300 300 } 301 301 302 - static void replace(char* src, const char* what, const char* with) 303 - { 304 - while(true) 305 - { 306 - char* pos = strstr(src, what); 307 - 308 - if(pos) 309 - { 310 - strcpy(pos, pos + strlen(what) - strlen(with)); 311 - memcpy(pos, with, strlen(with)); 312 - } 313 - else break; 314 - } 315 - } 316 - 317 - static void cutExt(char* name, const char* ext) 302 + static inline void cutExt(char* name, const char* ext) 318 303 { 319 304 name[strlen(name)-strlen(ext)] = '\0'; 320 305 } ··· 327 312 328 313 if(dir 329 314 || tic_tool_has_ext(name, CartExt) 330 - || hasProjectExt(name) 331 - ) 315 + || hasProjectExt(name)) 332 316 { 333 317 data->items = realloc(data->items, sizeof(MenuItem) * ++data->count); 334 318 MenuItem* item = &data->items[data->count-1]; 335 319 336 - item->name = strdup(name); 337 - bool project = false; 320 + *item = (MenuItem) 321 + { 322 + .name = strdup(name), 323 + .hash = info ? strdup(info) : NULL, 324 + .id = id, 325 + .dir = dir, 326 + }; 327 + 338 328 if(dir) 339 329 { 340 330 char folder[TICNAME_MAX]; ··· 343 333 } 344 334 else 345 335 { 346 - 347 336 item->label = strdup(name); 348 337 349 338 if(tic_tool_has_ext(name, CartExt)) 350 339 cutExt(item->label, CartExt); 351 340 else 352 - { 353 - project = true; 354 - } 355 - 356 - 357 - replace(item->label, "&amp;", "&"); 358 - replace(item->label, "&#39;", "'"); 341 + item->project = true; 359 342 } 360 - 361 - item->hash = info ? strdup(info) : NULL; 362 - item->id = id; 363 - item->dir = dir; 364 - item->cover = NULL; 365 - item->palettes = NULL; 366 - item->coverLoaded = false; 367 - item->project = project; 368 343 } 369 344 370 345 return true; ··· 417 392 surf->menu.anim = 0; 418 393 } 419 394 420 - static void updateMenuItemCover(Surf* surf, const u8* cover, s32 size) 395 + static void updateMenuItemCover(Surf* surf, s32 pos, const u8* cover, s32 size) 421 396 { 422 - MenuItem* item = &surf->menu.items[surf->menu.pos]; 397 + MenuItem* item = &surf->menu.items[pos]; 423 398 424 - if((item->cover = calloc(1, sizeof(tic_screen)))) 399 + if((item->cover = malloc(sizeof(tic_screen)))) 425 400 { 426 - if((item->palettes = calloc(TIC80_HEIGHT, sizeof(tic_palette)))) 401 + if((item->palettes = malloc(TIC80_HEIGHT * sizeof(tic_palette)))) 427 402 { 428 403 gif_image* image = gif_read_data(cover, size); 429 404 ··· 484 459 typedef struct 485 460 { 486 461 Surf* surf; 487 - char* cachePath; 488 462 s32 pos; 463 + char cachePath[TICNAME_MAX]; 464 + char dir[TICNAME_MAX]; 489 465 } CoverLoadingData; 490 466 491 467 static void coverLoaded(const HttpGetData* netData) ··· 497 473 { 498 474 fsSaveRootFile(surf->fs, coverLoadingData->cachePath, netData->done.data, netData->done.size, false); 499 475 500 - if(coverLoadingData->pos == surf->menu.pos) 501 - updateMenuItemCover(surf, netData->done.data, netData->done.size); 476 + char dir[TICNAME_MAX]; 477 + fsGetDir(surf->fs, dir); 478 + 479 + if(strcmp(dir, coverLoadingData->dir) == 0) 480 + updateMenuItemCover(surf, coverLoadingData->pos, netData->done.data, netData->done.size); 502 481 } 503 482 504 483 switch (netData->type) 505 484 { 506 485 case HttpGetDone: 507 486 case HttpGetError: 508 - free(coverLoadingData->cachePath); 509 487 free(coverLoadingData); 510 488 break; 511 489 } ··· 513 491 514 492 static void requestCover(Surf* surf, MenuItem* item) 515 493 { 494 + CoverLoadingData coverLoadingData = {surf, surf->menu.pos}; 495 + fsGetDir(surf->fs, coverLoadingData.dir); 496 + 516 497 const char* hash = item->hash; 517 - char cachePath[TICNAME_MAX]; 518 - sprintf(cachePath, TIC_CACHE "%s.gif", hash); 498 + sprintf(coverLoadingData.cachePath, TIC_CACHE "%s.gif", hash); 519 499 520 500 { 521 501 s32 size = 0; 522 - void* data = fsLoadRootFile(surf->fs, cachePath, &size); 502 + void* data = fsLoadRootFile(surf->fs, coverLoadingData.cachePath, &size); 523 503 524 504 if (data) 525 505 { 526 - updateMenuItemCover(surf, data, size); 506 + updateMenuItemCover(surf, surf->menu.pos, data, size); 527 507 free(data); 528 508 } 529 509 } ··· 531 511 char path[TICNAME_MAX]; 532 512 sprintf(path, "/cart/%s/cover.gif", hash); 533 513 534 - CoverLoadingData coverLoadingData = {surf, strdup(cachePath), surf->menu.pos}; 535 514 netGet(surf->net, path, coverLoaded, OBJCOPY(coverLoadingData)); 536 515 } 537 516 ··· 541 520 542 521 MenuItem* item = &surf->menu.items[surf->menu.pos]; 543 522 544 - if(item->coverLoaded) 545 - { 523 + if(item->coverLoading) 546 524 return; 547 - } 548 - item->coverLoaded = true; 525 + 526 + item->coverLoading = true; 549 527 550 528 if(!fsIsInPublicDir(surf->fs)) 551 529 { ··· 566 544 tic_cart_load(cart, data, size); 567 545 568 546 if(cart->cover.size) 569 - updateMenuItemCover(surf, cart->cover.data, cart->cover.size); 547 + updateMenuItemCover(surf, surf->menu.pos, cart->cover.data, cart->cover.size); 570 548 571 549 free(cart); 572 550 }