mangareader/src/chapter.c

178 lines
5.4 KiB
C

#include <glib-object.h>
#include <openmg/chapter.h>
#include <openmg/util/string.h>
struct _MgMangaChapter {
GObject parent_instance;
char *title;
char *url;
char *published_text;
};
static void
mg_manga_chapter_class_init (MgMangaChapterClass *class);
static void
mg_manga_chapter_class_init (MgMangaChapterClass *class);
static void
mg_manga_chapter_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void
mg_manga_chapter_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
G_DEFINE_TYPE (MgMangaChapter, mg_manga_chapter,
G_TYPE_OBJECT)
typedef enum {
MG_MANGA_CHAPTER_TITLE = 1,
MG_MANGA_CHAPTER_URL,
MG_MANGA_CHAPTER_PUBLISHED_TEXT,
MG_MANGA_CHAPTER_N_PROPERTIES
} MgMangaChapterProperties;
static GParamSpec *manga_chapter_properties[MG_MANGA_CHAPTER_N_PROPERTIES] = { NULL, };
MgMangaChapter *
mg_manga_chapter_new (const char *const title,
const char *const published_text,
const char *const url) {
MgMangaChapter *self = NULL;
MgUtilString *string_util = mg_util_string_new ();
self = MG_MANGA_CHAPTER (
g_object_new (MG_TYPE_MANGA_CHAPTER, NULL));
self->title = mg_util_string_alloc_string (
string_util, strlen (title));
self->url = mg_util_string_alloc_string (
string_util, strlen (url));
self->published_text = mg_util_string_alloc_string (
string_util, strlen (published_text));
mg_util_string_copy_substring (string_util,
title, self->title,
strlen(title) + 1, 0, strlen (title));
mg_util_string_copy_substring (string_util,
url, self->url,
strlen(url) + 1, 0, strlen (url));
mg_util_string_copy_substring (string_util,
published_text, self->published_text,
strlen(published_text) + 1, 0,
strlen (published_text));
g_clear_object (&string_util);
return self;
}
static void
mg_manga_chapter_class_init (MgMangaChapterClass *class) {
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->set_property = mg_manga_chapter_set_property;
object_class->get_property = mg_manga_chapter_get_property;
manga_chapter_properties[MG_MANGA_CHAPTER_TITLE] =
g_param_spec_string ("title",
"Title",
"Title of the chapter.",
NULL,
G_PARAM_CONSTRUCT_ONLY
| G_PARAM_READWRITE);
manga_chapter_properties[MG_MANGA_CHAPTER_URL] =
g_param_spec_string ("url",
"URL",
"URL of the chapter.",
NULL,
G_PARAM_CONSTRUCT_ONLY
| G_PARAM_READWRITE);
manga_chapter_properties[MG_MANGA_CHAPTER_PUBLISHED_TEXT] =
g_param_spec_string ("published_text",
"PublishedText",
"Text of publication.",
NULL,
G_PARAM_CONSTRUCT_ONLY
| G_PARAM_READWRITE);
g_object_class_install_properties (object_class,
MG_MANGA_CHAPTER_N_PROPERTIES,
manga_chapter_properties);
}
static void
mg_manga_chapter_init (MgMangaChapter *self) {
}
static void
mg_manga_chapter_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec) {
MgMangaChapter *self = MG_MANGA_CHAPTER (object);
switch ((MgMangaChapterProperties) property_id) {
case MG_MANGA_CHAPTER_TITLE:
g_value_set_string (value, self->title);
break;
case MG_MANGA_CHAPTER_URL:
g_value_set_string (value, self->url);
break;
case MG_MANGA_CHAPTER_PUBLISHED_TEXT:
g_value_set_string (value, self->published_text);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
mg_manga_chapter_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec) {
MgMangaChapter *self = MG_MANGA_CHAPTER (object);
switch ((MgMangaChapterProperties) property_id) {
case MG_MANGA_CHAPTER_TITLE:
g_free (self->title);
self->title = g_value_dup_string (value);
break;
case MG_MANGA_CHAPTER_URL:
g_free (self->url);
self->url = g_value_dup_string (value);
break;
case MG_MANGA_CHAPTER_PUBLISHED_TEXT:
g_free (self->published_text);
self->published_text = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
char *
mg_manga_chapter_get_title (MgMangaChapter *self) {
GValue value = G_VALUE_INIT;
char *return_value = NULL;
g_value_init (&value, G_TYPE_STRING);
g_object_get_property (G_OBJECT (self), "title", &value);
return_value = g_value_dup_string (&value);
g_value_unset (&value);
return return_value;
}
char *
mg_manga_chapter_get_url (MgMangaChapter *self) {
GValue value = G_VALUE_INIT;
char *return_value = NULL;
g_value_init (&value, G_TYPE_STRING);
g_object_get_property (G_OBJECT (self), "url", &value);
return_value = g_value_dup_string (&value);
g_value_unset (&value);
return return_value;
}