D3fau4 / NightFall

A (online) System Updater for Nintendo Switch made with borealis
MIT License
61 stars 4 forks source link

Get stuck on 48% #31

Open Kronos2308 opened 3 years ago

Kronos2308 commented 3 years ago
D3fau4 commented 3 years ago

Mira abriéndolo con nxlink y manda foto del log cuando se quede pillado en ese porcentaje.

Kronos2308 commented 3 years ago

[DEBUG] https://updates.not-d3fau4.tk/c/c/749fcff4fab188a6f68a1d5319b10caf [ERROR] Fallo al descargar: https://updates.not-d3fau4.tk/c/c/749fcff4fab188a6f68a1d5319b10caf

Kronos2308 commented 3 years ago

se me sigue pillandoo a ese porciento y no solo a mi y otra cosa loca q me paso y es que intente montar un server de actualizacion usando la herramienta "NightFall Server.exe" Firmware-12.1.0 keys.txt 12.1.0 806355064 update todo bien descarga hasta ek 100% pero luego que le das a continuar no empieza la actualizacion sinoq vuelve a descargarse el firmware infinitamente, aqui t adjunto el log logs.txt

D3fau4 commented 3 years ago

eso está desactualizado la desgracia es que no puedo mirar nada de eso, estoy de vacaciones y el pc mas cercano es un pc con windows 95 por cierto si quieres montar un server ahora te paso por discord mi servidor que uso para nightfall que ese si está actualizado y a lo mejor te interesa.

Kronos2308 commented 3 years ago

vale aunque te comento un poco hise un fork y loo compile yoo mismo y parece que ahora si descarga de tu server lo raro es que no he echo nada muy grande con el codigo

y va ser que tenias razon con lo de que era el progama imagen

D3fau4 commented 3 years ago

Si, acabo de ver los cambios puede que sea un problema de memoria y al guardarlo en memoria ya no peta (?), El nca al que se queda pillado siempre es el nca donde tiene programa flog que es el nca más grande que descarga, lo que pasa es que se queda en bucle descargando, osea descarga, falla, descarga y así todo el rato. No sé si ha habido una actualización reciente de la librería curl, lo mismo cuando lo compile tenía un bug o algo.

Kronos2308 commented 3 years ago

a si bueno estoy usando un la memoria para guardar la descarga porque es mas rapido si bien tiene que sacar de la memoria a la sd al terminar es mucho mas rapido que ecribir directamante en la sd sobre todo con archivos grandes la unica pega es que en applet mode tienes muy poca memoria disponible por lo que jay que volcar a la sd cuando llega al tope y vaciar la memoria aun asi es mas rapidopor lo que he probado

Kronos2308 commented 3 years ago

pero no se si eso hace que no falle creoo q no tiene que ver

Kronos2308 commented 3 years ago

de la forma en qu esta planteaoen al codigo esta bien pero se creara un bucle si alguno de los ficheros falla deberia checarse si el fichero existe y por la parte de la red se puede usar la memoria para si falla no llege a escribirse un fichero vacio o incompleto o descargarlo a un archivo temporal y renombrarlo imagen corrigeme si me equivoco

D3fau4 commented 3 years ago

NightFall.zip mira a ver si esta compilación te funciona bien, a mi en mi red local todo perfecto.

Kronos2308 commented 3 years ago

https://github.com/D3fau4/NightFall/pull/32 haciendo esto me funciono voy a probar tu build a ver

Kronos2308 commented 3 years ago

ahora no recuerdo habia algo q previniese q la consola entrara en espera si nightfall estaba descargando?

Kronos2308 commented 3 years ago

error [0;32m[DEBUG][0m https://updates.not-d3fau4.tk/c/a/1ddada09497ebd46682c794eb8a50ae3 error�[0;32m[DEBUG]�[0m https://updates.not-d3fau4.tk/c/a/1b934dca040d02a6c6706ca919b3106d error[DEBUG] https://updates.not-d3fau4.tk/c/a/2e0ec33c7059fea7780badcb852ca90a error[DEBUG] https://updates.not-d3fau4.tk/c/a/345eb30c36623de4ab03b2bc4a82811c error[DEBUG] https://updates.not-d3fau4.tk/c/a/11ba8c801d85d2fb8f889a8f4d62c1d7 error[DEBUG] https://updates.not-d3fau4.tk/c/a/7460df03d175c7f33c491ef0e0208b9f error[DEBUG] https://updates.not-d3fau4.tk/c/a/c8bf894e7a5835efb8ce3fb5aee4c8dd 90%

Kronos2308 commented 3 years ago

nop

Kronos2308 commented 3 years ago

28minutos tomo y como tuvo errores empezo desde el principio

Kronos2308 commented 3 years ago

pero en serio usar un chunk de memoria reduce el tiempo de media hora a 10m

D3fau4 commented 3 years ago

procedo a

Kronos2308 commented 3 years ago

para que no falle si el achivo es mas grande de lo que la memoria puede almacenar (Que no lo he visto ) puedes simplemente vaciar el chunk a la sd y seguir y asi descargar el acrivo por trosos

Kronos2308 commented 3 years ago


static size_t write_memory_callback(void *contents, size_t size, size_t nmemb, void *userdata)
{
  size_t realsize = size * nmemb;
  struct MemoryStruct *mem = (struct MemoryStruct *)userdata;

  char *ptr;

  ptr = (char*)realloc(mem->memory, mem->size + realsize + 1);

  if (ptr == NULL)
  {
      printf("Failed to realloc mem\n");
      printf("Writing... %uMb To file\n",mem->size / 1000000 + 1);
      fwrite(mem->memory, 1, mem->size, mem->fp);
      free(mem->memory);
      mem->memory = (char*)malloc(1);
      mem->size = 0;
      ptr = (char*)realloc(mem->memory, mem->size + realsize + 1);
      if (ptr == NULL) return 0;
  }

  mem->memory = ptr;
  memcpy(&(mem->memory[mem->size]), contents, realsize);
  mem->size += realsize;
  mem->memory[mem->size] = 0;

  return realsize;
}```
el fichero debe abrirse como append
Kronos2308 commented 3 years ago

https://youtu.be/bA1PEbKpLzo

D3fau4 commented 3 years ago

Pues de momento hice esto: faffc1325af85f402df0dd1d74d27ca659b993d4

Kronos2308 commented 3 years ago

No sé usar la memoria no debería ser una opción Porque trae más velocidad de descarga sin ningún efecto negativo

Kronos2308 commented 3 years ago

Y ya esto es mi opinión pero la pantalla no debería apagarse durante la descarga Y tampoco te debería preguntar si quieres actualizar si la descarga termino ya q esperaste hasta hay pa q lo vas a canselar Así mismo gestionar que puede pasar si un fichero falla intentar descargarlo luego pero solo ese fichero no el firm entero

Kronos2308 commented 3 years ago

En cuanto a al sobrecarga de memoria simplemente lo gestionas desde el write callbak de curl si es q ocurre que no pasa con los ficheros pequeños q usas y si esas en full ram tienes 3gb +/- para desgargar

Kronos2308 commented 3 years ago

Eso sí tienes que agregar un pequeño pedazo de código para gestionar el llenado de mamotia y el vaciado a un archivo en la SD y aunque parezca que alfinal estás escribiendo en la SD ap parecer no es lo mismo escribir 40mb de golpe que byte a byte lo cual es más lento de procesarlo

D3fau4 commented 3 years ago

En cuanto a al sobrecarga de memoria simplemente lo gestionas desde el write callbak de curl si es q ocurre que no pasa con los ficheros pequeños q usas y si esas en full ram tienes 3gb +/- para desgargar

Supuestamente una aplicación no puede reiniciar la consola y tampoco aplicar actualizaciones, prohibiere el uso del modo aplicación en próximas commits. y no lo voy a poner obligatorio porque no voy a arriesgar a mis usuarios de que reviente la aplicación porque haya sobrecarga de memoria, tu no sabes si el usuario lleva atmosphere limpio o con 18 sysmodules o mierdas que consuma memoria o modifique memoria.

Kronos2308 commented 3 years ago

en ese caso solo gestiona la sobrecarga de memoria y listo no es tan dificil y el metodo es bbastante hermetico aqui te lo dejo https://github.com/StarDustCFW/NightFall/commit/bdd939d32b8d47192709dc57631bf98af16f0031 pero ya eso es cosa tulla.


 //para el modo applet usa 
bool AppletMode=false;
AppletType at = appletGetAppletType();
if (at != AppletType_Application && at != AppletType_SystemApplication) {AppletMode=true;}
//o algo simlar