mirror of
https://github.com/soukoku/ntwain.git
synced 2025-11-09 11:36:42 +08:00
Changed xfer logic to not endxfer after reset.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user