aMule Forum

Spanish => sp_Bugs => Topic started by: darksidex on July 22, 2005, 05:27:34 PM

Title: Al finalizar una descarga, no hace caso de las categorías para reanudar la siguiente
Post by: darksidex on July 22, 2005, 05:27:34 PM
Pues eso, cuando acaba con una descarga, empieza con otra, pero no con la de la misma categoría, apesar de que hay más archivos pausados en la misma categoría.

En las preferencias tengo activadas: "Start next paused file when a file completed" y "From the same category"
Title: Re: Al finalizar una descarga, no hace caso de las categorías para reanudar la siguiente
Post by: Jacobo221 on July 27, 2005, 07:59:49 AM
joer, las categorias siempre traen cola :S

de nuevo, plis ponlo en http://bugs.amule.org

un saludo!
Title: Re: Al finalizar una descarga, no hace caso de las categorías para reanudar la siguiente
Post by: darksidex on July 27, 2005, 08:55:32 AM
Creo que hoy voy a poner como página de inicio la de los bugs del amule, la 3ª vez que me mandas allí ;)

Todo sea por mejorar
Title: Re: Al finalizar una descarga, no hace caso de las categorías para reanudar la siguiente
Post by: Jacobo221 on August 04, 2005, 07:46:32 PM
:D es que ahi es donde deberian ir estas cosas. porque ahi se recuerdan... aqui se pierden :P
Title: Re: Al finalizar una descarga, no hace caso de las categorías para reanudar la siguiente
Post by: darksidex on August 05, 2005, 01:57:06 PM
¿Como lágrimas en la lluvia?....
Espero que no  :P
Title: Re: Al finalizar una descarga, no hace caso de las categorías para reanudar la siguiente
Post by: Jacobo221 on August 11, 2005, 01:51:22 PM
"Yo he visto cosas que tu ni siquiera imaginas..."
Title: Re: Al finalizar una descarga, no hace caso de las categorías para reanudar la siguiente
Post by: loatlan on October 02, 2005, 08:49:19 PM
Buenas...

Como en bugs.amule.org (http://bugs.amule.org/view.php?id=513) he visto que nadie está trabajando en esto (ya he visto que hay otros bugs más críticos que este), he estado investigando este problema, que a mi también me interesa que funcione, y creo que he dado con la solución.  He modificado la función CDownloadQueue::StartNextFile en el fichero DownloadQueue.cpp y por lo que llevo probado de momento parece que funciona.

Para el que quiera probarlo, dejo aquí la función completa que habría que sustituir en DownloadQueue.cpp, y si a alguno de los desarrolladores le parece que esto arregla el problema, que lo incluya en el código tranquilamente.

Code: [Select]
void CDownloadQueue::StartNextFile(CPartFile* oldfile)
{
if ( thePrefs::StartNextFile() ) {
m_mutex.Lock();
CPartFile* tFile = NULL;

               
                if ( ! thePrefs::StartNextFileSame() ) {
                        // do not use categories
                       
                        for ( uint16 i = 0; i < m_filelist.size(); i++ ) {
                                CPartFile* file = m_filelist[i];
                               
                                if ( file->GetStatus() == PS_PAUSED ) {
                                        if (!tFile) {
                                                // select first file
                                                tFile = file;
                                        } else {
                                                // tfile already selected, compare priorities
                                                if (file->GetDownPriority() > tFile->GetDownPriority()) {
                                                        // select new file
                                                        tFile = file;
                                                }
                                        }
                                        // if has high priority then we are done
                                        if (tFile->GetDownPriority() == PR_HIGH) {
                                                break;
                                        }
                                }
                        }
                } else {
                        // use categories
                   
                        for ( uint16 i = 0; i < m_filelist.size(); i++ ) {
                                CPartFile* file = m_filelist[i];
                       
                                if ( file->GetStatus() == PS_PAUSED ) {
                                        if (!tFile) {
                                                // select first file
                                                tFile = file;
                                        } else {
                                                // file already selected
                                                if (tFile->GetCategory() == oldfile->GetCategory()) {
                                                        // already found a file for this category
                                                        if (file->GetCategory() == oldfile->GetCategory()) {
                                                                // new file is also for this category, check priorities
                                                                if (file->GetDownPriority() > tFile->GetDownPriority()) {
                                                                        // higher priority, select new file
                                                                        tFile = file;
                                                                }
                                                        }
                                                } else {
                                                        // no file selected for the category
                                                        if ((file->GetCategory() == oldfile->GetCategory()) || (file->GetDownPriority() > tFile->GetDownPriority())) {
                                                                // new file is for the category or has higher priority, so select it
                                                                tFile = file;
                                                        }
                                                }
                                        }
                                        // if has high priority and is for the category then we are done
                                        if ((tFile->GetDownPriority() == PR_HIGH) && (file->GetCategory() == oldfile->GetCategory())) {
                                                break;
                                        }
                                }
                        }
                }


m_mutex.Unlock();

if ( tFile ) {
tFile->ResumeFile();
}
}
}

Ahora solo faltaría poder tener más flexibilidad con las prioridades en una categoría, en lugar de tener sólo prioridad baja, normal y alta, para poder ordenar los ficheros de una categoría según el orden en que queremos que se vayan activando a medida que se van completando otros de la misma categoría.

Hasta luego.
Title: Re: Al finalizar una descarga, no hace caso de las categorías para reanudar la siguiente
Post by: darksidex on October 03, 2005, 12:55:01 PM
Esto ya está solucionado en la versión CVS.
Al menos eso creo, porque me bajé una versión cvs (no me acuerdo de que dia), y luego modifiqué esa misma función para que se comportara como yo quería, que reanudara las descargas en función del nombre del archivo y no de la prioridad.