UINT AFX_CDECL CPartFileConvert::run(LPVOID /*lpParam*/)
{
	DbgSetThreadName("Partfile-Converter");
	InitThreadLocale();

	//Xman
	// BEGIN SLUGFILLER: SafeHash
	CReadWriteLock lock(&theApp.m_threadlock);
	if (!lock.ReadLock(0))
		return 0;
	// END SLUGFILLER: SafeHash

	int imported=0;

	for (;;)
	{
		// search next queued job and start it
		pfconverting=NULL;
		for(POSITION pos = m_jobs.GetHeadPosition(); pos != NULL; m_jobs.GetNext(pos)){
			pfconverting=m_jobs.GetAt(pos);
			if (pfconverting->state==CONV_QUEUE) break; else pfconverting=NULL;
		}
		if (pfconverting!=NULL) {
			pfconverting->state=CONV_INPROGRESS;
			UpdateGUI(pfconverting);
			pfconverting->state=performConvertToeMule(pfconverting->folder);

			if (pfconverting->state==CONV_OK)
				++imported;

			UpdateGUI(pfconverting);
			AddLogLine(true,GetResString(IDS_IMP_STATUS),pfconverting->folder,GetReturncodeText(pfconverting->state));
		} else
			break;// nothing more to do now
	}

	// clean up
	UpdateGUI(NULL);

	if (imported)
		theApp.sharedfiles->PublishNextTurn();

	convertPfThread=NULL;
	return 0;
}
Exemple #2
0
wxThread::ExitCode CPartFileConvert::Entry()
{
    int imported = 0;

    for (;;)
    {
        // search next queued job and start it
        {
            wxMutexLocker lock(s_mutex);
            s_pfconverting = NULL;
            for (std::list<ConvertJob*>::iterator it = s_jobs.begin(); it != s_jobs.end(); ++it) {
                if ((*it)->state == CONV_QUEUE) {
                    s_pfconverting = *it;
                    break;
                }
            }
        }

        if (s_pfconverting) {
            {
                wxMutexLocker lock(s_mutex);
                s_pfconverting->state = CONV_INPROGRESS;
            }

            Notify_ConvertUpdateJobInfo(s_pfconverting);

            ConvStatus convertResult = performConvertToeMule(s_pfconverting->folder);
            {
                wxMutexLocker lock(s_mutex);
                s_pfconverting->state = convertResult;
            }

            if (s_pfconverting->state == CONV_OK) {
                ++imported;
            }

            Notify_ConvertUpdateJobInfo(s_pfconverting);

            AddLogLineC(CFormat(_("Importing %s: %s")) % s_pfconverting->folder % GetConversionState(s_pfconverting->state));

            if (TestDestroy()) {
                wxMutexLocker lock(s_mutex);
                DeleteContents(s_jobs);
                break;
            }
        } else {
            break; // nothing more to do now
        }
    }

    // clean up
    Notify_ConvertClearInfos();

    if (imported) {
        theApp->sharedfiles->PublishNextTurn();
    }

    AddDebugLogLineN(logPfConvert, wxT("No more jobs on queue, exiting from thread."));

    s_convertPfThread = NULL;

    return NULL;
}