Exemplo n.º 1
0
bool marky::Backend_SQLite::get_nexts(const words_t& words, snippet_ptr_set_t& out) {
    if (!bind_words(stmt_get_nexts, 1, words)) {
        sqlite3_clear_bindings(stmt_get_nexts);
        sqlite3_reset(stmt_get_nexts);
        return false;
    }

    bool ok = true;
    out.clear();
    for (;;) {
        int step = sqlite3_step(stmt_get_nexts);
        bool done = false;
        switch (step) {
            case SQLITE_DONE:
                done = true;
                break;
            case SQLITE_ROW:
                {
                    words_t words;
                    unpack((const char*)sqlite3_column_text(stmt_get_nexts, 0), words);
                    snippet_t snippet(new Snippet(words,
                                    sqlite3_column_int64(stmt_get_nexts, 1),
                                    sqlite3_column_int64(stmt_get_nexts, 2),
                                    sqlite3_column_int64(stmt_get_nexts, 3)));
                    out.insert(snippet);
                    break;
                }
            default:
                ok = false;
                ERROR("Error when parsing response to '%s': %d/%s",
                        QUERY_GET_NEXTS, step, sqlite3_errmsg(db));
                break;
        }
        if (!ok || done) {
            break;
        }
    }
    sqlite3_clear_bindings(stmt_get_nexts);
    sqlite3_reset(stmt_get_nexts);

    return ok;
}
Exemplo n.º 2
0
bool SnippetsTableModel::setData(const QModelIndex &modelIndex, const QVariant &value, int role)
{
    if (modelIndex.isValid() && role == Qt::EditRole) {
        Snippet snippet(m_collection->snippet(modelIndex.row(), m_activeGroupId));
        if (modelIndex.column() == 0) {
            const QString &s = value.toString();
            if (!isValidTrigger(s)) {
                QMessageBox::critical(0, tr("Error"), tr("Not a valid trigger."));
                if (snippet.trigger().isEmpty())
                    removeSnippet(modelIndex);
                return false;
            }
            snippet.setTrigger(s);
        } else {
            snippet.setComplement(value.toString());
        }

        replaceSnippet(snippet, modelIndex);
        return true;
    }
    return false;
}
Exemplo n.º 3
0
bool marky::Backend_SQLite::prune(const State& state, scorer_t scorer) {
    bool ok = true;
    snippet_ptr_set_t delme;

    for (;;) {
        int step = sqlite3_step(stmt_get_all);
        bool done = false;
        switch (step) {
            case SQLITE_DONE:
                done = true;
                break;
            case SQLITE_ROW:
                {
                    words_t words;
                    unpack((const char*)sqlite3_column_text(stmt_get_all, 0), words);
                    snippet_t snippet(new Snippet(words,
                                    sqlite3_column_int64(stmt_get_all, 1),
                                    sqlite3_column_int64(stmt_get_all, 2),
                                    sqlite3_column_int64(stmt_get_all, 3)));
                    if (snippet->score(scorer, state) == 0) {
                        /* zero score; prune */
                        delme.insert(snippet);
                    }
                    break;
                }
            default:
                ok = false;
                ERROR("Error when parsing response to '%s': %d/%s",
                        QUERY_GET_ALL, step, sqlite3_errmsg(db));
                break;
        }
        if (!ok || done) {
            break;
        }
    }
    sqlite3_clear_bindings(stmt_get_all);
    sqlite3_reset(stmt_get_all);

    if (!ok) {
        return false;
    }
    DEBUG("%lu to prune", delme.size());
    if (delme.empty()) {
        return true;/* nothing to prune! */
    }

    if (!exec(db, QUERY_BEGIN_TRANSACTION)) {
        ok = false;
    }

    /* don't return false if !ok; really want to close the transaction */

    /* delete snippets in delme */
    for (snippet_ptr_set_t::const_iterator iter = delme.begin();
         iter != delme.end(); ++iter) {
        if (!bind_words(stmt_delete_snippet, 1, (*iter)->words)) {
            ok = false;
        }
        int step = sqlite3_step(stmt_delete_snippet);
        if (step != SQLITE_DONE) {
            ERROR("Error when parsing response to '%s': %d\%s",
                    QUERY_DELETE_SNIPPET, step, sqlite3_errmsg(db));
            ok = false;
        }
        if (!ok) {
            break;
        }
    }
    sqlite3_clear_bindings(stmt_delete_snippet);
    sqlite3_reset(stmt_delete_snippet);

    if (!exec(db, QUERY_END_TRANSACTION)) {
        ok = false;
    }

    return ok;
}
Exemplo n.º 4
0
bool marky::Backend_SQLite::get_next(const State& state, selector_t selector,
        scorer_t scorer, const words_t& search_words, word_t& next) {
#ifdef READ_DEBUG_ENABLED
    DEBUG("get_next(%s)", str(search_words).c_str());
#endif
    if (!bind_words(stmt_get_nexts, 1, search_words)) {
        sqlite3_clear_bindings(stmt_get_nexts);
        sqlite3_reset(stmt_get_nexts);
        return false;
    }

    bool ok = true;
    snippets_ptr_t snippets(new snippet_ptr_set_t);
    for (;;) {
        int step = sqlite3_step(stmt_get_nexts);
        bool done = false;
        switch (step) {
            case SQLITE_DONE:
                done = true;
                break;
            case SQLITE_ROW:
                {
                    words_t words;
                    unpack((const char*)sqlite3_column_text(stmt_get_nexts, 0), words);
                    snippet_t snippet(new Snippet(words,
                                    sqlite3_column_int64(stmt_get_nexts, 1),
                                    sqlite3_column_int64(stmt_get_nexts, 2),
                                    sqlite3_column_int64(stmt_get_nexts, 3)));
                    snippets->insert(snippet);
                    break;
                }
            default:
                ok = false;
                ERROR("Error when parsing response to '%s': %d/%s",
                        QUERY_GET_NEXTS, step, sqlite3_errmsg(db));
                break;
        }
        if (!ok || done) {
            break;
        }
    }
    sqlite3_clear_bindings(stmt_get_nexts);
    sqlite3_reset(stmt_get_nexts);

    if (snippets->empty()) {
        if (search_words.size() >= 2) {
            words_t search_words_shortened(++search_words.begin(), search_words.end());
#ifdef READ_DEBUG_ENABLED
            DEBUG("  get_next -> %s", str(search_words_shortened).c_str());
#endif
            /* recurse with shorter search */
            return get_next(state, selector, scorer, search_words_shortened, next);
        } else {
#ifdef READ_DEBUG_ENABLED
            DEBUG("    next_snippet -> NOTFOUND");
#endif
            next = IBackend::LINE_END;
        }
    } else {
        const words_t& next_snippet = selector(*snippets, scorer, state)->words;
#ifdef READ_DEBUG_ENABLED
        for (snippet_ptr_set_t::const_iterator siter = snippets->begin();
             siter != snippets->end(); ++siter) {
            DEBUG("  nexts%s = snippet(%s, %lu)", str(search_words).c_str(),
                    str((*siter)->words).c_str(), (*siter)->score(scorer, state));
        }
        DEBUG("    next_snippet -> %s", str(next_snippet).c_str());
#endif
        next = next_snippet.back();
    }
    return ok;
}
Exemplo n.º 5
0
QModelIndex SnippetsTableModel::createSnippet()
{
    Snippet snippet(m_activeGroupId);
    return insertSnippet(snippet);
}
Exemplo n.º 6
0
static void
demo2 (BroadwayOutput *output)
{
  cairo_t *cr;
  cairo_surface_t *surface, *old_surface;
  BroadwayRect rects[2];
  double da = 0;
  int i;

  broadway_output_new_surface(output,  0, 100, 100, 800, 600);

  surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
					800, 600);
  old_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
					    800, 600);

  cr = cairo_create (old_surface);
  cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
  cairo_rectangle (cr, 0, 0, 800, 600);
  cairo_fill (cr);
  cairo_destroy (cr);

  for (i = 0; i < 100; i++)
    {
      cr = cairo_create (surface);

      cairo_set_source_rgb (cr, 0.8, 0.8, 0.8);

      cairo_rectangle (cr, 0, 0, 800, 600);
      cairo_fill (cr);

      snippet(cr, i);

      cairo_destroy (cr);

      if (i == 0)
	{
	  broadway_output_put_rgb (output, 0, 0, 0, 800, 600, 800*4,
				   cairo_image_surface_get_data(surface)
				   );
	  broadway_output_show_surface (output,  0);
	}
      else
	{
	  diff_surfaces (surface,
			 old_surface);
	  broadway_output_put_rgba (output, 0, 0, 0, 800, 600, 800*4,
				    cairo_image_surface_get_data(old_surface));
	}
      broadway_output_move_surface (output, 0, 100 + i, 100 + i);

      rects[0].x = 500;
      rects[0].y = 0;
      rects[0].width = 100;
      rects[0].height = 100;
      rects[1].x = 600;
      rects[1].y = 100;
      rects[1].width = 100;
      rects[1].height = 100;
      broadway_output_copy_rectangles (output,
				       0,
				       rects, 2,
				       400, 0);

      broadway_output_flush (output);

      cr = cairo_create (old_surface);
      cairo_set_source_surface (cr, surface, 0, 0);
      cairo_paint (cr);
      cairo_destroy (cr);

      da += 10;
      usleep (50 * 1000);
  }


  cairo_surface_destroy (surface);
  broadway_output_destroy_surface(output,  0);
  broadway_output_flush (output);
}