Changed xfer logic to not endxfer after reset.

This commit is contained in:
soukoku
2015-01-01 21:27:41 -05:00
parent 8a01adaaf6
commit 7f39c45bd4

View File

@@ -50,63 +50,65 @@ namespace NTwain.Internals
{ {
rc = session.DGControl.PendingXfers.Reset(pending); rc = session.DGControl.PendingXfers.Reset(pending);
} }
else if (!preXferArgs.CancelCurrent) else
{ {
DataGroups xferGroup = DataGroups.None; if (!preXferArgs.CancelCurrent)
if (session.DGControl.XferGroup.Get(ref xferGroup) != ReturnCode.Success)
{ {
xferGroup = DataGroups.None; DataGroups xferGroup = DataGroups.None;
}
// some DS end up getting none but we will assume it's image if (session.DGControl.XferGroup.Get(ref xferGroup) != ReturnCode.Success)
if (xferGroup == DataGroups.None ||
(xferGroup & DataGroups.Image) == DataGroups.Image)
{
// default to memory
var mech = XferMech.Memory;
object mechRaw = session.CurrentSource.CapGetCurrent(CapabilityId.ICapXferMech);
if (mechRaw != null)
{ {
mech = mechRaw.ConvertToEnum<XferMech>(); xferGroup = DataGroups.None;
} }
switch (mech) // some DS end up getting none but we will assume it's image
if (xferGroup == DataGroups.None ||
(xferGroup & DataGroups.Image) == DataGroups.Image)
{ {
case XferMech.Memory: // default to memory
DoImageMemoryXfer(session); var mech = XferMech.Memory;
break;
case XferMech.File:
DoImageFileXfer(session);
break;
case XferMech.MemFile:
DoImageMemoryFileXfer(session);
break;
case XferMech.Native:
default: // always assume native
DoImageNativeXfer(session);
break;
object mechRaw = session.CurrentSource.CapGetCurrent(CapabilityId.ICapXferMech);
if (mechRaw != null)
{
mech = mechRaw.ConvertToEnum<XferMech>();
}
switch (mech)
{
case XferMech.Memory:
DoImageMemoryXfer(session);
break;
case XferMech.File:
DoImageFileXfer(session);
break;
case XferMech.MemFile:
DoImageMemoryFileXfer(session);
break;
case XferMech.Native:
default: // always assume native
DoImageNativeXfer(session);
break;
}
} }
} if ((xferGroup & DataGroups.Audio) == DataGroups.Audio)
if ((xferGroup & DataGroups.Audio) == DataGroups.Audio)
{
var mech = session.CurrentSource.CapGetCurrent(CapabilityId.ACapXferMech).ConvertToEnum<XferMech>();
switch (mech)
{ {
case XferMech.File: var mech = session.CurrentSource.CapGetCurrent(CapabilityId.ACapXferMech).ConvertToEnum<XferMech>();
DoAudioFileXfer(session); switch (mech)
break; {
case XferMech.Native: case XferMech.File:
default: // always assume native DoAudioFileXfer(session);
DoAudioNativeXfer(session); break;
break; case XferMech.Native:
default: // always assume native
DoAudioNativeXfer(session);
break;
}
} }
} }
rc = session.DGControl.PendingXfers.EndXfer(pending);
} }
rc = session.DGControl.PendingXfers.EndXfer(pending);
#endregion #endregion
} while (rc == ReturnCode.Success && pending.Count != 0); } while (rc == ReturnCode.Success && pending.Count != 0);