Fix Solid predicate generation.

Previously "partitionmanager /dev/sda /dev/sdb /dev/sdc" did not work.

svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=1327820
This commit is contained in:
Andrius Štikonas 2012-12-09 09:53:43 +00:00
parent 0959cc992a
commit c545bec089
1 changed files with 10 additions and 7 deletions

View File

@ -239,21 +239,24 @@ QList<Solid::Device> getSolidDeviceList()
{
predicate = " [ " + predicate + " AND ";
if (args->count() > 1)
qint32 brackets = (args->count() + 1) / 2;
brackets = args->count() == 1 ? 0 : brackets;
for (qint32 i = 0; i < brackets; i++)
predicate += "[ ";
for (qint32 i = 0; i < args->count(); i++)
bool right_bracket = false;
for (qint32 i = 0; i < args->count(); i++, right_bracket =! right_bracket)
{
predicate += QString("Block.device == '%1' ").arg(args->arg(i));
if (right_bracket)
predicate += i == 1 ? "] " : "] ] ";
if (i < args->count() - 1)
predicate += "OR ";
if (right_bracket && i != args->count() - 2 && i != args->count()-1)
predicate += "[ ";
}
if (args->count() > 1)
predicate += "] ";
predicate += ']';
predicate += right_bracket && brackets > 0 ? "] ]" : "]";
}
return Solid::Device::listFromQuery(predicate);