void OpdsBookModel::onReplyFinished()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    Q_ASSERT(reply);
    reply->deleteLater();

    OpdsParser parser;
    OpdsInfo data = parser.parse(reply->url(), reply);

    if (reply->url() == m_source) {
        beginResetModel();

        m_data = data;

        endResetModel();

        m_state = Ready;
    } else if (reply->url() == m_data.next()) {
        beginInsertRows(QModelIndex(), m_data.entries.size(), m_data.entries.size() + data.entries.size() - 1);

        m_data.entries.append(data.entries);
        m_data.links = data.links;

        endInsertRows();

        m_busy = false;
        emit busyChanged(m_busy);
    }

    emit hasNextPageChanged(hasNextPage());
}
/* Method exchanging the place of selected icon (item) with 
 * next one
 */
bool Grid::moveRight(Component* item){
  if(!page) return false;
  bool moved = page->moveRight(item);
  /* If item is the last icon of the page, we have to do the job from here */
  if(!moved && hasNextPage())
    page->switchLastToFirst(pages[pages.indexOf(page)+1]);
  else if(!moved) return false;
  
  showCurrentPage();
  return true;
}
/**
 * Returns whether a new page has been displayed or not
 */
bool Grid::selectNext(int off){
  selection->setVisible(true);
  int total = page->items.size();

  if(selectindex + off >= total  && !hasNextPage())
    return false;

  selectindex += off;
  if(selectindex >= total){
    selectindex %= total;
    showNextPage();
    return true;
  } else {
    resized();
  }
  return false;
}
void Grid::showNextPage() {
  if (hasNextPage()) {
    int i = pages.indexOf(page);
    showPageAtIndex(i+1);
  }
}