1299
1321
return (plain == TRUE) ? self->priv->plain_filename : self->priv->filename;
1325
* almanah_storage_manager_entry_add_tag:
1326
* @self: an #AlmanahStorageManager
1327
* @entry: an #AlmanahEntry
1330
* Append the string in @tag as a tag for the entry @entry. If the @tag is empty or the @entry don't be previuslly saved, returns %FALSE
1332
* Return value: %TRUE on success, %FALSE otherwise
1335
almanah_storage_manager_entry_add_tag (AlmanahStorageManager *self, AlmanahEntry *entry, const gchar *tag)
1337
GDate entry_last_edited;
1339
sqlite3_stmt *statement;
1342
g_return_val_if_fail (ALMANAH_IS_STORAGE_MANAGER (self), FALSE);
1343
g_return_val_if_fail (ALMANAH_IS_ENTRY (entry), FALSE);
1344
g_return_val_if_fail (g_utf8_strlen (tag, 1) == 1, FALSE);
1346
almanah_entry_get_date (entry, &entry_date);
1347
if (g_date_valid (&entry_date) != TRUE) {
1348
g_debug ("Invalid entry date");
1352
/* Don't duplicate tags */
1353
if (almanah_storage_manager_entry_check_tag (self, entry, tag)) {
1354
g_debug ("Duplicated tag now allowed");
1358
if ((result_error = sqlite3_prepare_v2 (self->priv->connection,
1359
"INSERT INTO entry_tag (year, month, day, tag) VALUES (?, ?, ?, ?)",
1360
-1, &statement, NULL)) != SQLITE_OK) {
1361
g_debug ("Can't prepare statement. SQLite error code: %d", result_error);
1365
sqlite3_bind_int (statement, 1, g_date_get_year (&entry_date));
1366
sqlite3_bind_int (statement, 2, g_date_get_month (&entry_date));
1367
sqlite3_bind_int (statement, 3, g_date_get_day (&entry_date));
1368
/* @TODO: STATIC or TRANSIENT */
1369
sqlite3_bind_text (statement, 4, tag, -1, SQLITE_STATIC);
1371
if (sqlite3_step (statement) != SQLITE_DONE) {
1372
sqlite3_finalize (statement);
1373
g_debug ("Can't save tag");
1377
sqlite3_finalize (statement);
1379
g_signal_emit (self, storage_manager_signals[SIGNAL_ENTRY_TAG_ADDED], 0, entry, g_strdup (tag));
1385
* almanah_storage_manager_entry_remove_tag:
1386
* @self: an #AlmanahStorageManager
1387
* @entry: an #AlmanahEntry
1388
* @tag: a string with the tag to be removed
1390
* Remove the tag with the given string in @tag as a tag for the entry @entry.
1392
* Return value: %TRUE on success, %FALSE otherwise
1395
almanah_storage_manager_entry_remove_tag (AlmanahStorageManager *self, AlmanahEntry *entry, const gchar *tag)
1400
g_return_val_if_fail (ALMANAH_IS_STORAGE_MANAGER (self), FALSE);
1401
g_return_val_if_fail (ALMANAH_IS_ENTRY (entry), FALSE);
1402
g_return_val_if_fail (g_utf8_strlen (tag, 1) == 1, FALSE);
1404
almanah_entry_get_date (entry, &date);
1406
result = simple_query (self, "DELETE FROM entry_tag WHERE year = %u AND month = %u AND day = %u AND tag = '%s'", NULL,
1407
g_date_get_year (&date),
1408
g_date_get_month (&date),
1409
g_date_get_day (&date),
1413
g_signal_emit (self, storage_manager_signals[SIGNAL_ENTRY_TAG_REMOVED], 0, entry, tag);
1419
* almanah_storage_manager_entry_get_tags:
1420
* @self: an #AlmanahStorageManager
1421
* @entry: an #AlmanahEntry
1423
* Gets the tags added to an entry by the user from the database.
1426
almanah_storage_manager_entry_get_tags (AlmanahStorageManager *self, AlmanahEntry *entry)
1430
sqlite3_stmt *statement;
1433
g_return_val_if_fail (ALMANAH_IS_STORAGE_MANAGER (self), FALSE);
1434
g_return_val_if_fail (ALMANAH_IS_ENTRY (entry), FALSE);
1436
almanah_entry_get_date (entry, &date);
1437
if (g_date_valid (&date) != TRUE) {
1438
g_debug ("Invalid entry date");
1442
if (sqlite3_prepare_v2 (self->priv->connection,
1443
"SELECT DISTINCT tag FROM entry_tag WHERE year = ? AND month = ? AND day = ?",
1444
-1, &statement, NULL) != SQLITE_OK) {
1445
g_debug ("Can't prepare statement");
1449
sqlite3_bind_int (statement, 1, g_date_get_year (&date));
1450
sqlite3_bind_int (statement, 2, g_date_get_month (&date));
1451
sqlite3_bind_int (statement, 3, g_date_get_day (&date));
1453
while ((result = sqlite3_step (statement)) == SQLITE_ROW) {
1454
tags = g_list_append (tags, g_strdup (sqlite3_column_text (statement, 0)));
1457
sqlite3_finalize (statement);
1459
if (result != SQLITE_DONE) {
1460
g_debug ("Error querying for tags from database: %s", sqlite3_errmsg (self->priv->connection));
1469
* almanah_storage_manager_entry_check_tag:
1470
* @self: an #AlmanahStorageManager
1471
* @entry: an #AlmanahEntry to check into it
1472
* @tag: the tag to be checked
1474
* Check if a tag has been added to an entry
1476
* Return value: TRUE if the tag already added to the entry, FALSE otherwise
1479
almanah_storage_manager_entry_check_tag (AlmanahStorageManager *self, AlmanahEntry *entry, const gchar *tag)
1481
gboolean result, q_result;
1482
sqlite3_stmt *statement;
1485
g_return_val_if_fail (ALMANAH_IS_STORAGE_MANAGER (self), FALSE);
1486
g_return_val_if_fail (ALMANAH_IS_ENTRY (entry), FALSE);
1487
g_return_val_if_fail (g_utf8_strlen (tag, 1) == 1, FALSE);
1491
almanah_entry_get_date (entry, &date);
1492
if (g_date_valid (&date) != TRUE) {
1493
g_debug ("Invalid entry date");
1497
if (sqlite3_prepare_v2 (self->priv->connection,
1498
"SELECT count(1) FROM entry_tag WHERE year = ? AND month = ? AND day = ? AND tag = ?",
1499
-1, &statement, NULL) != SQLITE_OK) {
1500
g_debug ("Can't prepare statement");
1504
sqlite3_bind_int (statement, 1, g_date_get_year (&date));
1505
sqlite3_bind_int (statement, 2, g_date_get_month (&date));
1506
sqlite3_bind_int (statement, 3, g_date_get_day (&date));
1507
sqlite3_bind_text (statement, 4, tag, -1, SQLITE_STATIC);
1509
if ((q_result = sqlite3_step (statement)) == SQLITE_ROW) {
1510
if (sqlite3_column_int (statement, 0) > 0)
1514
if (q_result != SQLITE_DONE) {
1515
g_debug ("Error querying for a tag from database: %s", sqlite3_errmsg (self->priv->connection));
1518
sqlite3_finalize (statement);
1525
* almanah_storage_manager_get_tags:
1526
* @self: an #AlmanahStorageManager
1528
* Gets all the tags added to entries by the user from the database.
1530
* Return value: #GList with all the tags.
1533
almanah_storage_manager_get_tags (AlmanahStorageManager *self)
1536
sqlite3_stmt *statement;
1539
g_return_val_if_fail (ALMANAH_IS_STORAGE_MANAGER (self), FALSE);
1541
if ((result = sqlite3_prepare_v2 (self->priv->connection, "SELECT DISTINCT tag FROM entry_tag", -1, &statement, NULL)) != SQLITE_OK) {
1542
g_debug ("Can't prepare statement, error code: %d", result);
1546
while ((result = sqlite3_step (statement)) == SQLITE_ROW) {
1547
tags = g_list_append (tags, g_strdup (sqlite3_column_text (statement, 0)));
1550
sqlite3_finalize (statement);
1552
if (result != SQLITE_DONE) {
1553
g_debug ("Error querying for tags from database: %s", sqlite3_errmsg (self->priv->connection));