syntax = "proto3";
message UserPoint {
uint32 event = 2;
uint32 paid = 3;
}
message Volume {
uint32 title_id = 1;
string thumbnail_image_url = 2;
string volume_num = 3;
string published_date = 4;
string header = 5;
}
message VolumeGroup {
string published_date = 1;
repeated Volume volumes = 2;
}
message Title {
enum Type { MISC = 0; MANGA = 1; NOVEL = 2; }
enum Badge { NONE = 0; NEW = 1; UPDATE = 2; }
uint32 id = 1;
Type type = 2;
string title_name = 3;
string title_name_kana = 4;
string author_name = 5;
string single_list_thumbnail_url = 6;
string spread_list_thumbnail_url = 7;
string short_description = 8;
uint32 number_of_bookmarks = 9;
Badge badge = 10;
uint32 remaining_charge_time = 11;
uint32 remaining_bonus = 12;
repeated Tag category = 13;
uint32 charge_time = 14;
Tag label = 15;
bool can_comment = 16;
bool is_free_title = 17;
}
message AdNetworkList {
repeated AdNetwork ad_networks = 1;
}
message AdNetwork {
message Facebook {
string placement_id = 1;
}
message Five {
string spot_id = 1;
}
message Unity {
string placement_id = 1;
}
message Nend {
int32 spot_id = 1;
string api_key = 2;
}
message AppLovin {
// e instanceof r || (e = r.create(e));
// for (var n = void 0 === t ? e.len : e.pos + t, o = new a.Proto.AdNetwork.AppLovin; e.pos < n;) {
// var i = e.uint32();
// e.skipType(7 & i)
// }
// return o
// // guessing it just devours a field?
}
message Maio {
string zone_id = 2;
}
message Zucks {
string frame_id = 1;
}
oneof network {
Facebook facebook = 3;
Five five = 4;
Unity unity = 5;
Nend nend = 6;
AppLovin app_lovin = 7;
Maio maio = 8;
Zucks zucks = 9;
}
}
message Banner {
uint32 id = 1;
string image_url = 2;
string url = 3;
}
message BillingItem {
string id = 1;
UserPoint item = 2;
string label = 3;
uint32 price_yen = 4;
}
message Chapter {
enum PublishingType { REGULAR = 0; ADVANCE = 1; FREE = 2; }
enum Badge { NONE = 0; UPDATE = 1; }
uint32 id = 1;
string main_name = 2;
string sub_name = 3;
string image_url = 4;
PointConsumption point_consumption = 5;
uint32 end_of_rental_period = 6;
uint32 number_of_comments = 7;
PublishingType publishing_type = 8;
string published_date = 9;
string advance_published_date = 10;
Badge badge = 11;
bool already_viewed = 12;
string first_page_image_url = 13;
uint32 number_of_user_likes = 14;
uint32 title_id = 15;
}
message ChapterGroup {
Volume volume = 1;
repeated Chapter chapters = 3;
}
message Comment {
uint32 id = 1;
uint32 index = 2;
bool is_my_comment = 3;
bool already_liked = 4;
uint32 number_of_likes = 5;
string body = 6;
string created = 7;
}
message MangaPage {
message Image {
string image_url = 1;
uint32 height = 3;
uint32 width = 4;
}
message WebView {
string url = 1;
}
message LastPage {
Chapter current_chapter = 1;
Chapter next_chapter = 2;
AdNetworkList advertisement = 3;
Sns sns = 4;
bool is_bookmarked = 5;
bool is_liked = 6;
repeated Title recommended_titles = 7;
string questionnaire_url = 8;
}
message LinkImage {
string image_url = 1;
string url = 2;
uint32 height = 3;
uint32 width = 4;
}
oneof content {
Image image = 1;
WebView web_view = 2;
AdNetworkList advertisement = 3;
LastPage last_page = 4;
LinkImage link_image = 5;
}
}
message PointConsumption {
enum Type { NONE = 0; ANY_ITEMS = 1; EVENT_OR_PAID = 2; PAID_ONLY = 3; }
Type type = 1;
uint32 amount = 2;
bool ad_enabled = 3;
}
message PointHistory {
string detail = 1;
UserPoint item = 2;
string created = 3;
}
message Popup {
message Button {
string text = 1;
string url = 2;
}
message Information {
uint32 popup_id = 1;
uint32 title_id = 2;
uint32 chapter_id = 3;
}
message OSDefaultPopup {
string subject = 1;
string body = 2;
Button ok_button = 3;
Button neutral_button = 4;
Button cancel_button = 5;
Information popup_info = 6;
}
message AppDefaultPopup {
string subject = 1;
string body = 2;
string image_url = 3;
Button ok_button = 4;
Button cancel_button = 5;
Information popup_info = 6;
}
message MovieRewardPopup {
string subject = 1;
string body = 2;
string image_url = 3;
AdNetworkList ad_networks = 4;
Button ok_button = 5;
Button cancel_button = 6;
Information popup_info = 7;
}
OSDefaultPopup os_default = 1;
AppDefaultPopup app_default = 2;
MovieRewardPopup move_reward = 3;
}
message Profile {
enum Sex { OTHER = 0; MALE = 1; FEMALE = 2; }
Sex sex = 1;
int32 year = 2;
int32 month = 3;
}
message Ranking {
enum Type { UNKNOWN = 0; TREND = 1; POPULAR = 2; MALE = 3; FEMALE = 4; }
Type type = 1;
repeated Title titles = 2;
}
message Sns {
string body = 1;
string url = 2;
}
message Tag {
uint32 id = 1;
string name = 2;
string image_url = 3;
}
message TitleGroup {
uint32 id = 1;
string name = 2;
repeated Title titles = 3;
}
message AllChaptersListView {
Title title = 1;
repeated ChapterGroup chapters = 2;
}
message BackgroundDownloadView {
repeated string image_urls = 1;
}
message BillingItemListView {
repeated BillingItem billing_items = 1;
string reward_url = 2;
AdNetworkList movie_ad = 3;
bool registered = 4;
}
message BridgeTransIdView {
uint32 bridge_trans_id = 1;
}
message CommentListView {
repeated Comment comments = 1;
bool can_post = 3;
}
message CommentPostView {
enum Status { SUCCESS = 0; RATE_LIMIT = 1; CHARACTERS_LIMIT = 2; NG_WORD = 3; VOID_BODY = 4; }
Status status = 1;
}
message DeviceView {
string user_secret = 1;
}
message FeaturedTitleListView {
string image_url = 1;
string name = 2;
string description = 3;
repeated Title titles = 4;
uint32 tag_id = 5;
}
message HomeView {
repeated Banner top_banners = 1;
repeated Banner sub_banners = 2;
repeated Title updated_titles = 3;
TitleGroup featured_titles = 4;
repeated Ranking rankings = 5;
VolumeGroup newly_published_volumes = 7;
Popup popup = 8;
}
message MangaViewerView {
repeated MangaPage pages = 1;
Title title = 2;
}
message MyPageView {
string tag_name = 1;
string keyword = 2;
}
message NovelViewerView {
string url = 1;
Chapter current_chapter = 2;
Chapter next_chapter = 4;
Sns sns = 5;
Title title = 6;
}
message PointHistoryView {
repeated PointHistory logs = 1;
}
message ProfileView {
Profile profile = 1;
}
message QuestionnaireView {
message Section {
message NormalSelection {
message Answer {
message Choice {
uint32 id = 1;
string body = 2;
}
message Freeform {
string body = 1;
}
oneof answer {
Choice choice = 1;
Freeform freeform = 2;
}
}
repeated Answer answers = 1;
}
message ThumbnailSelection {
message Answer {
uint32 id = 1;
string body = 2;
string image_url = 3;
}
repeated Answer answers = 1;
}
message ImageOnlySelection {
message Answer {
uint32 id = 1;
string body = 2;
string image_url = 3;
}
repeated Answer answers = 1;
}
message FreeForm {}
uint32 id = 1;
string body = 2;
oneof selection {
NormalSelection normal = 3;
ThumbnailSelection thumbnail = 4;
ImageOnlySelection image_only = 5;
FreeForm freeform = 7;
}
uint32 limitation = 6;
bool is_mandatory = 8;
}
string name = 1;
string description = 2;
uint32 end_of_time = 3;
repeated Section sections = 4;
bool has_answered = 5;
}
message RankingView {
repeated Ranking rankings = 1;
}
message SearchView {
repeated Tag tags = 1;
repeated TitleGroup title_groups = 2;
}
message TitleDetailView {
Title title = 1;
string next_update_info = 2;
string main_thumbnail_url = 3;
string long_description = 4;
// license
string copyright = 5;
repeated Banner banners = 6;
repeated ChapterGroup chapters = 7;
bool is_bookmarked = 8;
Sns sns = 9;
bool is_free_title = 10;
}
message TitleListView {
Title picked_up_title = 1;
repeated Title titles = 2;
}
message WebMangaViewerView {
message WebMangaPage {
message Image {
string image_url = 1;
string encryption_key = 2;
// yeah there's no width/height here (@see MangaPage)
// xorstream ftw lmao
}
message LinkImage {
string image_url = 1;
string url = 2;
}
oneof content {
Image image = 1;
LinkImage link_image = 2;
}
}
message LastPage {
Chapter next_chapter = 1;
string impresstion_form_url = 2;
}
repeated WebMangaPage pages = 1;
LastPage last_page = 2;
Title title = 3;
// left handed start; ie centre first page
bool if_left_start = 4;
string title_detail_url = 5;
}
message Response {
message ErrorResult {
enum Action { DEFAULT = 0; MAINTENANCE = 1; ITEM_UPDATE = 2; USER_REGISTER = 3; }
Popup popup = 1;
UserPoint user_item = 2;
Action action = 3;
}
message SuccessResult {
message Notification {
string subject = 1;
UserPoint point = 2;
}
UserPoint user_item = 1;
Notification notification = 2;
/*
'backgroundDownload', 'billingItemList', 'commentList', 'home', 'mangaViewer', 'novelViewer', 'pointHistory', 'titleDetail', 'titleList', 'profile', 'device', 'ranking', 'allChaptersList', 'featuredTitleList', 'search', 'bridgeTransId', 'questionnaire', 'myPage', 'commentPost', 'webMangaViewer'
*/
oneof view { // data
BackgroundDownloadView background_download = 4;
BillingItemListView billing_item_list = 5;
CommentListView comment_list = 6;
HomeView home = 7;
MangaViewerView manga_viewer = 8;
NovelViewerView novel_viewer = 9;
PointHistoryView point_history = 10;
TitleDetailView title_detail = 11;
TitleListView title_list = 12;
ProfileView profile = 13;
DeviceView device = 14;
RankingView ranking = 15;
AllChaptersListView all_chapters_list = 16;
FeaturedTitleListView featured_title_list = 17;
SearchView search = 18;
BridgeTransIdView bridge_trans_id = 19;
QuestionnaireView questionnaire = 20;
MyPageView my_page = 21;
CommentPostView comment_post = 22;
WebMangaViewerView web_manga_viewer = 23;
}
}
oneof result {
SuccessResult success = 1;
ErrorResult error = 2;
}
uint32 server_time = 3;
repeated string debug_info = 4;
}