diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..3a5940e --- /dev/null +++ b/.clang-format @@ -0,0 +1,90 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlinesLeft: false +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IndentCaseLabels: false +IndentWidth: 2 +IndentWrappedFunctionNames: false +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +ReflowComments: true +SortIncludes: true +SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 8 +UseTab: Never +... + diff --git a/src/addon.cpp b/src/addon.cpp index 2a434aa..98a980f 100644 --- a/src/addon.cpp +++ b/src/addon.cpp @@ -6,86 +6,97 @@ * MIT License ********************************************************************/ -#include #include "worker.h" +#include namespace anitomyJs { - - bool ValidateInput(v8::Local value, v8::Isolate* isolate) { - bool valid = value->IsString() || value->IsArray(); - if (!valid) isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8(isolate, "Wrong data type"))); - return valid; - } - - bool ValidateOptions(v8::Local options, v8::Isolate* isolate) { - if (!options->IsObject()) { - isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8(isolate, "Options must be an object"))); - return false; - } - return true; - } - - void ParseSync(const Nan::FunctionCallbackInfo& args) { - v8::Isolate* isolate = args.GetIsolate(); - int args_length = args.Length(); - - if (args_length < 1) { - isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8(isolate, "Wrong number of arguments"))); - return; - } - - v8::Local input = args[0]; - if (!ValidateInput(input, isolate)) return; - - anitomyJs::AnitomyJs anitomy; - if (args_length >= 2) { - v8::Local options = args[1]; - if (!ValidateOptions(options, isolate) || !anitomy.SetOptions(options->ToObject(), isolate)) return; - } - - anitomy.SetInput(input); - anitomy.Parse(); - - args.GetReturnValue().Set(anitomy.ParsedResult(isolate)); - } - - void ParseAsync(const Nan::FunctionCallbackInfo& args) { - v8::Isolate* isolate = args.GetIsolate(); - int args_length = args.Length(); - - if (args_length < 2) { - isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8(isolate, "Wrong number of arguments"))); - return; - } - - v8::Local input = args[0]; - if (!ValidateInput(input, isolate)) return; - if (!args[1]->IsFunction()) { - isolate->ThrowException(v8::Exception::TypeError( - v8::String::NewFromUtf8(isolate, "Second parameter must be a callback"))); - return; - } - - Nan::Callback* callback = new Nan::Callback(args[1].As()); - anitomyJs::Worker* worker = new anitomyJs::Worker(callback); - - if (args_length >= 3) { - v8::Local options = args[2]; - if (!ValidateOptions(options, isolate) || !worker->GetAnitomy()->SetOptions(options->ToObject(), isolate)) return; - } - - worker->GetAnitomy()->SetInput(input); - Nan::AsyncQueueWorker(worker); - args.GetReturnValue().Set(Nan::Undefined()); - } - - void Init(v8::Local exports) { - exports->Set(Nan::New("parseSync").ToLocalChecked(), - Nan::New(ParseSync)->GetFunction()); - - exports->Set(Nan::New("parseAsync").ToLocalChecked(), - Nan::New(ParseAsync)->GetFunction()); - } - - NODE_MODULE(anitomy, Init) + +bool ValidateInput(v8::Local value, v8::Isolate *isolate) { + bool valid = value->IsString() || value->IsArray(); + if (!valid) + isolate->ThrowException(v8::Exception::TypeError( + v8::String::NewFromUtf8(isolate, "Wrong data type"))); + return valid; +} + +bool ValidateOptions(v8::Local options, v8::Isolate *isolate) { + if (!options->IsObject()) { + isolate->ThrowException(v8::Exception::TypeError( + v8::String::NewFromUtf8(isolate, "Options must be an object"))); + return false; + } + return true; +} + +void ParseSync(const Nan::FunctionCallbackInfo &args) { + v8::Isolate *isolate = args.GetIsolate(); + int args_length = args.Length(); + + if (args_length < 1) { + isolate->ThrowException(v8::Exception::TypeError( + v8::String::NewFromUtf8(isolate, "Wrong number of arguments"))); + return; + } + + v8::Local input = args[0]; + if (!ValidateInput(input, isolate)) + return; + + anitomyJs::AnitomyJs anitomy; + if (args_length >= 2) { + v8::Local options = args[1]; + if (!ValidateOptions(options, isolate) || + !anitomy.SetOptions(options->ToObject(), isolate)) + return; + } + + anitomy.SetInput(input); + anitomy.Parse(); + + args.GetReturnValue().Set(anitomy.ParsedResult(isolate)); +} + +void ParseAsync(const Nan::FunctionCallbackInfo &args) { + v8::Isolate *isolate = args.GetIsolate(); + int args_length = args.Length(); + + if (args_length < 2) { + isolate->ThrowException(v8::Exception::TypeError( + v8::String::NewFromUtf8(isolate, "Wrong number of arguments"))); + return; + } + + v8::Local input = args[0]; + if (!ValidateInput(input, isolate)) + return; + if (!args[1]->IsFunction()) { + isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8( + isolate, "Second parameter must be a callback"))); + return; + } + + Nan::Callback *callback = new Nan::Callback(args[1].As()); + anitomyJs::Worker *worker = new anitomyJs::Worker(callback); + + if (args_length >= 3) { + v8::Local options = args[2]; + if (!ValidateOptions(options, isolate) || + !worker->GetAnitomy()->SetOptions(options->ToObject(), isolate)) + return; + } + + worker->GetAnitomy()->SetInput(input); + Nan::AsyncQueueWorker(worker); + args.GetReturnValue().Set(Nan::Undefined()); +} + +void Init(v8::Local exports) { + exports->Set(Nan::New("parseSync").ToLocalChecked(), + Nan::New(ParseSync)->GetFunction()); + + exports->Set(Nan::New("parseAsync").ToLocalChecked(), + Nan::New(ParseAsync)->GetFunction()); +} + +NODE_MODULE(anitomy, Init) } diff --git a/src/anitomy_js.cpp b/src/anitomy_js.cpp index 998f185..f0c13b5 100644 --- a/src/anitomy_js.cpp +++ b/src/anitomy_js.cpp @@ -9,152 +9,182 @@ #include "anitomy_js.h" namespace anitomyJs { - - void AnitomyJs::SetInput(v8::Local value) { - is_batch_parse_ = value->IsArray(); - if (is_batch_parse_) { - v8::Local input = v8::Local::Cast(value); - for (unsigned int i = 0; i < input->Length(); i++) input_.push_back(ToWideString(input->Get(i))); - } else { - input_.push_back(ToWideString(value)); - } - } - - bool AnitomyJs::SetOptions(v8::Local value, v8::Isolate* isolate) { - v8::Local allowed_delimiters_str = v8::String::NewFromUtf8(isolate, "allowed_delimiters"); - v8::Local ignored_strings_str = v8::String::NewFromUtf8(isolate, "ignored_strings"); - anitomy::Options& anitomy_options = anitomy_.options(); - - // Parse allowed_delimiters option - if (value->Has(allowed_delimiters_str)) { - v8::Local allowed_delimiters = value->Get(allowed_delimiters_str); - if (!allowed_delimiters->IsString()) { - isolate->ThrowException(v8::Exception::TypeError( - v8::String::NewFromUtf8(isolate, "allowed_delimiters must be a string"))); - return false; - } - anitomy_options.allowed_delimiters = ToWideString(allowed_delimiters); - } - - // Parse ignored_strings option - if (value->Has(ignored_strings_str)) { - v8::Local string_array = value->Get(ignored_strings_str); - if (!string_array->IsArray()) { - isolate->ThrowException(v8::Exception::TypeError( - v8::String::NewFromUtf8(isolate, "ignored_strings must be an array"))); - return false; - } - v8::Local ignored_strings = v8::Local::Cast(string_array); - unsigned int ignored_strings_length = ignored_strings->Length(); - std::vector strings(ignored_strings_length); - for (unsigned int i = 0; i < ignored_strings_length; i++) { - strings.push_back(ToWideString(ignored_strings->Get(i)->ToString())); - } - anitomy_options.ignored_strings = strings; - } - - // other options - anitomy_options.parse_episode_number = BoolOption("parse_episode_number", value, isolate); - anitomy_options.parse_episode_title = BoolOption("parse_episode_title", value, isolate); - anitomy_options.parse_file_extension = BoolOption("parse_file_extension", value, isolate); - anitomy_options.parse_release_group = BoolOption("parse_release_group", value, isolate); - return true; - } - - bool AnitomyJs::BoolOption(const char* name, v8::Local value, v8::Isolate* isolate) { - v8::Local entry_name = v8::String::NewFromUtf8(isolate, name); - return value->Has(entry_name) ? value->Get(entry_name)->ToBoolean()->IsTrue() : true; - } - - void AnitomyJs::Parse() { - for (std::wstring str : input_) { - anitomy_.Parse(str); - parsed_.push_back(anitomy_.elements()); - } - } - - std::vector AnitomyJs::Parsed() { - return parsed_; - } - - v8::Local AnitomyJs::ParsedResult(v8::Isolate* isolate) { - v8::Local output = v8::Array::New(isolate, parsed_.size()); - unsigned int index = 0; - for (anitomy::Elements element : parsed_) { - output->Set(index, BuildObject(element, isolate)); - index++; - } - // TODO For ~desu's sake, stop using this flag - if (is_batch_parse_) return output; - return output->Get(0); - } - - std::wstring AnitomyJs::ToWideString(v8::Local str) { - v8::String::Utf8Value utf_value(str->ToString()); - std::string str_value(*utf_value); - return std::wstring(str_value.begin(), str_value.end()); - } - - std::string AnitomyJs::ToStr(anitomy::string_t str) { - std::wstring ws_value(str.c_str()); - return std::string(ws_value.begin(), ws_value.end()); - } - - void AnitomyJs::SetEntry(v8::Local& object, v8::Isolate* isolate, const char* entry, - anitomy::Elements& elements, anitomy::ElementCategory pos) { - v8::Local entry_name = v8::String::NewFromUtf8(isolate, entry); - switch(elements.count(pos)) { - case 0: - break; - case 1: - object->Set(entry_name, v8::String::NewFromUtf8(isolate, ToStr(elements.get(pos)).c_str())); - break; - default: - object->Set(entry_name, CategoryArray(elements, pos, isolate)); - } + +void AnitomyJs::SetInput(v8::Local value) { + is_batch_parse_ = value->IsArray(); + if (is_batch_parse_) { + v8::Local input = v8::Local::Cast(value); + for (unsigned int i = 0; i < input->Length(); i++) + input_.push_back(ToWideString(input->Get(i))); + } else { + input_.push_back(ToWideString(value)); + } +} + +bool AnitomyJs::SetOptions(v8::Local value, v8::Isolate *isolate) { + v8::Local allowed_delimiters_str = + v8::String::NewFromUtf8(isolate, "allowed_delimiters"); + v8::Local ignored_strings_str = + v8::String::NewFromUtf8(isolate, "ignored_strings"); + anitomy::Options &anitomy_options = anitomy_.options(); + + // Parse allowed_delimiters option + if (value->Has(allowed_delimiters_str)) { + v8::Local allowed_delimiters = + value->Get(allowed_delimiters_str); + if (!allowed_delimiters->IsString()) { + isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8( + isolate, "allowed_delimiters must be a string"))); + return false; } - - v8::Local AnitomyJs::CategoryArray(anitomy::Elements& elements, - anitomy::ElementCategory pos, v8::Isolate* isolate) { - std::vector category_elements = elements.get_all(pos); - v8::Local output = v8::Array::New(isolate, category_elements.size()); - unsigned int index = 0; - for (anitomy::string_t value : category_elements) { - output->Set(index, v8::String::NewFromUtf8(isolate, ToStr(value).c_str())); - index++; - } - return output; + anitomy_options.allowed_delimiters = ToWideString(allowed_delimiters); + } + + // Parse ignored_strings option + if (value->Has(ignored_strings_str)) { + v8::Local string_array = value->Get(ignored_strings_str); + if (!string_array->IsArray()) { + isolate->ThrowException(v8::Exception::TypeError(v8::String::NewFromUtf8( + isolate, "ignored_strings must be an array"))); + return false; } - - v8::Local AnitomyJs::BuildObject(anitomy::Elements& elements, v8::Isolate* isolate) { - v8::Local object = v8::Object::New(isolate); - SetEntry(object, isolate, "anime_season", elements, anitomy::kElementAnimeSeason); - SetEntry(object, isolate, "season_prefix", elements, anitomy::kElementAnimeSeasonPrefix); - SetEntry(object, isolate, "anime_title", elements, anitomy::kElementAnimeTitle); - SetEntry(object, isolate, "anime_type", elements, anitomy::kElementAnimeType); - SetEntry(object, isolate, "anime_year", elements, anitomy::kElementAnimeYear); - SetEntry(object, isolate, "audio_term", elements, anitomy::kElementAudioTerm); - SetEntry(object, isolate, "device_compatibility", elements, anitomy::kElementDeviceCompatibility); - SetEntry(object, isolate, "episode_number", elements, anitomy::kElementEpisodeNumber); - SetEntry(object, isolate, "episode_number_alt", elements, anitomy::kElementEpisodeNumberAlt); - SetEntry(object, isolate, "episode_prefix", elements, anitomy::kElementEpisodePrefix); - SetEntry(object, isolate, "episode_title", elements, anitomy::kElementEpisodeTitle); - SetEntry(object, isolate, "file_checksum", elements, anitomy::kElementFileChecksum); - SetEntry(object, isolate, "file_extension", elements, anitomy::kElementFileExtension); - SetEntry(object, isolate, "file_name", elements, anitomy::kElementFileName); - SetEntry(object, isolate, "language", elements, anitomy::kElementLanguage); - SetEntry(object, isolate, "other", elements, anitomy::kElementOther); - SetEntry(object, isolate, "release_group", elements, anitomy::kElementReleaseGroup); - SetEntry(object, isolate, "release_information", elements, anitomy::kElementReleaseInformation); - SetEntry(object, isolate, "release_version", elements, anitomy::kElementReleaseVersion); - SetEntry(object, isolate, "source", elements, anitomy::kElementSource); - SetEntry(object, isolate, "subtitles", elements, anitomy::kElementSubtitles); - SetEntry(object, isolate, "video_resolution", elements, anitomy::kElementVideoResolution); - SetEntry(object, isolate, "video_term", elements, anitomy::kElementVideoTerm); - SetEntry(object, isolate, "volume_number", elements, anitomy::kElementVolumeNumber); - SetEntry(object, isolate, "volume_prefix", elements, anitomy::kElementVolumePrefix); - SetEntry(object, isolate, "unknown", elements, anitomy::kElementUnknown); - return object; + v8::Local ignored_strings = + v8::Local::Cast(string_array); + unsigned int ignored_strings_length = ignored_strings->Length(); + std::vector strings(ignored_strings_length); + for (unsigned int i = 0; i < ignored_strings_length; i++) { + strings.push_back(ToWideString(ignored_strings->Get(i)->ToString())); } - + anitomy_options.ignored_strings = strings; + } + + // other options + anitomy_options.parse_episode_number = + BoolOption("parse_episode_number", value, isolate); + anitomy_options.parse_episode_title = + BoolOption("parse_episode_title", value, isolate); + anitomy_options.parse_file_extension = + BoolOption("parse_file_extension", value, isolate); + anitomy_options.parse_release_group = + BoolOption("parse_release_group", value, isolate); + return true; +} + +bool AnitomyJs::BoolOption(const char *name, v8::Local value, + v8::Isolate *isolate) { + v8::Local entry_name = v8::String::NewFromUtf8(isolate, name); + return value->Has(entry_name) ? value->Get(entry_name)->ToBoolean()->IsTrue() + : true; +} + +void AnitomyJs::Parse() { + for (std::wstring str : input_) { + anitomy_.Parse(str); + parsed_.push_back(anitomy_.elements()); + } +} + +std::vector AnitomyJs::Parsed() { return parsed_; } + +v8::Local AnitomyJs::ParsedResult(v8::Isolate *isolate) { + v8::Local output = v8::Array::New(isolate, parsed_.size()); + unsigned int index = 0; + for (anitomy::Elements element : parsed_) { + output->Set(index, BuildObject(element, isolate)); + index++; + } + // TODO For ~desu's sake, stop using this flag + if (is_batch_parse_) + return output; + return output->Get(0); +} + +std::wstring AnitomyJs::ToWideString(v8::Local str) { + v8::String::Utf8Value utf_value(str->ToString()); + std::string str_value(*utf_value); + return std::wstring(str_value.begin(), str_value.end()); +} + +std::string AnitomyJs::ToStr(anitomy::string_t str) { + std::wstring ws_value(str.c_str()); + return std::string(ws_value.begin(), ws_value.end()); +} + +void AnitomyJs::SetEntry(v8::Local &object, v8::Isolate *isolate, + const char *entry, anitomy::Elements &elements, + anitomy::ElementCategory pos) { + v8::Local entry_name = v8::String::NewFromUtf8(isolate, entry); + switch (elements.count(pos)) { + case 0: + break; + case 1: + object->Set(entry_name, v8::String::NewFromUtf8( + isolate, ToStr(elements.get(pos)).c_str())); + break; + default: + object->Set(entry_name, CategoryArray(elements, pos, isolate)); + } +} + +v8::Local AnitomyJs::CategoryArray(anitomy::Elements &elements, + anitomy::ElementCategory pos, + v8::Isolate *isolate) { + std::vector category_elements = elements.get_all(pos); + v8::Local output = + v8::Array::New(isolate, category_elements.size()); + unsigned int index = 0; + for (anitomy::string_t value : category_elements) { + output->Set(index, v8::String::NewFromUtf8(isolate, ToStr(value).c_str())); + index++; + } + return output; +} + +v8::Local AnitomyJs::BuildObject(anitomy::Elements &elements, + v8::Isolate *isolate) { + v8::Local object = v8::Object::New(isolate); + SetEntry(object, isolate, "anime_season", elements, + anitomy::kElementAnimeSeason); + SetEntry(object, isolate, "season_prefix", elements, + anitomy::kElementAnimeSeasonPrefix); + SetEntry(object, isolate, "anime_title", elements, + anitomy::kElementAnimeTitle); + SetEntry(object, isolate, "anime_type", elements, anitomy::kElementAnimeType); + SetEntry(object, isolate, "anime_year", elements, anitomy::kElementAnimeYear); + SetEntry(object, isolate, "audio_term", elements, anitomy::kElementAudioTerm); + SetEntry(object, isolate, "device_compatibility", elements, + anitomy::kElementDeviceCompatibility); + SetEntry(object, isolate, "episode_number", elements, + anitomy::kElementEpisodeNumber); + SetEntry(object, isolate, "episode_number_alt", elements, + anitomy::kElementEpisodeNumberAlt); + SetEntry(object, isolate, "episode_prefix", elements, + anitomy::kElementEpisodePrefix); + SetEntry(object, isolate, "episode_title", elements, + anitomy::kElementEpisodeTitle); + SetEntry(object, isolate, "file_checksum", elements, + anitomy::kElementFileChecksum); + SetEntry(object, isolate, "file_extension", elements, + anitomy::kElementFileExtension); + SetEntry(object, isolate, "file_name", elements, anitomy::kElementFileName); + SetEntry(object, isolate, "language", elements, anitomy::kElementLanguage); + SetEntry(object, isolate, "other", elements, anitomy::kElementOther); + SetEntry(object, isolate, "release_group", elements, + anitomy::kElementReleaseGroup); + SetEntry(object, isolate, "release_information", elements, + anitomy::kElementReleaseInformation); + SetEntry(object, isolate, "release_version", elements, + anitomy::kElementReleaseVersion); + SetEntry(object, isolate, "source", elements, anitomy::kElementSource); + SetEntry(object, isolate, "subtitles", elements, anitomy::kElementSubtitles); + SetEntry(object, isolate, "video_resolution", elements, + anitomy::kElementVideoResolution); + SetEntry(object, isolate, "video_term", elements, anitomy::kElementVideoTerm); + SetEntry(object, isolate, "volume_number", elements, + anitomy::kElementVolumeNumber); + SetEntry(object, isolate, "volume_prefix", elements, + anitomy::kElementVolumePrefix); + SetEntry(object, isolate, "unknown", elements, anitomy::kElementUnknown); + return object; +} } diff --git a/src/anitomy_js.h b/src/anitomy_js.h index 2e8420f..fc462b1 100644 --- a/src/anitomy_js.h +++ b/src/anitomy_js.h @@ -15,35 +15,38 @@ #include namespace anitomyJs { - - class AnitomyJs { - public: - void SetInput(v8::Local value); - bool SetOptions(v8::Local value, v8::Isolate* isolate); - void Parse(); - - std::vector Parsed(); - v8::Local ParsedResult(v8::Isolate* isolate); - - private: - anitomy::Anitomy anitomy_; - std::vector input_; - - std::vector parsed_; - bool is_batch_parse_; - - std::wstring ToWideString(v8::Local str); - std::string ToStr(anitomy::string_t str); - - bool BoolOption(const char* name, v8::Local value, v8::Isolate* isolate); - - v8::Local BuildObject(anitomy::Elements& elements, v8::Isolate* isolate); - void SetEntry(v8::Local& object, v8::Isolate* isolate, const char* entry, - anitomy::Elements& elements, anitomy::ElementCategory pos); - v8::Local CategoryArray(anitomy::Elements& elements, - anitomy::ElementCategory pos, v8::Isolate* isolate); - }; - + +class AnitomyJs { +public: + void SetInput(v8::Local value); + bool SetOptions(v8::Local value, v8::Isolate *isolate); + void Parse(); + + std::vector Parsed(); + v8::Local ParsedResult(v8::Isolate *isolate); + +private: + anitomy::Anitomy anitomy_; + std::vector input_; + + std::vector parsed_; + bool is_batch_parse_; + + std::wstring ToWideString(v8::Local str); + std::string ToStr(anitomy::string_t str); + + bool BoolOption(const char *name, v8::Local value, + v8::Isolate *isolate); + + v8::Local BuildObject(anitomy::Elements &elements, + v8::Isolate *isolate); + void SetEntry(v8::Local &object, v8::Isolate *isolate, + const char *entry, anitomy::Elements &elements, + anitomy::ElementCategory pos); + v8::Local CategoryArray(anitomy::Elements &elements, + anitomy::ElementCategory pos, + v8::Isolate *isolate); +}; } #endif \ No newline at end of file diff --git a/src/worker.cpp b/src/worker.cpp index ce55024..582708f 100644 --- a/src/worker.cpp +++ b/src/worker.cpp @@ -9,22 +9,18 @@ #include "worker.h" namespace anitomyJs { - - Worker::Worker(Nan::Callback* callback) : Nan::AsyncWorker(callback) { }; - - void Worker::Execute() { - anitomy_.Parse(); - } - - anitomyJs::AnitomyJs* Worker::GetAnitomy() { - return &anitomy_; - } - - void Worker::HandleOKCallback() { - Nan::HandleScope scope; - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - - v8::Local argv[] = { anitomy_.ParsedResult(isolate) }; - callback->Call(1, argv); - } + +Worker::Worker(Nan::Callback *callback) : Nan::AsyncWorker(callback){}; + +void Worker::Execute() { anitomy_.Parse(); } + +anitomyJs::AnitomyJs *Worker::GetAnitomy() { return &anitomy_; } + +void Worker::HandleOKCallback() { + Nan::HandleScope scope; + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + + v8::Local argv[] = {anitomy_.ParsedResult(isolate)}; + callback->Call(1, argv); +} } \ No newline at end of file diff --git a/src/worker.h b/src/worker.h index ef71125..cf77e04 100644 --- a/src/worker.h +++ b/src/worker.h @@ -13,20 +13,19 @@ #include namespace anitomyJs { - - class Worker : public Nan::AsyncWorker { - public: - Worker(Nan::Callback* callback); - anitomyJs::AnitomyJs* GetAnitomy(); - void Execute(); - - protected: - void HandleOKCallback(); - - private: - anitomyJs::AnitomyJs anitomy_; - }; - + +class Worker : public Nan::AsyncWorker { +public: + Worker(Nan::Callback *callback); + anitomyJs::AnitomyJs *GetAnitomy(); + void Execute(); + +protected: + void HandleOKCallback(); + +private: + anitomyJs::AnitomyJs anitomy_; +}; } #endif \ No newline at end of file diff --git a/test/data.json b/test/data.json index 2b5a908..329a295 100644 --- a/test/data.json +++ b/test/data.json @@ -1,1379 +1,1379 @@ { - "[ANBU]_Princess_Lover!_-_01_[2048A39A].mkv": { - "anime_title": "Princess Lover!", - "episode_number": "01", - "file_checksum": "2048A39A", - "file_extension": "mkv", - "file_name": "[ANBU]_Princess_Lover!_-_01_[2048A39A]", - "release_group": "ANBU" - }, - "[ANBU-Menclave]_Canaan_-_01_[1024x576_H.264_AAC][12F00E89].mkv": { - "anime_title": "Canaan", - "audio_term": "AAC", - "episode_number": "01", - "file_checksum": "12F00E89", - "file_extension": "mkv", - "file_name": "[ANBU-Menclave]_Canaan_-_01_[1024x576_H.264_AAC][12F00E89]", - "release_group": "ANBU-Menclave", - "video_resolution": "1024x576", - "video_term": "H.264" - }, - "[ANBU-umai]_Haiyoru!_Nyaru-Ani_[596DD8E6].mkv": { - "anime_title": "Haiyoru! Nyaru-Ani", - "file_checksum": "596DD8E6", - "file_extension": "mkv", - "file_name": "[ANBU-umai]_Haiyoru!_Nyaru-Ani_[596DD8E6]", - "release_group": "ANBU-umai" - }, - "[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director's Cut) [988DB090].mkv": { - "anime_title": "Seikon no Qwaser", - "episode_number": "13", - "file_checksum": "988DB090", - "file_extension": "mkv", - "file_name": "[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director's Cut) [988DB090]", - "other": "Uncensored", - "release_group": "chibi-Doki", - "release_version": "0" - }, - "[Chihiro]_Kono_Aozora_ni_Yakusoku_Wo_10_v2_[DVD][h264][C83D206B].mkv": { - "anime_title": "Kono Aozora ni Yakusoku Wo", - "episode_number": "10", - "file_checksum": "C83D206B", - "file_extension": "mkv", - "file_name": "[Chihiro]_Kono_Aozora_ni_Yakusoku_Wo_10_v2_[DVD][h264][C83D206B]", - "release_group": "Chihiro", - "release_version": "2", - "source": "DVD", - "video_term": "h264" - }, - "[Coalgirls]_Toradora_ED2_(704x480_DVD_AAC)_[3B65D1E6].mkv": { - "anime_title": "Toradora ED", - "anime_type": "ED", - "audio_term": "AAC", - "episode_number": "2", - "file_checksum": "3B65D1E6", - "file_extension": "mkv", - "file_name": "[Coalgirls]_Toradora_ED2_(704x480_DVD_AAC)_[3B65D1E6]", - "release_group": "Coalgirls", - "source": "DVD", - "video_resolution": "704x480" - }, - "[Conclave-Mendoi]_Mobile_Suit_Gundam_00_S2_-_01v2_[1280x720_H.264_AAC][4863FBE8].mkv": { - "anime_title": "Mobile Suit Gundam 00 S2", - "audio_term": "AAC", - "episode_number": "01", - "file_checksum": "4863FBE8", - "file_extension": "mkv", - "file_name": "[Conclave-Mendoi]_Mobile_Suit_Gundam_00_S2_-_01v2_[1280x720_H.264_AAC][4863FBE8]", - "release_group": "Conclave-Mendoi", - "release_version": "2", - "video_resolution": "1280x720", - "video_term": "H.264" - }, - "[DB]_Bleach_225_[C63D149C].avi": { - "anime_title": "Bleach", - "episode_number": "225", - "file_checksum": "C63D149C", - "file_extension": "avi", - "file_name": "[DB]_Bleach_225_[C63D149C]", - "release_group": "DB" - }, - "[Frostii]_Nodame_Cantabile_Finale_-_00_[73AD0735].mkv": { - "anime_title": "Nodame Cantabile Finale", - "episode_number": "00", - "file_checksum": "73AD0735", - "file_extension": "mkv", - "file_name": "[Frostii]_Nodame_Cantabile_Finale_-_00_[73AD0735]", - "release_group": "Frostii" - }, - "[Hard-Boiled FS]FullMetalAlchemist_09.rmvb": { - "anime_title": "FullMetalAlchemist", - "episode_number": "09", - "file_extension": "rmvb", - "file_name": "[Hard-Boiled FS]FullMetalAlchemist_09", - "release_group": "Hard-Boiled FS" - }, - "[HorribleSubs] Tower of Druaga - Sword of Uruk - 04 [480p].mkv": { - "anime_title": "Tower of Druaga - Sword of Uruk", - "episode_number": "04", - "file_extension": "mkv", - "file_name": "[HorribleSubs] Tower of Druaga - Sword of Uruk - 04 [480p]", - "release_group": "HorribleSubs", - "video_resolution": "480p" - }, - "[KAF-TEAM]_One_Piece_Movie_9_vostfr_HD.avi": { - "anime_title": "One Piece Movie 9", - "anime_type": "Movie", - "file_extension": "avi", - "file_name": "[KAF-TEAM]_One_Piece_Movie_9_vostfr_HD", - "language": "vostfr", - "release_group": "KAF-TEAM", - "video_term": "HD" - }, - "[kito].Nazca.episode.01.DVDRip.[x264.He-aac.{Jpn}+Sub{Fr}].mkv": { - "anime_title": "Nazca", - "episode_number": "01", - "file_extension": "mkv", - "file_name": "[kito].Nazca.episode.01.DVDRip.[x264.He-aac.{Jpn}+Sub{Fr}]", - "release_group": "kito", - "source": "DVDRip", - "video_term": "x264" - }, - "[Lambda-Delta]_Umineko_no_Naku_Koro_ni_-_11_[848x480_H.264_AAC][943106AD].mkv": { - "anime_title": "Umineko no Naku Koro ni", - "audio_term": "AAC", - "episode_number": "11", - "file_checksum": "943106AD", - "file_extension": "mkv", - "file_name": "[Lambda-Delta]_Umineko_no_Naku_Koro_ni_-_11_[848x480_H.264_AAC][943106AD]", - "release_group": "Lambda-Delta", - "video_resolution": "848x480", - "video_term": "H.264" - }, - "[SS]_Kemono_no_Souja_Erin_-_12_(1280x720_h264)_[0F5F884F].mkv": { - "anime_title": "Kemono no Souja Erin", - "episode_number": "12", - "file_checksum": "0F5F884F", - "file_extension": "mkv", - "file_name": "[SS]_Kemono_no_Souja_Erin_-_12_(1280x720_h264)_[0F5F884F]", - "release_group": "SS", - "video_resolution": "1280x720", - "video_term": "h264" - }, - "[Taka]_Fullmetal_Alchemist_(2009)_04_[720p][40F2A957].mp4": { - "anime_title": "Fullmetal Alchemist", - "anime_year": "2009", - "episode_number": "04", - "file_checksum": "40F2A957", - "file_extension": "mp4", - "file_name": "[Taka]_Fullmetal_Alchemist_(2009)_04_[720p][40F2A957]", - "release_group": "Taka", - "video_resolution": "720p" - }, - "[UTW-TMD]_Summer_Wars_[BD][h264-720p][TrueHD5.1][9F311DAB].mkv": { - "anime_title": "Summer Wars", - "audio_term": "TrueHD5.1", - "file_checksum": "9F311DAB", - "file_extension": "mkv", - "file_name": "[UTW-TMD]_Summer_Wars_[BD][h264-720p][TrueHD5.1][9F311DAB]", - "release_group": "UTW-TMD", - "source": "BD", - "video_resolution": "720p", - "video_term": "h264" - }, - "[ValdikSS]_First_Squad_The_Morment_Of_Truth_[720x576_h264_dvdscr_eng_hardsub].mkv": { - "anime_title": "First Squad The Morment Of Truth", - "file_extension": "mkv", - "file_name": "[ValdikSS]_First_Squad_The_Morment_Of_Truth_[720x576_h264_dvdscr_eng_hardsub]", - "language": "eng", - "release_group": "ValdikSS", - "subtitles": "hardsub", - "video_resolution": "720x576", - "video_term": "h264" - }, - "Evangelion_1.11_You_Are_(Not)_Alone_(2009)_[1080p,BluRay,x264,DTS-ES]_-_THORA.mkv": { - "anime_title": "Evangelion 1.11 You Are (Not) Alone", - "anime_year": "2009", - "audio_term": "DTS-ES", - "file_extension": "mkv", - "file_name": "Evangelion_1.11_You_Are_(Not)_Alone_(2009)_[1080p,BluRay,x264,DTS-ES]_-_THORA", - "release_group": "THORA", - "source": "BluRay", - "video_resolution": "1080p", - "video_term": "x264" - }, - "Evangelion_1.11_You_Are_(Not)_Alone_[1080p,BluRay,x264,DTS-ES]_-_THORA.mkv": { - "anime_title": "Evangelion 1.11 You Are (Not) Alone", - "audio_term": "DTS-ES", - "file_extension": "mkv", - "file_name": "Evangelion_1.11_You_Are_(Not)_Alone_[1080p,BluRay,x264,DTS-ES]_-_THORA", - "release_group": "THORA", - "source": "BluRay", - "video_resolution": "1080p", - "video_term": "x264" - }, - "Eve no Jikan 2 [88F4F7F0].mkv": { - "anime_title": "Eve no Jikan", - "episode_number": "2", - "file_checksum": "88F4F7F0", - "file_extension": "mkv", - "file_name": "Eve no Jikan 2 [88F4F7F0]" - }, - "Gin'iro_no_Kami_no_Agito_(2006)_[1080p,BluRay,x264,DTS]_-_THORA.mkv": { - "anime_title": "Gin'iro no Kami no Agito", - "anime_year": "2006", - "audio_term": "DTS", - "file_extension": "mkv", - "file_name": "Gin'iro_no_Kami_no_Agito_(2006)_[1080p,BluRay,x264,DTS]_-_THORA", - "release_group": "THORA", - "source": "BluRay", - "video_resolution": "1080p", - "video_term": "x264" - }, - "Magical Girl Lyrical Nanoha A's - 01.DVD[H264.AAC][DGz][7A8A7769].mkv": { - "anime_title": "Magical Girl Lyrical Nanoha A's", - "audio_term": "AAC", - "episode_number": "01", - "file_checksum": "7A8A7769", - "file_extension": "mkv", - "file_name": "Magical Girl Lyrical Nanoha A's - 01.DVD[H264.AAC][DGz][7A8A7769]", - "release_group": "DGz", - "source": "DVD", - "video_term": "H264" - }, - "Mobile_Suit_Gundam_00_Season_2_Ep07_A_Reunion_and_a_Parting_[1080p,BluRay,x264]_-_THORA.mkv": { - "anime_season": "2", - "anime_title": "Mobile Suit Gundam 00", - "episode_number": "07", - "episode_title": "A Reunion and a Parting", - "file_extension": "mkv", - "file_name": "Mobile_Suit_Gundam_00_Season_2_Ep07_A_Reunion_and_a_Parting_[1080p,BluRay,x264]_-_THORA", - "release_group": "THORA", - "source": "BluRay", - "video_resolution": "1080p", - "video_term": "x264" - }, - "ponyo_on_the_cliff_by_the_sea[h264.dts][niizk].mkv": { - "anime_title": "ponyo on the cliff by the sea", - "audio_term": "dts", - "file_extension": "mkv", - "file_name": "ponyo_on_the_cliff_by_the_sea[h264.dts][niizk]", - "release_group": "niizk", - "video_term": "h264" - }, - "[Seto_Otaku]_AIKa_ZERO_OVA_-_01_[BD][1920x1080_H264-Flac][6730D40A].mkv": { - "anime_title": "AIKa ZERO OVA", - "anime_type": "OVA", - "audio_term": "Flac", - "episode_number": "01", - "file_checksum": "6730D40A", - "file_extension": "mkv", - "file_name": "[Seto_Otaku]_AIKa_ZERO_OVA_-_01_[BD][1920x1080_H264-Flac][6730D40A]", - "release_group": "Seto_Otaku", - "source": "BD", - "video_resolution": "1920x1080", - "video_term": "H264" - }, - "[a4e]R.O.D_the_TV_01[divx5.2.1].mkv": { - "anime_title": "R.O.D the TV", - "anime_type": "TV", - "episode_number": "01", - "file_extension": "mkv", - "file_name": "[a4e]R.O.D_the_TV_01[divx5.2.1]", - "release_group": "a4e" - }, - "Ghost_in_the_Shell_Stand_Alone_Complex_2nd_GIG_Ep05v2_EXCAVATION_[720p,HDTV,x264,AAC_5.1]_-_THORA.mkv": { - "anime_title": "Ghost in the Shell Stand Alone Complex 2nd GIG", - "audio_term": [ - "AAC", - "5.1" - ], - "episode_number": "05", - "episode_title": "EXCAVATION", - "file_extension": "mkv", - "file_name": "Ghost_in_the_Shell_Stand_Alone_Complex_2nd_GIG_Ep05v2_EXCAVATION_[720p,HDTV,x264,AAC_5.1]_-_THORA", - "release_group": "THORA", - "release_version": "2", - "source": "HDTV", - "video_resolution": "720p", - "video_term": "x264" - }, - "Ghost_in_the_Shell_Stand_Alone_Complex_2nd_GIG_Ep06_Pu239_[720p,HDTV,x264,AAC_5.1]_-_THORA.mkv": { - "anime_title": "Ghost in the Shell Stand Alone Complex 2nd GIG", - "audio_term": [ - "AAC", - "5.1" - ], - "episode_number": "06", - "episode_title": "Pu239", - "file_extension": "mkv", - "file_name": "Ghost_in_the_Shell_Stand_Alone_Complex_2nd_GIG_Ep06_Pu239_[720p,HDTV,x264,AAC_5.1]_-_THORA", - "release_group": "THORA", - "source": "HDTV", - "video_resolution": "720p", - "video_term": "x264" - }, - "Fate_Stay_Night_Ep05_The_Two_Magi_Part1_[720p,BluRay,x264]_-_THORA.mkv": { - "anime_title": "Fate Stay Night", - "episode_number": "05", - "episode_title": "The Two Magi Part1", - "file_extension": "mkv", - "file_name": "Fate_Stay_Night_Ep05_The_Two_Magi_Part1_[720p,BluRay,x264]_-_THORA", - "release_group": "THORA", - "source": "BluRay", - "video_resolution": "720p", - "video_term": "x264" - }, - "[RaX]Mezzo(DSA)_-_05_-_[x264_ogg]_[585d9971].mkv": { - "anime_title": "Mezzo(DSA)", - "audio_term": "ogg", - "episode_number": "05", - "file_checksum": "585d9971", - "file_extension": "mkv", - "file_name": "[RaX]Mezzo(DSA)_-_05_-_[x264_ogg]_[585d9971]", - "release_group": "RaX", - "video_term": "x264" - }, - "[AKH-SWE]_Fullmetal_Alchemist_(2009)_02v2_[H.264.AAC][7B2C5E8B].mkv": { - "anime_title": "Fullmetal Alchemist", - "anime_year": "2009", - "audio_term": "AAC", - "episode_number": "02", - "file_checksum": "7B2C5E8B", - "file_extension": "mkv", - "file_name": "[AKH-SWE]_Fullmetal_Alchemist_(2009)_02v2_[H.264.AAC][7B2C5E8B]", - "release_group": "AKH-SWE", - "release_version": "2", - "video_term": "H.264" - }, - "[FuktLogik][Sayonara_Zetsubou_Sensei][01][DVDRip][x264_AC3].mkv": { - "anime_title": "Sayonara Zetsubou Sensei", - "audio_term": "AC3", - "episode_number": "01", - "file_extension": "mkv", - "file_name": "[FuktLogik][Sayonara_Zetsubou_Sensei][01][DVDRip][x264_AC3]", - "release_group": "FuktLogik", - "source": "DVDRip", - "video_term": "x264" - }, - "[Darksoul-Subs] Tatakau Shisho - The Book of Bantorra [848x480 XVID_MP3].mkv": { - "anime_title": "Tatakau Shisho - The Book of Bantorra", - "audio_term": "MP3", - "file_extension": "mkv", - "file_name": "[Darksoul-Subs] Tatakau Shisho - The Book of Bantorra [848x480 XVID_MP3]", - "release_group": "Darksoul-Subs", - "video_resolution": "848x480", - "video_term": "XVID" - }, - "[ACX]Neon_Genesis_Evangelion_-_Platinum_-_06_-_Showdown_in_Tokyo_3_[SaintDeath]_[CBDB8577].mkv": { - "anime_title": "Neon Genesis Evangelion - Platinum", - "episode_number": "06", - "episode_title": "Showdown in Tokyo 3", - "file_checksum": "CBDB8577", - "file_extension": "mkv", - "file_name": "[ACX]Neon_Genesis_Evangelion_-_Platinum_-_06_-_Showdown_in_Tokyo_3_[SaintDeath]_[CBDB8577]", - "release_group": "ACX" - }, - "[Himatsubushi]_Sora_no_Woto_-_01_-_H264_-_720p_-_E83AD672.mkv": { - "anime_title": "Sora no Woto", - "episode_number": "01", - "file_checksum": "E83AD672", - "file_extension": "mkv", - "file_name": "[Himatsubushi]_Sora_no_Woto_-_01_-_H264_-_720p_-_E83AD672", - "release_group": "Himatsubushi", - "video_resolution": "720p", - "video_term": "H264" - }, - "[EroGaKi-Team]_Nurse_Witch_Komugi-chan_Magikarte_02.5_[902BB314].mkv": { - "anime_title": "Nurse Witch Komugi-chan Magikarte", - "episode_number": "02.5", - "file_checksum": "902BB314", - "file_extension": "mkv", - "file_name": "[EroGaKi-Team]_Nurse_Witch_Komugi-chan_Magikarte_02.5_[902BB314]", - "release_group": "EroGaKi-Team" - }, - "Ookiku Furikabutte S2 - 09 (Central Anime) [BD841253].mkv": { - "anime_title": "Ookiku Furikabutte S2", - "episode_number": "09", - "file_checksum": "BD841253", - "file_extension": "mkv", - "file_name": "Ookiku Furikabutte S2 - 09 (Central Anime) [BD841253]", - "release_group": "Central Anime" - }, - "[HorribleSubs] HEROMAN - 10_(XviD_AnimeSenshi).mkv": { - "anime_title": "HEROMAN", - "episode_number": "10", - "file_extension": "mkv", - "file_name": "[HorribleSubs] HEROMAN - 10_(XviD_AnimeSenshi)", - "release_group": "HorribleSubs", - "video_term": "XviD" - }, - "Detective Conan - 316-317 [DCTP][2411959B].mkv": { - "anime_title": "Detective Conan", - "episode_number": [ - "316", - "317" - ], - "file_checksum": "2411959B", - "file_extension": "mkv", - "file_name": "Detective Conan - 316-317 [DCTP][2411959B]", - "release_group": "DCTP" - }, - "[N LogN Fansubs] Angel Beats (9).mkv": { - "anime_title": "Angel Beats", - "episode_number": "9", - "file_extension": "mkv", - "file_name": "[N LogN Fansubs] Angel Beats (9)", - "release_group": "N LogN Fansubs" - }, - "To_Aru_Kagaku_no_Railgun_13-15_[BD_1080p][AtsA]": { - "anime_title": "To Aru Kagaku no Railgun", - "episode_number": [ - "13", - "15" - ], - "file_name": "To_Aru_Kagaku_no_Railgun_13-15_[BD_1080p][AtsA]", - "release_group": "AtsA", - "source": "BD", - "video_resolution": "1080p" - }, - "Juuousei_-_01_[Black_Sheep][HDTV_H264_AAC][803DA487].mkv": { - "anime_title": "Juuousei", - "audio_term": "AAC", - "episode_number": "01", - "file_checksum": "803DA487", - "file_extension": "mkv", - "file_name": "Juuousei_-_01_[Black_Sheep][HDTV_H264_AAC][803DA487]", - "release_group": "Black_Sheep", - "source": "HDTV", - "video_term": "H264" - }, - "[RNA]_Sakura_Taisen_New_York_NY_Ep_2_[1590D378].avi": { - "anime_title": "Sakura Taisen New York NY", - "episode_number": "2", - "file_checksum": "1590D378", - "file_extension": "avi", - "file_name": "[RNA]_Sakura_Taisen_New_York_NY_Ep_2_[1590D378]", - "release_group": "RNA" - }, - "Hayate no Gotoku 2nd Season 24 (Blu-Ray 1080p) [Chihiro]": { - "anime_season": "2", - "anime_title": "Hayate no Gotoku", - "episode_number": "24", - "file_name": "Hayate no Gotoku 2nd Season 24 (Blu-Ray 1080p) [Chihiro]", - "release_group": "Chihiro", - "source": "Blu-Ray", - "video_resolution": "1080p" - }, - "[BluDragon] Blue Submarine No.6 (DVD, R2, Dual Audio) V3": { - "anime_title": "Blue Submarine No.6", - "audio_term": "Dual Audio", - "file_name": "[BluDragon] Blue Submarine No.6 (DVD, R2, Dual Audio) V3", - "release_group": "BluDragon", - "release_version": "3", - "source": "DVD" - }, - "Chrono Crusade ep. 1-5": { - "anime_title": "Chrono Crusade", - "episode_number": [ - "1", - "5" - ], - "file_name": "Chrono Crusade ep. 1-5" - }, - "[gg]_Kimi_ni_Todoke_2nd_Season_-_00_[BF735BC4].mkv": { - "anime_season": "2", - "anime_title": "Kimi ni Todoke", - "episode_number": "00", - "file_checksum": "BF735BC4", - "file_extension": "mkv", - "file_name": "[gg]_Kimi_ni_Todoke_2nd_Season_-_00_[BF735BC4]", - "release_group": "gg" - }, - "K-ON!_Ep03_Training!_[1080p,BluRay,x264]_-_THORA.mkv": { - "anime_title": "K-ON!", - "episode_number": "03", - "episode_title": "Training!", - "file_extension": "mkv", - "file_name": "K-ON!_Ep03_Training!_[1080p,BluRay,x264]_-_THORA", - "release_group": "THORA", - "source": "BluRay", - "video_resolution": "1080p", - "video_term": "x264" - }, - "K-ON!!_Ep08_Career_Plan!_[1080p,BluRay,x264]_-_THORA.mkv": { - "anime_title": "K-ON!!", - "episode_number": "08", - "episode_title": "Career Plan!", - "file_extension": "mkv", - "file_name": "K-ON!!_Ep08_Career_Plan!_[1080p,BluRay,x264]_-_THORA", - "release_group": "THORA", - "source": "BluRay", - "video_resolution": "1080p", - "video_term": "x264" - }, - "[SFW]_Queen's_Blade_S2": { - "anime_title": "Queen's Blade S2", - "file_name": "[SFW]_Queen's_Blade_S2", - "release_group": "SFW" - }, - "Evangelion_1.0_You_Are_[Not]_Alone_(1080p)_[@Home]": { - "anime_title": "Evangelion 1.0 You Are [Not] Alone", - "file_name": "Evangelion_1.0_You_Are_[Not]_Alone_(1080p)_[@Home]", - "release_group": "@Home", - "video_resolution": "1080p" - }, - "[Ayako]_Infinite_Stratos_-_IS_-_01v2_[XVID][400p][29675B71].avi": { - "anime_title": "Infinite Stratos - IS", - "episode_number": "01", - "file_checksum": "29675B71", - "file_extension": "avi", - "file_name": "[Ayako]_Infinite_Stratos_-_IS_-_01v2_[XVID][400p][29675B71]", - "release_group": "Ayako", - "release_version": "2", - "video_resolution": "400p", - "video_term": "XVID" - }, - "[E-HARO Raws] Kore wa Zombie desu ka - 03 (TV 1280x720 h264 AAC) [888E4991].mkv": { - "anime_title": "Kore wa Zombie desu ka", - "anime_type": "TV", - "audio_term": "AAC", - "episode_number": "03", - "file_checksum": "888E4991", - "file_extension": "mkv", - "file_name": "[E-HARO Raws] Kore wa Zombie desu ka - 03 (TV 1280x720 h264 AAC) [888E4991]", - "release_group": "E-HARO Raws", - "video_resolution": "1280x720", - "video_term": "h264" - }, - "[Edomae Subs] Kore wa Zombie desu ka Episode 2.mkv": { - "anime_title": "Kore wa Zombie desu ka", - "episode_number": "2", - "file_extension": "mkv", - "file_name": "[Edomae Subs] Kore wa Zombie desu ka Episode 2", - "release_group": "Edomae Subs" - }, - "Juuni.Kokki.Ep.5.avi": { - "anime_title": "Juuni Kokki", - "episode_number": "5", - "file_extension": "avi", - "file_name": "Juuni.Kokki.Ep.5" - }, - "Juuni Kokki Ep.5.avi": { - "anime_title": "Juuni Kokki", - "episode_number": "5", - "file_extension": "avi", - "file_name": "Juuni Kokki Ep.5" - }, - "5_centimeters_per_second[1904x1072.h264.flac][niizk].mkv": { - "anime_title": "5 centimeters per second", - "audio_term": "flac", - "file_extension": "mkv", - "file_name": "5_centimeters_per_second[1904x1072.h264.flac][niizk]", - "release_group": "niizk", - "video_resolution": "1904x1072", - "video_term": "h264" - }, - "[Yoroshiku]_009-1_-_02_(H264)_[36D2444D].mkv": { - "anime_title": "009-1", - "episode_number": "02", - "file_checksum": "36D2444D", - "file_extension": "mkv", - "file_name": "[Yoroshiku]_009-1_-_02_(H264)_[36D2444D]", - "release_group": "Yoroshiku", - "video_term": "H264" - }, - "After War Gundam X - 1x03 - My Mount is Fierce!.mkv": { - "anime_season": "1", - "anime_title": "After War Gundam X", - "episode_number": "03", - "episode_title": "My Mount is Fierce!", - "file_extension": "mkv", - "file_name": "After War Gundam X - 1x03 - My Mount is Fierce!" - }, - "[HorribleSubs] The World God Only Knows 2 - 03 [720p].mkv": { - "anime_title": "The World God Only Knows 2", - "episode_number": "03", - "file_extension": "mkv", - "file_name": "[HorribleSubs] The World God Only Knows 2 - 03 [720p]", - "release_group": "HorribleSubs", - "video_resolution": "720p" - }, - "[FFF] Red Data Girl - 10v0 [29EA865B].mkv": { - "anime_title": "Red Data Girl", - "episode_number": "10", - "file_checksum": "29EA865B", - "file_extension": "mkv", - "file_name": "[FFF] Red Data Girl - 10v0 [29EA865B]", - "release_group": "FFF", - "release_version": "0" - }, - "[CMS] Magical☆Star Kanon 100% OVA[DVD][E9F43685].mkv": { - "anime_title": "Magical☆Star Kanon 100% OVA", - "anime_type": "OVA", - "file_checksum": "E9F43685", - "file_extension": "mkv", - "file_name": "[CMS] Magical☆Star Kanon 100% OVA[DVD][E9F43685]", - "release_group": "CMS", - "source": "DVD" - }, - "[Doremi].Ro-Kyu-Bu!.SS.01.[C1B5CE5D].mkv": { - "anime_title": "Ro-Kyu-Bu! SS", - "episode_number": "01", - "file_checksum": "C1B5CE5D", - "file_extension": "mkv", - "file_name": "[Doremi].Ro-Kyu-Bu!.SS.01.[C1B5CE5D]", - "release_group": "Doremi" - }, - "[Raizel] Persona 4 The Animation Episode 13 - A Stormy Summer Vacation Part 1 [BD_1080p_Dual_Audio_FLAC_Hi10p][8A45634B].mkv": { - "anime_title": "Persona 4 The Animation", - "audio_term": "FLAC", - "episode_number": "13", - "episode_title": "A Stormy Summer Vacation Part 1", - "file_checksum": "8A45634B", - "file_extension": "mkv", - "file_name": "[Raizel] Persona 4 The Animation Episode 13 - A Stormy Summer Vacation Part 1 [BD_1080p_Dual_Audio_FLAC_Hi10p][8A45634B]", - "release_group": "Raizel", - "source": "BD", - "video_resolution": "1080p", - "video_term": "Hi10p" - }, - "[R-R] Diebuster.EP1 (720p.Hi10p.AC3) [82E36A36].mkv": { - "anime_title": "Diebuster", - "audio_term": "AC3", - "episode_number": "1", - "file_checksum": "82E36A36", - "file_extension": "mkv", - "file_name": "[R-R] Diebuster.EP1 (720p.Hi10p.AC3) [82E36A36]", - "release_group": "R-R", - "video_resolution": "720p", - "video_term": "Hi10p" - }, - "[Rakuda].Gift.~eternal.rainbow~.01.dvd.h.264.vorbis.mkv": { - "anime_title": "Gift ~eternal rainbow~", - "audio_term": "vorbis", - "episode_number": "01", - "file_extension": "mkv", - "file_name": "[Rakuda].Gift.~eternal.rainbow~.01.dvd.h.264.vorbis", - "release_group": "Rakuda", - "source": "dvd", - "video_term": "h.264" - }, - "[Jumonji-Giri]_[Shinsen-Subs][ASF]_D.C.II_Da_Capo_II_Ep01_(a1fc58a7).mkv": { - "anime_title": "D.C.II Da Capo II", - "episode_number": "01", - "file_checksum": "a1fc58a7", - "file_extension": "mkv", - "file_name": "[Jumonji-Giri]_[Shinsen-Subs][ASF]_D.C.II_Da_Capo_II_Ep01_(a1fc58a7)", - "release_group": "Jumonji-Giri" - }, - "[52wy][SlamDunk][001][Jpn_Chs_Cht][x264_aac][DVDRip][7FE2C873].mkv": { - "anime_title": "SlamDunk", - "audio_term": "aac", - "episode_number": "001", - "file_checksum": "7FE2C873", - "file_extension": "mkv", - "file_name": "[52wy][SlamDunk][001][Jpn_Chs_Cht][x264_aac][DVDRip][7FE2C873]", - "release_group": "52wy", - "source": "DVDRip", - "video_term": "x264" - }, - "[Commie] Last Exile ~Fam, The Silver Wing~ - 13 [AFF9E530].mkv": { - "anime_title": "Last Exile ~Fam, The Silver Wing~", - "episode_number": "13", - "file_checksum": "AFF9E530", - "file_extension": "mkv", - "file_name": "[Commie] Last Exile ~Fam, The Silver Wing~ - 13 [AFF9E530]", - "release_group": "Commie" - }, - "[Hakugetsu&Speed&MGRT][Dragon_Ball_Z_Battle_of_Gods][BDRIP][BIG5][1280x720].mp4": { - "anime_title": "Dragon Ball Z Battle of Gods", - "file_extension": "mp4", - "file_name": "[Hakugetsu&Speed&MGRT][Dragon_Ball_Z_Battle_of_Gods][BDRIP][BIG5][1280x720]", - "release_group": "Hakugetsu&Speed&MGRT", - "source": "BDRIP", - "subtitles": "BIG5", - "video_resolution": "1280x720" - }, - "[Hakugetsu&MGRT][Evangelion 3.0 You Can (Not) Redo][480P][V0].mp4": { - "anime_title": "Evangelion 3.0 You Can (Not) Redo", - "file_extension": "mp4", - "file_name": "[Hakugetsu&MGRT][Evangelion 3.0 You Can (Not) Redo][480P][V0]", - "release_group": "Hakugetsu&MGRT", - "release_version": "0", - "video_resolution": "480P" - }, - "[UTW]_Fate_Zero_-_01_[BD][h264-720p_AC3][02A0491D].mkv": { - "anime_title": "Fate Zero", - "audio_term": "AC3", - "episode_number": "01", - "file_checksum": "02A0491D", - "file_extension": "mkv", - "file_name": "[UTW]_Fate_Zero_-_01_[BD][h264-720p_AC3][02A0491D]", - "release_group": "UTW", - "source": "BD", - "video_resolution": "720p", - "video_term": "h264" - }, - "[UTW-THORA] Evangelion 3.33 You Can (Not) Redo [BD][1080p,x264,flac][F2060CF5].mkv": { - "anime_title": "Evangelion 3.33 You Can (Not) Redo", - "audio_term": "flac", - "file_checksum": "F2060CF5", - "file_extension": "mkv", - "file_name": "[UTW-THORA] Evangelion 3.33 You Can (Not) Redo [BD][1080p,x264,flac][F2060CF5]", - "release_group": "UTW-THORA", - "source": "BD", - "video_resolution": "1080p", - "video_term": "x264" - }, - "Bakemonogatari - 01 (BD 1280x720 AVC AACx2).mp4": { - "anime_title": "Bakemonogatari", - "audio_term": "AACx2", - "episode_number": "01", - "file_extension": "mp4", - "file_name": "Bakemonogatari - 01 (BD 1280x720 AVC AACx2)", - "source": "BD", - "video_resolution": "1280x720", - "video_term": "AVC" - }, - "Evangelion The New Movie Q (BD 1280x720 AVC AACx2 [5.1+2.0]).mp4": { - "anime_title": "Evangelion The New Movie Q", - "anime_type": "Movie", - "audio_term": "AACx2", - "file_extension": "mp4", - "file_name": "Evangelion The New Movie Q (BD 1280x720 AVC AACx2 [5.1+2.0])", - "source": "BD", - "video_resolution": "1280x720", - "video_term": "AVC" - }, - "Howl's_Moving_Castle_(2004)_[1080p,BluRay,flac,dts,x264]_-_THORA v2.mkv": { - "anime_title": "Howl's Moving Castle", - "anime_year": "2004", - "audio_term": [ - "flac", - "dts" - ], - "file_extension": "mkv", - "file_name": "Howl's_Moving_Castle_(2004)_[1080p,BluRay,flac,dts,x264]_-_THORA v2", - "release_group": "THORA", - "release_version": "2", - "source": "BluRay", - "video_resolution": "1080p", - "video_term": "x264" - }, - "Kotonoha no Niwa (BD 1280x720 AVC AACx3 [5.1+2.0+2.0] Subx3).mp4": { - "anime_title": "Kotonoha no Niwa", - "audio_term": "AACx3", - "file_extension": "mp4", - "file_name": "Kotonoha no Niwa (BD 1280x720 AVC AACx3 [5.1+2.0+2.0] Subx3)", - "source": "BD", - "video_resolution": "1280x720", - "video_term": "AVC" - }, - "Queen's Blade Utsukushiki Toushi-tachi - OVA_01 (BD 1280x720 AVC AAC).mp4": { - "anime_title": "Queen's Blade Utsukushiki Toushi-tachi - OVA", - "anime_type": "OVA", - "audio_term": "AAC", - "episode_number": "01", - "file_extension": "mp4", - "file_name": "Queen's Blade Utsukushiki Toushi-tachi - OVA_01 (BD 1280x720 AVC AAC)", - "source": "BD", - "video_resolution": "1280x720", - "video_term": "AVC" - }, - "[FFF] Futsuu no Joshikousei ga [Locodol] Yatte Mita. - 01 [BAD09C76].mkv": { - "anime_title": "Futsuu no Joshikousei ga [Locodol] Yatte Mita.", - "episode_number": "01", - "file_checksum": "BAD09C76", - "file_extension": "mkv", - "file_name": "[FFF] Futsuu no Joshikousei ga [Locodol] Yatte Mita. - 01 [BAD09C76]", - "release_group": "FFF" - }, - "Vol.01": { - "file_name": "Vol.01", - "volume_number": "01" - }, - "Mary Bell (DVD) - 01v2 [h-b].mkv": { - "anime_title": "Mary Bell", - "episode_number": "01", - "file_extension": "mkv", - "file_name": "Mary Bell (DVD) - 01v2 [h-b]", - "release_group": "h-b", - "release_version": "2", - "source": "DVD" - }, - "Mary Bell (DVD) - 02 [h-b].mkv": { - "anime_title": "Mary Bell", - "episode_number": "02", - "file_extension": "mkv", - "file_name": "Mary Bell (DVD) - 02 [h-b]", - "release_group": "h-b", - "source": "DVD" - }, - "Attack on Titan - Episode 3 - A Dim Light Amid Despair / Humanity's Comeback, Part 1": { - "anime_title": "Attack on Titan", - "episode_number": "3", - "episode_title": "A Dim Light Amid Despair / Humanity's Comeback, Part 1", - "file_name": "Attack on Titan - Episode 3 - A Dim Light Amid Despair / Humanity's Comeback, Part 1" - }, - "The Irregular at Magic High School - S01E01- Enrollment Part I.mkv": { - "anime_season": "01", - "anime_title": "The Irregular at Magic High School", - "episode_number": "01", - "episode_title": "Enrollment Part I", - "file_extension": "mkv", - "file_name": "The Irregular at Magic High School - S01E01- Enrollment Part I" - }, - "[Triad]_Today_in_Class_5-2_-_04.avi": { - "anime_title": "Today in Class 5-2", - "episode_number": "04", - "file_extension": "avi", - "file_name": "[Triad]_Today_in_Class_5-2_-_04", - "release_group": "Triad" - }, - "[HorribleSubs] Tsukimonogatari - (01-04) [1080p].mkv": { - "anime_title": "Tsukimonogatari", - "episode_number": [ - "01", - "04" - ], - "file_extension": "mkv", - "file_name": "[HorribleSubs] Tsukimonogatari - (01-04) [1080p]", - "release_group": "HorribleSubs", - "video_resolution": "1080p" - }, - "[Coalgirls]_Bakemonogatari_OP4a_(1280x720_Blu-Ray_FLAC)_[327A2375].mkv": { - "anime_title": "Bakemonogatari OP", - "anime_type": "OP", - "audio_term": "FLAC", - "episode_number": "4a", - "file_checksum": "327A2375", - "file_extension": "mkv", - "file_name": "[Coalgirls]_Bakemonogatari_OP4a_(1280x720_Blu-Ray_FLAC)_[327A2375]", - "release_group": "Coalgirls", - "source": "Blu-Ray", - "video_resolution": "1280x720" - }, - "[Ruri]No.6 01 [720p][H264][A956075C].mkv": { - "anime_title": "No.6", - "episode_number": "01", - "file_checksum": "A956075C", - "file_extension": "mkv", - "file_name": "[Ruri]No.6 01 [720p][H264][A956075C]", - "release_group": "Ruri", - "video_resolution": "720p", - "video_term": "H264" - }, - "[CH] Sword Art Online Extra Edition Dual Audio [BD 480p][10bitH.264+Vorbis]": { - "anime_title": "Sword Art Online Extra Edition", - "audio_term": [ - "Dual Audio", - "Vorbis" - ], - "file_name": "[CH] Sword Art Online Extra Edition Dual Audio [BD 480p][10bitH.264+Vorbis]", - "release_group": "CH", - "source": "BD", - "video_resolution": "480p", - "video_term": [ - "H.264", - "10bit" - ] - }, - "Episode 14 Ore no Imouto ga Konnani Kawaii Wake ga Nai. (saison 2) VOSTFR": { - "anime_season": "2", - "anime_title": "Ore no Imouto ga Konnani Kawaii Wake ga Nai.", - "episode_number": "14", - "file_name": "Episode 14 Ore no Imouto ga Konnani Kawaii Wake ga Nai. (saison 2) VOSTFR", - "language": "VOSTFR" - }, - "[Zom-B] Machine-Doll wa Kizutsukanai - 01 - Facing ''Cannibal Candy'' I (kuroi, FFF remux) [B99C8DED].mkv": { - "anime_title": "Machine-Doll wa Kizutsukanai", - "episode_number": "01", - "episode_title": "Facing ''Cannibal Candy'' I", - "file_checksum": "B99C8DED", - "file_extension": "mkv", - "file_name": "[Zom-B] Machine-Doll wa Kizutsukanai - 01 - Facing ''Cannibal Candy'' I (kuroi, FFF remux) [B99C8DED]", - "release_information": "remux", - "release_group": "Zom-B" - }, - "[Yuurisan-Subs]_Darker_than_Black_-_Gemini_of_the_Meteor_-_01v2_[65274FDE].patch.7z": { - "anime_title": "Darker than Black - Gemini of the Meteor", - "episode_number": "01", - "file_checksum": "65274FDE", - "file_extension": "7z", - "file_name": "[Yuurisan-Subs]_Darker_than_Black_-_Gemini_of_the_Meteor_-_01v2_[65274FDE].patch", - "release_information": "patch", - "release_group": "Yuurisan-Subs", - "release_version": "2" - }, - "[Coalgirls]_Fate_Zero_OVA3.5_(1280x720_Blu-ray_FLAC)_[5F5AD026].mkv": { - "anime_title": "Fate Zero OVA", - "anime_type": "OVA", - "audio_term": "FLAC", - "episode_number": "3.5", - "file_checksum": "5F5AD026", - "file_extension": "mkv", - "file_name": "[Coalgirls]_Fate_Zero_OVA3.5_(1280x720_Blu-ray_FLAC)_[5F5AD026]", - "release_group": "Coalgirls", - "source": "Blu-ray", - "video_resolution": "1280x720" - }, - "[GrimRipper] Koi Kaze [Dual Audio] Ep01 (c13cefe0).mkv": { - "anime_title": "Koi Kaze", - "audio_term": "Dual Audio", - "episode_number": "01", - "file_checksum": "c13cefe0", - "file_extension": "mkv", - "file_name": "[GrimRipper] Koi Kaze [Dual Audio] Ep01 (c13cefe0)", - "release_group": "GrimRipper" - }, - "[HorribleSubs] Gintama - 111C [1080p].mkv": { - "anime_title": "Gintama", - "episode_number": "111C", - "file_extension": "mkv", - "file_name": "[HorribleSubs] Gintama - 111C [1080p]", - "release_group": "HorribleSubs", - "video_resolution": "1080p" - }, - "[Hatsuyuki]_Kuroko_no_Basuke_S3_-_01_(51)_[720p][10bit][619C57A0].mkv": { - "anime_title": "Kuroko no Basuke S3", - "episode_number": "01", - "episode_number_alt": "51", - "file_checksum": "619C57A0", - "file_extension": "mkv", - "file_name": "[Hatsuyuki]_Kuroko_no_Basuke_S3_-_01_(51)_[720p][10bit][619C57A0]", - "release_group": "Hatsuyuki", - "video_resolution": "720p", - "video_term": "10bit" - }, - "[Elysium]Sora.no.Woto.EP07.5(BD.720p.AAC)[C37580F8].mkv": { - "anime_title": "Sora no Woto", - "audio_term": "AAC", - "episode_number": "07.5", - "file_checksum": "C37580F8", - "file_extension": "mkv", - "file_name": "[Elysium]Sora.no.Woto.EP07.5(BD.720p.AAC)[C37580F8]", - "release_group": "Elysium", - "source": "BD", - "video_resolution": "720p" - }, - "[Zurako] Sora no Woto - 07.5 - Drinking Party - Fortress Battle (BD 1080p AAC) [F7DF16F7].mkv": { - "anime_title": "Sora no Woto", - "audio_term": "AAC", - "episode_number": "07.5", - "episode_title": "Drinking Party - Fortress Battle", - "file_checksum": "F7DF16F7", - "file_extension": "mkv", - "file_name": "[Zurako] Sora no Woto - 07.5 - Drinking Party - Fortress Battle (BD 1080p AAC) [F7DF16F7]", - "release_group": "Zurako", - "source": "BD", - "video_resolution": "1080p" - }, - "[Hiryuu] Maji de Watashi ni Koi Shinasai!! - 02 [720].mkv": { - "anime_title": "Maji de Watashi ni Koi Shinasai!!", - "episode_number": "02", - "file_extension": "mkv", - "file_name": "[Hiryuu] Maji de Watashi ni Koi Shinasai!! - 02 [720]", - "release_group": "Hiryuu", - "video_resolution": "720" - }, - "[Kira-Fansub] Uchuu no Stellvia ep 14 (BD H264 1280x960 24fps AAC) [06EE7355].mkv": { - "anime_title": "Uchuu no Stellvia", - "audio_term": "AAC", - "episode_number": "14", - "file_checksum": "06EE7355", - "file_extension": "mkv", - "file_name": "[Kira-Fansub] Uchuu no Stellvia ep 14 (BD H264 1280x960 24fps AAC) [06EE7355]", - "release_group": "Kira-Fansub", - "source": "BD", - "video_resolution": "1280x960", - "video_term": [ - "H264", - "24fps" - ] - }, - "[ANE] Yosuga no Sora - Ep01 Preview (Yorihime ver) [BDRip 1080p x264 FLAC].mkv": { - "anime_title": "Yosuga no Sora", - "anime_type": "Preview", - "audio_term": "FLAC", - "episode_number": "01", - "file_extension": "mkv", - "file_name": "[ANE] Yosuga no Sora - Ep01 Preview (Yorihime ver) [BDRip 1080p x264 FLAC]", - "release_group": "ANE", - "source": "BDRip", - "video_resolution": "1080p", - "video_term": "x264" - }, - "[DmonHiro] Oreshura #01v2 - The Start Of High School Life Is A War Zone [BD, 720p] [211375E6].mkv": { - "anime_title": "Oreshura", - "episode_number": "01", - "episode_title": "The Start Of High School Life Is A War Zone", - "file_extension": "mkv", - "file_checksum": "211375E6", - "file_name": "[DmonHiro] Oreshura #01v2 - The Start Of High School Life Is A War Zone [BD, 720p] [211375E6]", - "release_group": "DmonHiro", - "release_version": "2", - "source": "BD", - "video_resolution": "720p" - }, - "[모에-Raws] Abarenbou Rikishi!! Matsutarou #04 (ABC 1280x720 x264 AAC).mp4": { - "anime_title": "Abarenbou Rikishi!! Matsutarou", - "audio_term": "AAC", - "episode_number": "04", - "file_extension": "mp4", - "file_name": "[모에-Raws] Abarenbou Rikishi!! Matsutarou #04 (ABC 1280x720 x264 AAC)", - "release_group": "모에-Raws", - "video_resolution": "1280x720", - "video_term": "x264" - }, - "[바카-Raws] Nekomonogatari (Black) #1-4 (BS11 1280x720 x264 AAC).mp4": { - "anime_title": "Nekomonogatari (Black)", - "audio_term": "AAC", - "episode_number": [ - "1", - "4" - ], - "file_extension": "mp4", - "file_name": "[바카-Raws] Nekomonogatari (Black) #1-4 (BS11 1280x720 x264 AAC)", - "release_group": "바카-Raws", - "video_resolution": "1280x720", - "video_term": "x264" - }, - "[NinjaPanda] Tiger & Bunny #01 All's well that ends well. (v3, 1080p Hi10P, DA AAC) [4A9AB85F].mkv": { - "anime_title": "Tiger & Bunny", - "audio_term": "AAC", - "episode_number": "01", - "episode_title": "All's well that ends well.", - "file_checksum": "4A9AB85F", - "file_extension": "mkv", - "file_name": "[NinjaPanda] Tiger & Bunny #01 All's well that ends well. (v3, 1080p Hi10P, DA AAC) [4A9AB85F]", - "release_group": "NinjaPanda", - "release_version": "3", - "video_resolution": "1080p", - "video_term": "Hi10P" - }, - "[FFF] Seirei Tsukai no Blade Dance - SP01 [BD][720p-AAC][F1FF8588].mkv": { - "anime_title": "Seirei Tsukai no Blade Dance - SP", - "anime_type": "SP", - "audio_term": "AAC", - "episode_number": "01", - "file_checksum": "F1FF8588", - "file_extension": "mkv", - "file_name": "[FFF] Seirei Tsukai no Blade Dance - SP01 [BD][720p-AAC][F1FF8588]", - "release_group": "FFF", - "source": "BD", - "video_resolution": "720p" - }, - "[SubDESU-H] Swing out Sisters Complete Version (720p x264 8bit AC3) [3ABD57E6].mp4": { - "anime_title": "Swing out Sisters", - "audio_term": "AC3", - "file_checksum": "3ABD57E6", - "file_extension": "mp4", - "file_name": "[SubDESU-H] Swing out Sisters Complete Version (720p x264 8bit AC3) [3ABD57E6]", - "release_group": "SubDESU-H", - "release_information": "Complete", - "video_resolution": "720p", - "video_term": [ - "x264", - "8bit" - ] - }, - "Cyborg 009 (1968) [TSHS] episode 06 [30C15D62].mp4": { - "anime_title": "Cyborg 009", - "anime_year": "1968", - "episode_number": "06", - "file_checksum": "30C15D62", - "file_extension": "mp4", - "file_name": "Cyborg 009 (1968) [TSHS] episode 06 [30C15D62]", - "release_group": "TSHS" - }, - "[Hatsuyuki] Dragon Ball Kai (2014) - 002 (100) [1280x720][DD66AFB7].mkv": { - "anime_title": "Dragon Ball Kai", - "anime_year": "2014", - "episode_number": "002", - "episode_number_alt": "100", - "file_checksum": "DD66AFB7", - "file_extension": "mkv", - "file_name": "[Hatsuyuki] Dragon Ball Kai (2014) - 002 (100) [1280x720][DD66AFB7]", - "release_group": "Hatsuyuki", - "video_resolution": "1280x720" - }, - "[Deep] Tegami Bachi (REVERSE) - Letter Bee - 29 (04) [5203142B].mkv": { - "anime_title": "Tegami Bachi (REVERSE) - Letter Bee", - "episode_number": "04", - "episode_number_alt": "29", - "file_checksum": "5203142B", - "file_extension": "mkv", - "file_name": "[Deep] Tegami Bachi (REVERSE) - Letter Bee - 29 (04) [5203142B]", - "release_group": "Deep" - }, - "[FFF] Love Live! The School Idol Movie - PV [D1A15D2C].mkv": { - "anime_title": "Love Live! The School Idol Movie - PV", - "anime_type": [ - "Movie", - "PV" - ], - "file_checksum": "D1A15D2C", - "file_extension": "mkv", - "file_name": "[FFF] Love Live! The School Idol Movie - PV [D1A15D2C]", - "release_group": "FFF" - }, - "[Nishi-Taku] Tamayura ~graduation photo~ Movie Part 1 [BD][720p][98965607].mkv": { - "anime_title": "Tamayura ~graduation photo~ Movie Part 1", - "anime_type": "Movie", - "file_checksum": "98965607", - "file_extension": "mkv", - "file_name": "[Nishi-Taku] Tamayura ~graduation photo~ Movie Part 1 [BD][720p][98965607]", - "release_group": "Nishi-Taku", - "source": "BD", - "video_resolution": "720p" - }, - "[LRL] 1001 Nights (1998) [DVD]": { - "anime_title": "1001 Nights", - "anime_year": "1998", - "file_name": "[LRL] 1001 Nights (1998) [DVD]", - "release_group": "LRL", - "source": "DVD" - }, - "[TardRaws] 0 [640x360].mkv": { - "anime_title": "0", - "file_extension": "mkv", - "file_name": "[TardRaws] 0 [640x360]", - "release_group": "TardRaws", - "video_resolution": "640x360" - }, - "[FB] Crayon Shin-Chan Movie 2 The Secret of Buri Buri Kingdom [DivX5 AC3] 1994 [852X480] V2.avi": { - "anime_title": "Crayon Shin-Chan Movie 2 The Secret of Buri Buri Kingdom", - "anime_type": "Movie", - "anime_year": "1994", - "audio_term": "AC3", - "file_extension": "avi", - "file_name": "[FB] Crayon Shin-Chan Movie 2 The Secret of Buri Buri Kingdom [DivX5 AC3] 1994 [852X480] V2", - "release_group": "FB", - "release_version": "2", - "video_resolution": "852X480", - "video_term": "DivX5" - }, - "[Hatsuyuki-Kaitou]_Fairy_Tail_2_-_52_(227)_[720p][10bit][9DF6B8D5].mkv": { - "anime_title": "Fairy Tail 2", - "episode_number": "52", - "episode_number_alt": "227", - "file_checksum": "9DF6B8D5", - "file_extension": "mkv", - "file_name": "[Hatsuyuki-Kaitou]_Fairy_Tail_2_-_52_(227)_[720p][10bit][9DF6B8D5]", - "release_group": "Hatsuyuki-Kaitou", - "video_resolution": "720p", - "video_term": "10bit" - }, - "[FBI] Baby Princess 3D Paradise Love 01v0 [BD][720p-AAC][457CC066].mkv": { - "anime_title": "Baby Princess 3D Paradise Love", - "audio_term": "AAC", - "episode_number": "01", - "file_checksum": "457CC066", - "file_extension": "mkv", - "file_name": "[FBI] Baby Princess 3D Paradise Love 01v0 [BD][720p-AAC][457CC066]", - "release_group": "FBI", - "release_version": "0", - "source": "BD", - "video_resolution": "720p" - }, - "[Shinsen-Subs]_Macross_Frontier_-_01b_[4D5EC315].avi": { - "anime_title": "Macross Frontier", - "episode_number": "01b", - "file_checksum": "4D5EC315", - "file_extension": "avi", - "file_name": "[Shinsen-Subs]_Macross_Frontier_-_01b_[4D5EC315]", - "release_group": "Shinsen-Subs" - }, - "[NamaeNai] Hidamari Sketch x365 - 09a (DVD) [49874745].mkv": { - "anime_title": "Hidamari Sketch x365", - "episode_number": "09a", - "file_checksum": "49874745", - "file_extension": "mkv", - "file_name": "[NamaeNai] Hidamari Sketch x365 - 09a (DVD) [49874745]", - "release_group": "NamaeNai", - "source": "DVD" - }, - "[KLF]_D.Gray-man_04V2.avi": { - "anime_title": "D.Gray-man", - "episode_number": "04", - "file_extension": "avi", - "file_name": "[KLF]_D.Gray-man_04V2", - "release_group": "KLF", - "release_version": "2" - }, - "[FaggotryRaws] Bakuman - 01 (NHK E 848x480).mkv": { - "anime_title": "Bakuman", - "episode_number": "01", - "file_extension": "mkv", - "file_name": "[FaggotryRaws] Bakuman - 01 (NHK E 848x480)", - "release_group": "FaggotryRaws", - "video_resolution": "848x480" - }, - "[5F] RWBY 14 Forever Fall Part 2 pt-BR.mp4": { - "anime_title": "RWBY", - "episode_number": "14", - "episode_title": "Forever Fall Part 2", - "file_extension": "mp4", - "file_name": "[5F] RWBY 14 Forever Fall Part 2 pt-BR", - "language": "pt-BR", - "release_group": "5F" - }, - "Dragon.Ball.KAI.-.01.-.1080p.BluRay.x264.DHD.mkv": { - "anime_title": "Dragon Ball KAI", - "episode_number": "01", - "episode_title": "DHD", - "file_extension": "mkv", - "file_name": "Dragon.Ball.KAI.-.01.-.1080p.BluRay.x264.DHD", - "source": "BluRay", - "video_resolution": "1080p", - "video_term": "x264" - }, - "[AnimeRG] Ushio to Tora (TV) - 02 [720p] [Xcelent].mkv": { - "anime_title": "Ushio to Tora (TV)", - "anime_type": "TV", - "episode_number": "02", - "file_extension": "mkv", - "file_name": "[AnimeRG] Ushio to Tora (TV) - 02 [720p] [Xcelent]", - "release_group": "AnimeRG", - "video_resolution": "720p" - }, - "[Anime": { - "file_name": "[Anime" - }, - "Gekkan Shoujo Nozaki-kun [HorribleSubs] (1080p)": { - "anime_title": "Gekkan Shoujo Nozaki-kun", - "file_name": "Gekkan Shoujo Nozaki-kun [HorribleSubs] (1080p)", - "release_group": "HorribleSubs", - "video_resolution": "1080p" - }, - "[EveTaku] AKB0048 Vol.03 - Making of Kibou-ni-Tsuite Music Video (BDRip 1080i H.264-Hi10P FLAC)[C09462E2]": { - "anime_title": "AKB0048", - "audio_term": "FLAC", - "file_checksum": "C09462E2", - "file_name": "[EveTaku] AKB0048 Vol.03 - Making of Kibou-ni-Tsuite Music Video (BDRip 1080i H.264-Hi10P FLAC)[C09462E2]", - "release_group": "EveTaku", - "source": "BDRip", - "video_term": [ - "H.264", - "Hi10P" - ], - "volume_number": "03" - }, - "[DmonHiro] Magi - The Labyrinth Of Magic - Vol.1v2 (BD, 720p)": { - "anime_title": "Magi - The Labyrinth Of Magic", - "file_name": "[DmonHiro] Magi - The Labyrinth Of Magic - Vol.1v2 (BD, 720p)", - "release_group": "DmonHiro", - "release_version": "2", - "source": "BD", - "video_resolution": "720p", - "volume_number": "1" - }, - "[tlacatlc6] Natsume Yuujinchou Shi Vol. 1v2 & Vol. 2 (BD 1280x720 x264 AAC)": { - "anime_title": "Natsume Yuujinchou Shi", - "audio_term": "AAC", - "file_name": "[tlacatlc6] Natsume Yuujinchou Shi Vol. 1v2 & Vol. 2 (BD 1280x720 x264 AAC)", - "release_group": "tlacatlc6", - "release_version": "2", - "source": "BD", - "video_term": "x264", - "video_resolution": "1280x720", - "volume_number": [ - "1", - "2" - ] - }, - "[Tsundere] Hyouka - 01v2-04 [BDRip h264 1920x1080 10bit FLAC]": { - "anime_title": "Hyouka", - "audio_term": "FLAC", - "episode_number": [ - "01", - "04" - ], - "file_name": "[Tsundere] Hyouka - 01v2-04 [BDRip h264 1920x1080 10bit FLAC]", - "release_group": "Tsundere", - "release_version": "2", - "source": "BDRip", - "video_resolution": "1920x1080", - "video_term": [ - "h264", - "10bit" - ] - }, - "[Doki] Nogizaka Haruka no Himitsu - Purezza - 01v2-03v2 (1280x720 h264 AAC)": { - "anime_title": "Nogizaka Haruka no Himitsu - Purezza", - "audio_term": "AAC", - "episode_number": [ - "01", - "03" - ], - "file_name": "[Doki] Nogizaka Haruka no Himitsu - Purezza - 01v2-03v2 (1280x720 h264 AAC)", - "release_group": "Doki", - "release_version": [ - "2", - "2" - ], - "video_resolution": "1280x720", - "video_term": "h264" - }, - "Fairy Tail - S06E32 - Tartaros Arc Iron Fist of the Fire Dragon [Episode 83]": { - "anime_season": "06", - "anime_title": "Fairy Tail", - "episode_number": "32", - "episode_number_alt": "83", - "episode_title": "Tartaros Arc Iron Fist of the Fire Dragon", - "file_name": "Fairy Tail - S06E32 - Tartaros Arc Iron Fist of the Fire Dragon [Episode 83]" - }, - "Noragami - S02E06 - What Must Be Done [Episode 6]": { - "anime_season": "02", - "anime_title": "Noragami", - "episode_number": "6", - "episode_title": "What Must Be Done", - "file_name": "Noragami - S02E06 - What Must Be Done [Episode 6]" - }, - "[Harunatsu] Classroom Crisis - Vol.1 [BD 720p-AAC]": { - "anime_title": "Classroom Crisis", - "audio_term": "AAC", - "file_name": "[Harunatsu] Classroom Crisis - Vol.1 [BD 720p-AAC]", - "release_group": "Harunatsu", - "source": "BD", - "video_resolution": "720p", - "volume_number": "1" - }, - "[GS] Classroom Crisis Vol.1&2 (BD 1080p 10bit FLAC)": { - "anime_title": "Classroom Crisis", - "audio_term": "FLAC", - "file_name": "[GS] Classroom Crisis Vol.1&2 (BD 1080p 10bit FLAC)", - "release_group": "GS", - "source": "BD", - "video_resolution": "1080p", - "video_term": "10bit", - "volume_number": [ - "1", - "2" - ] - }, - "[HorribleSubs] Momokuri - 01+02 [720p]": { - "anime_title": "Momokuri", - "episode_number": [ - "01", - "02" - ], - "file_name": "[HorribleSubs] Momokuri - 01+02 [720p]", - "release_group": "HorribleSubs", - "video_resolution": "720p" - }, - "[Infantjedi] Norn9 - Norn + Nonetto - 12": { - "anime_title": "Norn9 - Norn + Nonetto", - "episode_number": "12", - "file_name": "[Infantjedi] Norn9 - Norn + Nonetto - 12", - "release_group": "Infantjedi" - }, - "Dragon_Ball_Z_Movies_8_&_10_[720p,BluRay,DTS,x264]_-_THORA": { - "anime_title": "Dragon Ball Z Movies", - "audio_term": "DTS", - "episode_number": [ - "8", - "10" - ], - "file_name": "Dragon_Ball_Z_Movies_8_&_10_[720p,BluRay,DTS,x264]_-_THORA", - "release_group": "THORA", - "source": "BluRay", - "video_resolution": "720p", - "video_term": "x264" - }, - "[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD].mkv": { - "anime_title": "Toradora!", - "anime_year": "2008", - "audio_term": "FLAC", - "episode_number": "01", - "episode_title": "Tiger and Dragon", - "file_checksum": "1234ABCD", - "file_extension": "mkv", - "file_name": "[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD]", - "release_group": "TaigaSubs", - "release_version": "2", - "video_resolution": "1280x720", - "video_term": "H.264" - } + "[ANBU]_Princess_Lover!_-_01_[2048A39A].mkv": { + "anime_title": "Princess Lover!", + "episode_number": "01", + "file_checksum": "2048A39A", + "file_extension": "mkv", + "file_name": "[ANBU]_Princess_Lover!_-_01_[2048A39A]", + "release_group": "ANBU" + }, + "[ANBU-Menclave]_Canaan_-_01_[1024x576_H.264_AAC][12F00E89].mkv": { + "anime_title": "Canaan", + "audio_term": "AAC", + "episode_number": "01", + "file_checksum": "12F00E89", + "file_extension": "mkv", + "file_name": "[ANBU-Menclave]_Canaan_-_01_[1024x576_H.264_AAC][12F00E89]", + "release_group": "ANBU-Menclave", + "video_resolution": "1024x576", + "video_term": "H.264" + }, + "[ANBU-umai]_Haiyoru!_Nyaru-Ani_[596DD8E6].mkv": { + "anime_title": "Haiyoru! Nyaru-Ani", + "file_checksum": "596DD8E6", + "file_extension": "mkv", + "file_name": "[ANBU-umai]_Haiyoru!_Nyaru-Ani_[596DD8E6]", + "release_group": "ANBU-umai" + }, + "[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director's Cut) [988DB090].mkv": { + "anime_title": "Seikon no Qwaser", + "episode_number": "13", + "file_checksum": "988DB090", + "file_extension": "mkv", + "file_name": "[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director's Cut) [988DB090]", + "other": "Uncensored", + "release_group": "chibi-Doki", + "release_version": "0" + }, + "[Chihiro]_Kono_Aozora_ni_Yakusoku_Wo_10_v2_[DVD][h264][C83D206B].mkv": { + "anime_title": "Kono Aozora ni Yakusoku Wo", + "episode_number": "10", + "file_checksum": "C83D206B", + "file_extension": "mkv", + "file_name": "[Chihiro]_Kono_Aozora_ni_Yakusoku_Wo_10_v2_[DVD][h264][C83D206B]", + "release_group": "Chihiro", + "release_version": "2", + "source": "DVD", + "video_term": "h264" + }, + "[Coalgirls]_Toradora_ED2_(704x480_DVD_AAC)_[3B65D1E6].mkv": { + "anime_title": "Toradora ED", + "anime_type": "ED", + "audio_term": "AAC", + "episode_number": "2", + "file_checksum": "3B65D1E6", + "file_extension": "mkv", + "file_name": "[Coalgirls]_Toradora_ED2_(704x480_DVD_AAC)_[3B65D1E6]", + "release_group": "Coalgirls", + "source": "DVD", + "video_resolution": "704x480" + }, + "[Conclave-Mendoi]_Mobile_Suit_Gundam_00_S2_-_01v2_[1280x720_H.264_AAC][4863FBE8].mkv": { + "anime_title": "Mobile Suit Gundam 00 S2", + "audio_term": "AAC", + "episode_number": "01", + "file_checksum": "4863FBE8", + "file_extension": "mkv", + "file_name": "[Conclave-Mendoi]_Mobile_Suit_Gundam_00_S2_-_01v2_[1280x720_H.264_AAC][4863FBE8]", + "release_group": "Conclave-Mendoi", + "release_version": "2", + "video_resolution": "1280x720", + "video_term": "H.264" + }, + "[DB]_Bleach_225_[C63D149C].avi": { + "anime_title": "Bleach", + "episode_number": "225", + "file_checksum": "C63D149C", + "file_extension": "avi", + "file_name": "[DB]_Bleach_225_[C63D149C]", + "release_group": "DB" + }, + "[Frostii]_Nodame_Cantabile_Finale_-_00_[73AD0735].mkv": { + "anime_title": "Nodame Cantabile Finale", + "episode_number": "00", + "file_checksum": "73AD0735", + "file_extension": "mkv", + "file_name": "[Frostii]_Nodame_Cantabile_Finale_-_00_[73AD0735]", + "release_group": "Frostii" + }, + "[Hard-Boiled FS]FullMetalAlchemist_09.rmvb": { + "anime_title": "FullMetalAlchemist", + "episode_number": "09", + "file_extension": "rmvb", + "file_name": "[Hard-Boiled FS]FullMetalAlchemist_09", + "release_group": "Hard-Boiled FS" + }, + "[HorribleSubs] Tower of Druaga - Sword of Uruk - 04 [480p].mkv": { + "anime_title": "Tower of Druaga - Sword of Uruk", + "episode_number": "04", + "file_extension": "mkv", + "file_name": "[HorribleSubs] Tower of Druaga - Sword of Uruk - 04 [480p]", + "release_group": "HorribleSubs", + "video_resolution": "480p" + }, + "[KAF-TEAM]_One_Piece_Movie_9_vostfr_HD.avi": { + "anime_title": "One Piece Movie 9", + "anime_type": "Movie", + "file_extension": "avi", + "file_name": "[KAF-TEAM]_One_Piece_Movie_9_vostfr_HD", + "language": "vostfr", + "release_group": "KAF-TEAM", + "video_term": "HD" + }, + "[kito].Nazca.episode.01.DVDRip.[x264.He-aac.{Jpn}+Sub{Fr}].mkv": { + "anime_title": "Nazca", + "episode_number": "01", + "file_extension": "mkv", + "file_name": "[kito].Nazca.episode.01.DVDRip.[x264.He-aac.{Jpn}+Sub{Fr}]", + "release_group": "kito", + "source": "DVDRip", + "video_term": "x264" + }, + "[Lambda-Delta]_Umineko_no_Naku_Koro_ni_-_11_[848x480_H.264_AAC][943106AD].mkv": { + "anime_title": "Umineko no Naku Koro ni", + "audio_term": "AAC", + "episode_number": "11", + "file_checksum": "943106AD", + "file_extension": "mkv", + "file_name": "[Lambda-Delta]_Umineko_no_Naku_Koro_ni_-_11_[848x480_H.264_AAC][943106AD]", + "release_group": "Lambda-Delta", + "video_resolution": "848x480", + "video_term": "H.264" + }, + "[SS]_Kemono_no_Souja_Erin_-_12_(1280x720_h264)_[0F5F884F].mkv": { + "anime_title": "Kemono no Souja Erin", + "episode_number": "12", + "file_checksum": "0F5F884F", + "file_extension": "mkv", + "file_name": "[SS]_Kemono_no_Souja_Erin_-_12_(1280x720_h264)_[0F5F884F]", + "release_group": "SS", + "video_resolution": "1280x720", + "video_term": "h264" + }, + "[Taka]_Fullmetal_Alchemist_(2009)_04_[720p][40F2A957].mp4": { + "anime_title": "Fullmetal Alchemist", + "anime_year": "2009", + "episode_number": "04", + "file_checksum": "40F2A957", + "file_extension": "mp4", + "file_name": "[Taka]_Fullmetal_Alchemist_(2009)_04_[720p][40F2A957]", + "release_group": "Taka", + "video_resolution": "720p" + }, + "[UTW-TMD]_Summer_Wars_[BD][h264-720p][TrueHD5.1][9F311DAB].mkv": { + "anime_title": "Summer Wars", + "audio_term": "TrueHD5.1", + "file_checksum": "9F311DAB", + "file_extension": "mkv", + "file_name": "[UTW-TMD]_Summer_Wars_[BD][h264-720p][TrueHD5.1][9F311DAB]", + "release_group": "UTW-TMD", + "source": "BD", + "video_resolution": "720p", + "video_term": "h264" + }, + "[ValdikSS]_First_Squad_The_Morment_Of_Truth_[720x576_h264_dvdscr_eng_hardsub].mkv": { + "anime_title": "First Squad The Morment Of Truth", + "file_extension": "mkv", + "file_name": "[ValdikSS]_First_Squad_The_Morment_Of_Truth_[720x576_h264_dvdscr_eng_hardsub]", + "language": "eng", + "release_group": "ValdikSS", + "subtitles": "hardsub", + "video_resolution": "720x576", + "video_term": "h264" + }, + "Evangelion_1.11_You_Are_(Not)_Alone_(2009)_[1080p,BluRay,x264,DTS-ES]_-_THORA.mkv": { + "anime_title": "Evangelion 1.11 You Are (Not) Alone", + "anime_year": "2009", + "audio_term": "DTS-ES", + "file_extension": "mkv", + "file_name": "Evangelion_1.11_You_Are_(Not)_Alone_(2009)_[1080p,BluRay,x264,DTS-ES]_-_THORA", + "release_group": "THORA", + "source": "BluRay", + "video_resolution": "1080p", + "video_term": "x264" + }, + "Evangelion_1.11_You_Are_(Not)_Alone_[1080p,BluRay,x264,DTS-ES]_-_THORA.mkv": { + "anime_title": "Evangelion 1.11 You Are (Not) Alone", + "audio_term": "DTS-ES", + "file_extension": "mkv", + "file_name": "Evangelion_1.11_You_Are_(Not)_Alone_[1080p,BluRay,x264,DTS-ES]_-_THORA", + "release_group": "THORA", + "source": "BluRay", + "video_resolution": "1080p", + "video_term": "x264" + }, + "Eve no Jikan 2 [88F4F7F0].mkv": { + "anime_title": "Eve no Jikan", + "episode_number": "2", + "file_checksum": "88F4F7F0", + "file_extension": "mkv", + "file_name": "Eve no Jikan 2 [88F4F7F0]" + }, + "Gin'iro_no_Kami_no_Agito_(2006)_[1080p,BluRay,x264,DTS]_-_THORA.mkv": { + "anime_title": "Gin'iro no Kami no Agito", + "anime_year": "2006", + "audio_term": "DTS", + "file_extension": "mkv", + "file_name": "Gin'iro_no_Kami_no_Agito_(2006)_[1080p,BluRay,x264,DTS]_-_THORA", + "release_group": "THORA", + "source": "BluRay", + "video_resolution": "1080p", + "video_term": "x264" + }, + "Magical Girl Lyrical Nanoha A's - 01.DVD[H264.AAC][DGz][7A8A7769].mkv": { + "anime_title": "Magical Girl Lyrical Nanoha A's", + "audio_term": "AAC", + "episode_number": "01", + "file_checksum": "7A8A7769", + "file_extension": "mkv", + "file_name": "Magical Girl Lyrical Nanoha A's - 01.DVD[H264.AAC][DGz][7A8A7769]", + "release_group": "DGz", + "source": "DVD", + "video_term": "H264" + }, + "Mobile_Suit_Gundam_00_Season_2_Ep07_A_Reunion_and_a_Parting_[1080p,BluRay,x264]_-_THORA.mkv": { + "anime_season": "2", + "anime_title": "Mobile Suit Gundam 00", + "episode_number": "07", + "episode_title": "A Reunion and a Parting", + "file_extension": "mkv", + "file_name": "Mobile_Suit_Gundam_00_Season_2_Ep07_A_Reunion_and_a_Parting_[1080p,BluRay,x264]_-_THORA", + "release_group": "THORA", + "source": "BluRay", + "video_resolution": "1080p", + "video_term": "x264" + }, + "ponyo_on_the_cliff_by_the_sea[h264.dts][niizk].mkv": { + "anime_title": "ponyo on the cliff by the sea", + "audio_term": "dts", + "file_extension": "mkv", + "file_name": "ponyo_on_the_cliff_by_the_sea[h264.dts][niizk]", + "release_group": "niizk", + "video_term": "h264" + }, + "[Seto_Otaku]_AIKa_ZERO_OVA_-_01_[BD][1920x1080_H264-Flac][6730D40A].mkv": { + "anime_title": "AIKa ZERO OVA", + "anime_type": "OVA", + "audio_term": "Flac", + "episode_number": "01", + "file_checksum": "6730D40A", + "file_extension": "mkv", + "file_name": "[Seto_Otaku]_AIKa_ZERO_OVA_-_01_[BD][1920x1080_H264-Flac][6730D40A]", + "release_group": "Seto_Otaku", + "source": "BD", + "video_resolution": "1920x1080", + "video_term": "H264" + }, + "[a4e]R.O.D_the_TV_01[divx5.2.1].mkv": { + "anime_title": "R.O.D the TV", + "anime_type": "TV", + "episode_number": "01", + "file_extension": "mkv", + "file_name": "[a4e]R.O.D_the_TV_01[divx5.2.1]", + "release_group": "a4e" + }, + "Ghost_in_the_Shell_Stand_Alone_Complex_2nd_GIG_Ep05v2_EXCAVATION_[720p,HDTV,x264,AAC_5.1]_-_THORA.mkv": { + "anime_title": "Ghost in the Shell Stand Alone Complex 2nd GIG", + "audio_term": [ + "AAC", + "5.1" + ], + "episode_number": "05", + "episode_title": "EXCAVATION", + "file_extension": "mkv", + "file_name": "Ghost_in_the_Shell_Stand_Alone_Complex_2nd_GIG_Ep05v2_EXCAVATION_[720p,HDTV,x264,AAC_5.1]_-_THORA", + "release_group": "THORA", + "release_version": "2", + "source": "HDTV", + "video_resolution": "720p", + "video_term": "x264" + }, + "Ghost_in_the_Shell_Stand_Alone_Complex_2nd_GIG_Ep06_Pu239_[720p,HDTV,x264,AAC_5.1]_-_THORA.mkv": { + "anime_title": "Ghost in the Shell Stand Alone Complex 2nd GIG", + "audio_term": [ + "AAC", + "5.1" + ], + "episode_number": "06", + "episode_title": "Pu239", + "file_extension": "mkv", + "file_name": "Ghost_in_the_Shell_Stand_Alone_Complex_2nd_GIG_Ep06_Pu239_[720p,HDTV,x264,AAC_5.1]_-_THORA", + "release_group": "THORA", + "source": "HDTV", + "video_resolution": "720p", + "video_term": "x264" + }, + "Fate_Stay_Night_Ep05_The_Two_Magi_Part1_[720p,BluRay,x264]_-_THORA.mkv": { + "anime_title": "Fate Stay Night", + "episode_number": "05", + "episode_title": "The Two Magi Part1", + "file_extension": "mkv", + "file_name": "Fate_Stay_Night_Ep05_The_Two_Magi_Part1_[720p,BluRay,x264]_-_THORA", + "release_group": "THORA", + "source": "BluRay", + "video_resolution": "720p", + "video_term": "x264" + }, + "[RaX]Mezzo(DSA)_-_05_-_[x264_ogg]_[585d9971].mkv": { + "anime_title": "Mezzo(DSA)", + "audio_term": "ogg", + "episode_number": "05", + "file_checksum": "585d9971", + "file_extension": "mkv", + "file_name": "[RaX]Mezzo(DSA)_-_05_-_[x264_ogg]_[585d9971]", + "release_group": "RaX", + "video_term": "x264" + }, + "[AKH-SWE]_Fullmetal_Alchemist_(2009)_02v2_[H.264.AAC][7B2C5E8B].mkv": { + "anime_title": "Fullmetal Alchemist", + "anime_year": "2009", + "audio_term": "AAC", + "episode_number": "02", + "file_checksum": "7B2C5E8B", + "file_extension": "mkv", + "file_name": "[AKH-SWE]_Fullmetal_Alchemist_(2009)_02v2_[H.264.AAC][7B2C5E8B]", + "release_group": "AKH-SWE", + "release_version": "2", + "video_term": "H.264" + }, + "[FuktLogik][Sayonara_Zetsubou_Sensei][01][DVDRip][x264_AC3].mkv": { + "anime_title": "Sayonara Zetsubou Sensei", + "audio_term": "AC3", + "episode_number": "01", + "file_extension": "mkv", + "file_name": "[FuktLogik][Sayonara_Zetsubou_Sensei][01][DVDRip][x264_AC3]", + "release_group": "FuktLogik", + "source": "DVDRip", + "video_term": "x264" + }, + "[Darksoul-Subs] Tatakau Shisho - The Book of Bantorra [848x480 XVID_MP3].mkv": { + "anime_title": "Tatakau Shisho - The Book of Bantorra", + "audio_term": "MP3", + "file_extension": "mkv", + "file_name": "[Darksoul-Subs] Tatakau Shisho - The Book of Bantorra [848x480 XVID_MP3]", + "release_group": "Darksoul-Subs", + "video_resolution": "848x480", + "video_term": "XVID" + }, + "[ACX]Neon_Genesis_Evangelion_-_Platinum_-_06_-_Showdown_in_Tokyo_3_[SaintDeath]_[CBDB8577].mkv": { + "anime_title": "Neon Genesis Evangelion - Platinum", + "episode_number": "06", + "episode_title": "Showdown in Tokyo 3", + "file_checksum": "CBDB8577", + "file_extension": "mkv", + "file_name": "[ACX]Neon_Genesis_Evangelion_-_Platinum_-_06_-_Showdown_in_Tokyo_3_[SaintDeath]_[CBDB8577]", + "release_group": "ACX" + }, + "[Himatsubushi]_Sora_no_Woto_-_01_-_H264_-_720p_-_E83AD672.mkv": { + "anime_title": "Sora no Woto", + "episode_number": "01", + "file_checksum": "E83AD672", + "file_extension": "mkv", + "file_name": "[Himatsubushi]_Sora_no_Woto_-_01_-_H264_-_720p_-_E83AD672", + "release_group": "Himatsubushi", + "video_resolution": "720p", + "video_term": "H264" + }, + "[EroGaKi-Team]_Nurse_Witch_Komugi-chan_Magikarte_02.5_[902BB314].mkv": { + "anime_title": "Nurse Witch Komugi-chan Magikarte", + "episode_number": "02.5", + "file_checksum": "902BB314", + "file_extension": "mkv", + "file_name": "[EroGaKi-Team]_Nurse_Witch_Komugi-chan_Magikarte_02.5_[902BB314]", + "release_group": "EroGaKi-Team" + }, + "Ookiku Furikabutte S2 - 09 (Central Anime) [BD841253].mkv": { + "anime_title": "Ookiku Furikabutte S2", + "episode_number": "09", + "file_checksum": "BD841253", + "file_extension": "mkv", + "file_name": "Ookiku Furikabutte S2 - 09 (Central Anime) [BD841253]", + "release_group": "Central Anime" + }, + "[HorribleSubs] HEROMAN - 10_(XviD_AnimeSenshi).mkv": { + "anime_title": "HEROMAN", + "episode_number": "10", + "file_extension": "mkv", + "file_name": "[HorribleSubs] HEROMAN - 10_(XviD_AnimeSenshi)", + "release_group": "HorribleSubs", + "video_term": "XviD" + }, + "Detective Conan - 316-317 [DCTP][2411959B].mkv": { + "anime_title": "Detective Conan", + "episode_number": [ + "316", + "317" + ], + "file_checksum": "2411959B", + "file_extension": "mkv", + "file_name": "Detective Conan - 316-317 [DCTP][2411959B]", + "release_group": "DCTP" + }, + "[N LogN Fansubs] Angel Beats (9).mkv": { + "anime_title": "Angel Beats", + "episode_number": "9", + "file_extension": "mkv", + "file_name": "[N LogN Fansubs] Angel Beats (9)", + "release_group": "N LogN Fansubs" + }, + "To_Aru_Kagaku_no_Railgun_13-15_[BD_1080p][AtsA]": { + "anime_title": "To Aru Kagaku no Railgun", + "episode_number": [ + "13", + "15" + ], + "file_name": "To_Aru_Kagaku_no_Railgun_13-15_[BD_1080p][AtsA]", + "release_group": "AtsA", + "source": "BD", + "video_resolution": "1080p" + }, + "Juuousei_-_01_[Black_Sheep][HDTV_H264_AAC][803DA487].mkv": { + "anime_title": "Juuousei", + "audio_term": "AAC", + "episode_number": "01", + "file_checksum": "803DA487", + "file_extension": "mkv", + "file_name": "Juuousei_-_01_[Black_Sheep][HDTV_H264_AAC][803DA487]", + "release_group": "Black_Sheep", + "source": "HDTV", + "video_term": "H264" + }, + "[RNA]_Sakura_Taisen_New_York_NY_Ep_2_[1590D378].avi": { + "anime_title": "Sakura Taisen New York NY", + "episode_number": "2", + "file_checksum": "1590D378", + "file_extension": "avi", + "file_name": "[RNA]_Sakura_Taisen_New_York_NY_Ep_2_[1590D378]", + "release_group": "RNA" + }, + "Hayate no Gotoku 2nd Season 24 (Blu-Ray 1080p) [Chihiro]": { + "anime_season": "2", + "anime_title": "Hayate no Gotoku", + "episode_number": "24", + "file_name": "Hayate no Gotoku 2nd Season 24 (Blu-Ray 1080p) [Chihiro]", + "release_group": "Chihiro", + "source": "Blu-Ray", + "video_resolution": "1080p" + }, + "[BluDragon] Blue Submarine No.6 (DVD, R2, Dual Audio) V3": { + "anime_title": "Blue Submarine No.6", + "audio_term": "Dual Audio", + "file_name": "[BluDragon] Blue Submarine No.6 (DVD, R2, Dual Audio) V3", + "release_group": "BluDragon", + "release_version": "3", + "source": "DVD" + }, + "Chrono Crusade ep. 1-5": { + "anime_title": "Chrono Crusade", + "episode_number": [ + "1", + "5" + ], + "file_name": "Chrono Crusade ep. 1-5" + }, + "[gg]_Kimi_ni_Todoke_2nd_Season_-_00_[BF735BC4].mkv": { + "anime_season": "2", + "anime_title": "Kimi ni Todoke", + "episode_number": "00", + "file_checksum": "BF735BC4", + "file_extension": "mkv", + "file_name": "[gg]_Kimi_ni_Todoke_2nd_Season_-_00_[BF735BC4]", + "release_group": "gg" + }, + "K-ON!_Ep03_Training!_[1080p,BluRay,x264]_-_THORA.mkv": { + "anime_title": "K-ON!", + "episode_number": "03", + "episode_title": "Training!", + "file_extension": "mkv", + "file_name": "K-ON!_Ep03_Training!_[1080p,BluRay,x264]_-_THORA", + "release_group": "THORA", + "source": "BluRay", + "video_resolution": "1080p", + "video_term": "x264" + }, + "K-ON!!_Ep08_Career_Plan!_[1080p,BluRay,x264]_-_THORA.mkv": { + "anime_title": "K-ON!!", + "episode_number": "08", + "episode_title": "Career Plan!", + "file_extension": "mkv", + "file_name": "K-ON!!_Ep08_Career_Plan!_[1080p,BluRay,x264]_-_THORA", + "release_group": "THORA", + "source": "BluRay", + "video_resolution": "1080p", + "video_term": "x264" + }, + "[SFW]_Queen's_Blade_S2": { + "anime_title": "Queen's Blade S2", + "file_name": "[SFW]_Queen's_Blade_S2", + "release_group": "SFW" + }, + "Evangelion_1.0_You_Are_[Not]_Alone_(1080p)_[@Home]": { + "anime_title": "Evangelion 1.0 You Are [Not] Alone", + "file_name": "Evangelion_1.0_You_Are_[Not]_Alone_(1080p)_[@Home]", + "release_group": "@Home", + "video_resolution": "1080p" + }, + "[Ayako]_Infinite_Stratos_-_IS_-_01v2_[XVID][400p][29675B71].avi": { + "anime_title": "Infinite Stratos - IS", + "episode_number": "01", + "file_checksum": "29675B71", + "file_extension": "avi", + "file_name": "[Ayako]_Infinite_Stratos_-_IS_-_01v2_[XVID][400p][29675B71]", + "release_group": "Ayako", + "release_version": "2", + "video_resolution": "400p", + "video_term": "XVID" + }, + "[E-HARO Raws] Kore wa Zombie desu ka - 03 (TV 1280x720 h264 AAC) [888E4991].mkv": { + "anime_title": "Kore wa Zombie desu ka", + "anime_type": "TV", + "audio_term": "AAC", + "episode_number": "03", + "file_checksum": "888E4991", + "file_extension": "mkv", + "file_name": "[E-HARO Raws] Kore wa Zombie desu ka - 03 (TV 1280x720 h264 AAC) [888E4991]", + "release_group": "E-HARO Raws", + "video_resolution": "1280x720", + "video_term": "h264" + }, + "[Edomae Subs] Kore wa Zombie desu ka Episode 2.mkv": { + "anime_title": "Kore wa Zombie desu ka", + "episode_number": "2", + "file_extension": "mkv", + "file_name": "[Edomae Subs] Kore wa Zombie desu ka Episode 2", + "release_group": "Edomae Subs" + }, + "Juuni.Kokki.Ep.5.avi": { + "anime_title": "Juuni Kokki", + "episode_number": "5", + "file_extension": "avi", + "file_name": "Juuni.Kokki.Ep.5" + }, + "Juuni Kokki Ep.5.avi": { + "anime_title": "Juuni Kokki", + "episode_number": "5", + "file_extension": "avi", + "file_name": "Juuni Kokki Ep.5" + }, + "5_centimeters_per_second[1904x1072.h264.flac][niizk].mkv": { + "anime_title": "5 centimeters per second", + "audio_term": "flac", + "file_extension": "mkv", + "file_name": "5_centimeters_per_second[1904x1072.h264.flac][niizk]", + "release_group": "niizk", + "video_resolution": "1904x1072", + "video_term": "h264" + }, + "[Yoroshiku]_009-1_-_02_(H264)_[36D2444D].mkv": { + "anime_title": "009-1", + "episode_number": "02", + "file_checksum": "36D2444D", + "file_extension": "mkv", + "file_name": "[Yoroshiku]_009-1_-_02_(H264)_[36D2444D]", + "release_group": "Yoroshiku", + "video_term": "H264" + }, + "After War Gundam X - 1x03 - My Mount is Fierce!.mkv": { + "anime_season": "1", + "anime_title": "After War Gundam X", + "episode_number": "03", + "episode_title": "My Mount is Fierce!", + "file_extension": "mkv", + "file_name": "After War Gundam X - 1x03 - My Mount is Fierce!" + }, + "[HorribleSubs] The World God Only Knows 2 - 03 [720p].mkv": { + "anime_title": "The World God Only Knows 2", + "episode_number": "03", + "file_extension": "mkv", + "file_name": "[HorribleSubs] The World God Only Knows 2 - 03 [720p]", + "release_group": "HorribleSubs", + "video_resolution": "720p" + }, + "[FFF] Red Data Girl - 10v0 [29EA865B].mkv": { + "anime_title": "Red Data Girl", + "episode_number": "10", + "file_checksum": "29EA865B", + "file_extension": "mkv", + "file_name": "[FFF] Red Data Girl - 10v0 [29EA865B]", + "release_group": "FFF", + "release_version": "0" + }, + "[CMS] Magical☆Star Kanon 100% OVA[DVD][E9F43685].mkv": { + "anime_title": "Magical☆Star Kanon 100% OVA", + "anime_type": "OVA", + "file_checksum": "E9F43685", + "file_extension": "mkv", + "file_name": "[CMS] Magical☆Star Kanon 100% OVA[DVD][E9F43685]", + "release_group": "CMS", + "source": "DVD" + }, + "[Doremi].Ro-Kyu-Bu!.SS.01.[C1B5CE5D].mkv": { + "anime_title": "Ro-Kyu-Bu! SS", + "episode_number": "01", + "file_checksum": "C1B5CE5D", + "file_extension": "mkv", + "file_name": "[Doremi].Ro-Kyu-Bu!.SS.01.[C1B5CE5D]", + "release_group": "Doremi" + }, + "[Raizel] Persona 4 The Animation Episode 13 - A Stormy Summer Vacation Part 1 [BD_1080p_Dual_Audio_FLAC_Hi10p][8A45634B].mkv": { + "anime_title": "Persona 4 The Animation", + "audio_term": "FLAC", + "episode_number": "13", + "episode_title": "A Stormy Summer Vacation Part 1", + "file_checksum": "8A45634B", + "file_extension": "mkv", + "file_name": "[Raizel] Persona 4 The Animation Episode 13 - A Stormy Summer Vacation Part 1 [BD_1080p_Dual_Audio_FLAC_Hi10p][8A45634B]", + "release_group": "Raizel", + "source": "BD", + "video_resolution": "1080p", + "video_term": "Hi10p" + }, + "[R-R] Diebuster.EP1 (720p.Hi10p.AC3) [82E36A36].mkv": { + "anime_title": "Diebuster", + "audio_term": "AC3", + "episode_number": "1", + "file_checksum": "82E36A36", + "file_extension": "mkv", + "file_name": "[R-R] Diebuster.EP1 (720p.Hi10p.AC3) [82E36A36]", + "release_group": "R-R", + "video_resolution": "720p", + "video_term": "Hi10p" + }, + "[Rakuda].Gift.~eternal.rainbow~.01.dvd.h.264.vorbis.mkv": { + "anime_title": "Gift ~eternal rainbow~", + "audio_term": "vorbis", + "episode_number": "01", + "file_extension": "mkv", + "file_name": "[Rakuda].Gift.~eternal.rainbow~.01.dvd.h.264.vorbis", + "release_group": "Rakuda", + "source": "dvd", + "video_term": "h.264" + }, + "[Jumonji-Giri]_[Shinsen-Subs][ASF]_D.C.II_Da_Capo_II_Ep01_(a1fc58a7).mkv": { + "anime_title": "D.C.II Da Capo II", + "episode_number": "01", + "file_checksum": "a1fc58a7", + "file_extension": "mkv", + "file_name": "[Jumonji-Giri]_[Shinsen-Subs][ASF]_D.C.II_Da_Capo_II_Ep01_(a1fc58a7)", + "release_group": "Jumonji-Giri" + }, + "[52wy][SlamDunk][001][Jpn_Chs_Cht][x264_aac][DVDRip][7FE2C873].mkv": { + "anime_title": "SlamDunk", + "audio_term": "aac", + "episode_number": "001", + "file_checksum": "7FE2C873", + "file_extension": "mkv", + "file_name": "[52wy][SlamDunk][001][Jpn_Chs_Cht][x264_aac][DVDRip][7FE2C873]", + "release_group": "52wy", + "source": "DVDRip", + "video_term": "x264" + }, + "[Commie] Last Exile ~Fam, The Silver Wing~ - 13 [AFF9E530].mkv": { + "anime_title": "Last Exile ~Fam, The Silver Wing~", + "episode_number": "13", + "file_checksum": "AFF9E530", + "file_extension": "mkv", + "file_name": "[Commie] Last Exile ~Fam, The Silver Wing~ - 13 [AFF9E530]", + "release_group": "Commie" + }, + "[Hakugetsu&Speed&MGRT][Dragon_Ball_Z_Battle_of_Gods][BDRIP][BIG5][1280x720].mp4": { + "anime_title": "Dragon Ball Z Battle of Gods", + "file_extension": "mp4", + "file_name": "[Hakugetsu&Speed&MGRT][Dragon_Ball_Z_Battle_of_Gods][BDRIP][BIG5][1280x720]", + "release_group": "Hakugetsu&Speed&MGRT", + "source": "BDRIP", + "subtitles": "BIG5", + "video_resolution": "1280x720" + }, + "[Hakugetsu&MGRT][Evangelion 3.0 You Can (Not) Redo][480P][V0].mp4": { + "anime_title": "Evangelion 3.0 You Can (Not) Redo", + "file_extension": "mp4", + "file_name": "[Hakugetsu&MGRT][Evangelion 3.0 You Can (Not) Redo][480P][V0]", + "release_group": "Hakugetsu&MGRT", + "release_version": "0", + "video_resolution": "480P" + }, + "[UTW]_Fate_Zero_-_01_[BD][h264-720p_AC3][02A0491D].mkv": { + "anime_title": "Fate Zero", + "audio_term": "AC3", + "episode_number": "01", + "file_checksum": "02A0491D", + "file_extension": "mkv", + "file_name": "[UTW]_Fate_Zero_-_01_[BD][h264-720p_AC3][02A0491D]", + "release_group": "UTW", + "source": "BD", + "video_resolution": "720p", + "video_term": "h264" + }, + "[UTW-THORA] Evangelion 3.33 You Can (Not) Redo [BD][1080p,x264,flac][F2060CF5].mkv": { + "anime_title": "Evangelion 3.33 You Can (Not) Redo", + "audio_term": "flac", + "file_checksum": "F2060CF5", + "file_extension": "mkv", + "file_name": "[UTW-THORA] Evangelion 3.33 You Can (Not) Redo [BD][1080p,x264,flac][F2060CF5]", + "release_group": "UTW-THORA", + "source": "BD", + "video_resolution": "1080p", + "video_term": "x264" + }, + "Bakemonogatari - 01 (BD 1280x720 AVC AACx2).mp4": { + "anime_title": "Bakemonogatari", + "audio_term": "AACx2", + "episode_number": "01", + "file_extension": "mp4", + "file_name": "Bakemonogatari - 01 (BD 1280x720 AVC AACx2)", + "source": "BD", + "video_resolution": "1280x720", + "video_term": "AVC" + }, + "Evangelion The New Movie Q (BD 1280x720 AVC AACx2 [5.1+2.0]).mp4": { + "anime_title": "Evangelion The New Movie Q", + "anime_type": "Movie", + "audio_term": "AACx2", + "file_extension": "mp4", + "file_name": "Evangelion The New Movie Q (BD 1280x720 AVC AACx2 [5.1+2.0])", + "source": "BD", + "video_resolution": "1280x720", + "video_term": "AVC" + }, + "Howl's_Moving_Castle_(2004)_[1080p,BluRay,flac,dts,x264]_-_THORA v2.mkv": { + "anime_title": "Howl's Moving Castle", + "anime_year": "2004", + "audio_term": [ + "flac", + "dts" + ], + "file_extension": "mkv", + "file_name": "Howl's_Moving_Castle_(2004)_[1080p,BluRay,flac,dts,x264]_-_THORA v2", + "release_group": "THORA", + "release_version": "2", + "source": "BluRay", + "video_resolution": "1080p", + "video_term": "x264" + }, + "Kotonoha no Niwa (BD 1280x720 AVC AACx3 [5.1+2.0+2.0] Subx3).mp4": { + "anime_title": "Kotonoha no Niwa", + "audio_term": "AACx3", + "file_extension": "mp4", + "file_name": "Kotonoha no Niwa (BD 1280x720 AVC AACx3 [5.1+2.0+2.0] Subx3)", + "source": "BD", + "video_resolution": "1280x720", + "video_term": "AVC" + }, + "Queen's Blade Utsukushiki Toushi-tachi - OVA_01 (BD 1280x720 AVC AAC).mp4": { + "anime_title": "Queen's Blade Utsukushiki Toushi-tachi - OVA", + "anime_type": "OVA", + "audio_term": "AAC", + "episode_number": "01", + "file_extension": "mp4", + "file_name": "Queen's Blade Utsukushiki Toushi-tachi - OVA_01 (BD 1280x720 AVC AAC)", + "source": "BD", + "video_resolution": "1280x720", + "video_term": "AVC" + }, + "[FFF] Futsuu no Joshikousei ga [Locodol] Yatte Mita. - 01 [BAD09C76].mkv": { + "anime_title": "Futsuu no Joshikousei ga [Locodol] Yatte Mita.", + "episode_number": "01", + "file_checksum": "BAD09C76", + "file_extension": "mkv", + "file_name": "[FFF] Futsuu no Joshikousei ga [Locodol] Yatte Mita. - 01 [BAD09C76]", + "release_group": "FFF" + }, + "Vol.01": { + "file_name": "Vol.01", + "volume_number": "01" + }, + "Mary Bell (DVD) - 01v2 [h-b].mkv": { + "anime_title": "Mary Bell", + "episode_number": "01", + "file_extension": "mkv", + "file_name": "Mary Bell (DVD) - 01v2 [h-b]", + "release_group": "h-b", + "release_version": "2", + "source": "DVD" + }, + "Mary Bell (DVD) - 02 [h-b].mkv": { + "anime_title": "Mary Bell", + "episode_number": "02", + "file_extension": "mkv", + "file_name": "Mary Bell (DVD) - 02 [h-b]", + "release_group": "h-b", + "source": "DVD" + }, + "Attack on Titan - Episode 3 - A Dim Light Amid Despair / Humanity's Comeback, Part 1": { + "anime_title": "Attack on Titan", + "episode_number": "3", + "episode_title": "A Dim Light Amid Despair / Humanity's Comeback, Part 1", + "file_name": "Attack on Titan - Episode 3 - A Dim Light Amid Despair / Humanity's Comeback, Part 1" + }, + "The Irregular at Magic High School - S01E01- Enrollment Part I.mkv": { + "anime_season": "01", + "anime_title": "The Irregular at Magic High School", + "episode_number": "01", + "episode_title": "Enrollment Part I", + "file_extension": "mkv", + "file_name": "The Irregular at Magic High School - S01E01- Enrollment Part I" + }, + "[Triad]_Today_in_Class_5-2_-_04.avi": { + "anime_title": "Today in Class 5-2", + "episode_number": "04", + "file_extension": "avi", + "file_name": "[Triad]_Today_in_Class_5-2_-_04", + "release_group": "Triad" + }, + "[HorribleSubs] Tsukimonogatari - (01-04) [1080p].mkv": { + "anime_title": "Tsukimonogatari", + "episode_number": [ + "01", + "04" + ], + "file_extension": "mkv", + "file_name": "[HorribleSubs] Tsukimonogatari - (01-04) [1080p]", + "release_group": "HorribleSubs", + "video_resolution": "1080p" + }, + "[Coalgirls]_Bakemonogatari_OP4a_(1280x720_Blu-Ray_FLAC)_[327A2375].mkv": { + "anime_title": "Bakemonogatari OP", + "anime_type": "OP", + "audio_term": "FLAC", + "episode_number": "4a", + "file_checksum": "327A2375", + "file_extension": "mkv", + "file_name": "[Coalgirls]_Bakemonogatari_OP4a_(1280x720_Blu-Ray_FLAC)_[327A2375]", + "release_group": "Coalgirls", + "source": "Blu-Ray", + "video_resolution": "1280x720" + }, + "[Ruri]No.6 01 [720p][H264][A956075C].mkv": { + "anime_title": "No.6", + "episode_number": "01", + "file_checksum": "A956075C", + "file_extension": "mkv", + "file_name": "[Ruri]No.6 01 [720p][H264][A956075C]", + "release_group": "Ruri", + "video_resolution": "720p", + "video_term": "H264" + }, + "[CH] Sword Art Online Extra Edition Dual Audio [BD 480p][10bitH.264+Vorbis]": { + "anime_title": "Sword Art Online Extra Edition", + "audio_term": [ + "Dual Audio", + "Vorbis" + ], + "file_name": "[CH] Sword Art Online Extra Edition Dual Audio [BD 480p][10bitH.264+Vorbis]", + "release_group": "CH", + "source": "BD", + "video_resolution": "480p", + "video_term": [ + "H.264", + "10bit" + ] + }, + "Episode 14 Ore no Imouto ga Konnani Kawaii Wake ga Nai. (saison 2) VOSTFR": { + "anime_season": "2", + "anime_title": "Ore no Imouto ga Konnani Kawaii Wake ga Nai.", + "episode_number": "14", + "file_name": "Episode 14 Ore no Imouto ga Konnani Kawaii Wake ga Nai. (saison 2) VOSTFR", + "language": "VOSTFR" + }, + "[Zom-B] Machine-Doll wa Kizutsukanai - 01 - Facing ''Cannibal Candy'' I (kuroi, FFF remux) [B99C8DED].mkv": { + "anime_title": "Machine-Doll wa Kizutsukanai", + "episode_number": "01", + "episode_title": "Facing ''Cannibal Candy'' I", + "file_checksum": "B99C8DED", + "file_extension": "mkv", + "file_name": "[Zom-B] Machine-Doll wa Kizutsukanai - 01 - Facing ''Cannibal Candy'' I (kuroi, FFF remux) [B99C8DED]", + "release_information": "remux", + "release_group": "Zom-B" + }, + "[Yuurisan-Subs]_Darker_than_Black_-_Gemini_of_the_Meteor_-_01v2_[65274FDE].patch.7z": { + "anime_title": "Darker than Black - Gemini of the Meteor", + "episode_number": "01", + "file_checksum": "65274FDE", + "file_extension": "7z", + "file_name": "[Yuurisan-Subs]_Darker_than_Black_-_Gemini_of_the_Meteor_-_01v2_[65274FDE].patch", + "release_information": "patch", + "release_group": "Yuurisan-Subs", + "release_version": "2" + }, + "[Coalgirls]_Fate_Zero_OVA3.5_(1280x720_Blu-ray_FLAC)_[5F5AD026].mkv": { + "anime_title": "Fate Zero OVA", + "anime_type": "OVA", + "audio_term": "FLAC", + "episode_number": "3.5", + "file_checksum": "5F5AD026", + "file_extension": "mkv", + "file_name": "[Coalgirls]_Fate_Zero_OVA3.5_(1280x720_Blu-ray_FLAC)_[5F5AD026]", + "release_group": "Coalgirls", + "source": "Blu-ray", + "video_resolution": "1280x720" + }, + "[GrimRipper] Koi Kaze [Dual Audio] Ep01 (c13cefe0).mkv": { + "anime_title": "Koi Kaze", + "audio_term": "Dual Audio", + "episode_number": "01", + "file_checksum": "c13cefe0", + "file_extension": "mkv", + "file_name": "[GrimRipper] Koi Kaze [Dual Audio] Ep01 (c13cefe0)", + "release_group": "GrimRipper" + }, + "[HorribleSubs] Gintama - 111C [1080p].mkv": { + "anime_title": "Gintama", + "episode_number": "111C", + "file_extension": "mkv", + "file_name": "[HorribleSubs] Gintama - 111C [1080p]", + "release_group": "HorribleSubs", + "video_resolution": "1080p" + }, + "[Hatsuyuki]_Kuroko_no_Basuke_S3_-_01_(51)_[720p][10bit][619C57A0].mkv": { + "anime_title": "Kuroko no Basuke S3", + "episode_number": "01", + "episode_number_alt": "51", + "file_checksum": "619C57A0", + "file_extension": "mkv", + "file_name": "[Hatsuyuki]_Kuroko_no_Basuke_S3_-_01_(51)_[720p][10bit][619C57A0]", + "release_group": "Hatsuyuki", + "video_resolution": "720p", + "video_term": "10bit" + }, + "[Elysium]Sora.no.Woto.EP07.5(BD.720p.AAC)[C37580F8].mkv": { + "anime_title": "Sora no Woto", + "audio_term": "AAC", + "episode_number": "07.5", + "file_checksum": "C37580F8", + "file_extension": "mkv", + "file_name": "[Elysium]Sora.no.Woto.EP07.5(BD.720p.AAC)[C37580F8]", + "release_group": "Elysium", + "source": "BD", + "video_resolution": "720p" + }, + "[Zurako] Sora no Woto - 07.5 - Drinking Party - Fortress Battle (BD 1080p AAC) [F7DF16F7].mkv": { + "anime_title": "Sora no Woto", + "audio_term": "AAC", + "episode_number": "07.5", + "episode_title": "Drinking Party - Fortress Battle", + "file_checksum": "F7DF16F7", + "file_extension": "mkv", + "file_name": "[Zurako] Sora no Woto - 07.5 - Drinking Party - Fortress Battle (BD 1080p AAC) [F7DF16F7]", + "release_group": "Zurako", + "source": "BD", + "video_resolution": "1080p" + }, + "[Hiryuu] Maji de Watashi ni Koi Shinasai!! - 02 [720].mkv": { + "anime_title": "Maji de Watashi ni Koi Shinasai!!", + "episode_number": "02", + "file_extension": "mkv", + "file_name": "[Hiryuu] Maji de Watashi ni Koi Shinasai!! - 02 [720]", + "release_group": "Hiryuu", + "video_resolution": "720" + }, + "[Kira-Fansub] Uchuu no Stellvia ep 14 (BD H264 1280x960 24fps AAC) [06EE7355].mkv": { + "anime_title": "Uchuu no Stellvia", + "audio_term": "AAC", + "episode_number": "14", + "file_checksum": "06EE7355", + "file_extension": "mkv", + "file_name": "[Kira-Fansub] Uchuu no Stellvia ep 14 (BD H264 1280x960 24fps AAC) [06EE7355]", + "release_group": "Kira-Fansub", + "source": "BD", + "video_resolution": "1280x960", + "video_term": [ + "H264", + "24fps" + ] + }, + "[ANE] Yosuga no Sora - Ep01 Preview (Yorihime ver) [BDRip 1080p x264 FLAC].mkv": { + "anime_title": "Yosuga no Sora", + "anime_type": "Preview", + "audio_term": "FLAC", + "episode_number": "01", + "file_extension": "mkv", + "file_name": "[ANE] Yosuga no Sora - Ep01 Preview (Yorihime ver) [BDRip 1080p x264 FLAC]", + "release_group": "ANE", + "source": "BDRip", + "video_resolution": "1080p", + "video_term": "x264" + }, + "[DmonHiro] Oreshura #01v2 - The Start Of High School Life Is A War Zone [BD, 720p] [211375E6].mkv": { + "anime_title": "Oreshura", + "episode_number": "01", + "episode_title": "The Start Of High School Life Is A War Zone", + "file_extension": "mkv", + "file_checksum": "211375E6", + "file_name": "[DmonHiro] Oreshura #01v2 - The Start Of High School Life Is A War Zone [BD, 720p] [211375E6]", + "release_group": "DmonHiro", + "release_version": "2", + "source": "BD", + "video_resolution": "720p" + }, + "[모에-Raws] Abarenbou Rikishi!! Matsutarou #04 (ABC 1280x720 x264 AAC).mp4": { + "anime_title": "Abarenbou Rikishi!! Matsutarou", + "audio_term": "AAC", + "episode_number": "04", + "file_extension": "mp4", + "file_name": "[모에-Raws] Abarenbou Rikishi!! Matsutarou #04 (ABC 1280x720 x264 AAC)", + "release_group": "모에-Raws", + "video_resolution": "1280x720", + "video_term": "x264" + }, + "[바카-Raws] Nekomonogatari (Black) #1-4 (BS11 1280x720 x264 AAC).mp4": { + "anime_title": "Nekomonogatari (Black)", + "audio_term": "AAC", + "episode_number": [ + "1", + "4" + ], + "file_extension": "mp4", + "file_name": "[바카-Raws] Nekomonogatari (Black) #1-4 (BS11 1280x720 x264 AAC)", + "release_group": "바카-Raws", + "video_resolution": "1280x720", + "video_term": "x264" + }, + "[NinjaPanda] Tiger & Bunny #01 All's well that ends well. (v3, 1080p Hi10P, DA AAC) [4A9AB85F].mkv": { + "anime_title": "Tiger & Bunny", + "audio_term": "AAC", + "episode_number": "01", + "episode_title": "All's well that ends well.", + "file_checksum": "4A9AB85F", + "file_extension": "mkv", + "file_name": "[NinjaPanda] Tiger & Bunny #01 All's well that ends well. (v3, 1080p Hi10P, DA AAC) [4A9AB85F]", + "release_group": "NinjaPanda", + "release_version": "3", + "video_resolution": "1080p", + "video_term": "Hi10P" + }, + "[FFF] Seirei Tsukai no Blade Dance - SP01 [BD][720p-AAC][F1FF8588].mkv": { + "anime_title": "Seirei Tsukai no Blade Dance - SP", + "anime_type": "SP", + "audio_term": "AAC", + "episode_number": "01", + "file_checksum": "F1FF8588", + "file_extension": "mkv", + "file_name": "[FFF] Seirei Tsukai no Blade Dance - SP01 [BD][720p-AAC][F1FF8588]", + "release_group": "FFF", + "source": "BD", + "video_resolution": "720p" + }, + "[SubDESU-H] Swing out Sisters Complete Version (720p x264 8bit AC3) [3ABD57E6].mp4": { + "anime_title": "Swing out Sisters", + "audio_term": "AC3", + "file_checksum": "3ABD57E6", + "file_extension": "mp4", + "file_name": "[SubDESU-H] Swing out Sisters Complete Version (720p x264 8bit AC3) [3ABD57E6]", + "release_group": "SubDESU-H", + "release_information": "Complete", + "video_resolution": "720p", + "video_term": [ + "x264", + "8bit" + ] + }, + "Cyborg 009 (1968) [TSHS] episode 06 [30C15D62].mp4": { + "anime_title": "Cyborg 009", + "anime_year": "1968", + "episode_number": "06", + "file_checksum": "30C15D62", + "file_extension": "mp4", + "file_name": "Cyborg 009 (1968) [TSHS] episode 06 [30C15D62]", + "release_group": "TSHS" + }, + "[Hatsuyuki] Dragon Ball Kai (2014) - 002 (100) [1280x720][DD66AFB7].mkv": { + "anime_title": "Dragon Ball Kai", + "anime_year": "2014", + "episode_number": "002", + "episode_number_alt": "100", + "file_checksum": "DD66AFB7", + "file_extension": "mkv", + "file_name": "[Hatsuyuki] Dragon Ball Kai (2014) - 002 (100) [1280x720][DD66AFB7]", + "release_group": "Hatsuyuki", + "video_resolution": "1280x720" + }, + "[Deep] Tegami Bachi (REVERSE) - Letter Bee - 29 (04) [5203142B].mkv": { + "anime_title": "Tegami Bachi (REVERSE) - Letter Bee", + "episode_number": "04", + "episode_number_alt": "29", + "file_checksum": "5203142B", + "file_extension": "mkv", + "file_name": "[Deep] Tegami Bachi (REVERSE) - Letter Bee - 29 (04) [5203142B]", + "release_group": "Deep" + }, + "[FFF] Love Live! The School Idol Movie - PV [D1A15D2C].mkv": { + "anime_title": "Love Live! The School Idol Movie - PV", + "anime_type": [ + "Movie", + "PV" + ], + "file_checksum": "D1A15D2C", + "file_extension": "mkv", + "file_name": "[FFF] Love Live! The School Idol Movie - PV [D1A15D2C]", + "release_group": "FFF" + }, + "[Nishi-Taku] Tamayura ~graduation photo~ Movie Part 1 [BD][720p][98965607].mkv": { + "anime_title": "Tamayura ~graduation photo~ Movie Part 1", + "anime_type": "Movie", + "file_checksum": "98965607", + "file_extension": "mkv", + "file_name": "[Nishi-Taku] Tamayura ~graduation photo~ Movie Part 1 [BD][720p][98965607]", + "release_group": "Nishi-Taku", + "source": "BD", + "video_resolution": "720p" + }, + "[LRL] 1001 Nights (1998) [DVD]": { + "anime_title": "1001 Nights", + "anime_year": "1998", + "file_name": "[LRL] 1001 Nights (1998) [DVD]", + "release_group": "LRL", + "source": "DVD" + }, + "[TardRaws] 0 [640x360].mkv": { + "anime_title": "0", + "file_extension": "mkv", + "file_name": "[TardRaws] 0 [640x360]", + "release_group": "TardRaws", + "video_resolution": "640x360" + }, + "[FB] Crayon Shin-Chan Movie 2 The Secret of Buri Buri Kingdom [DivX5 AC3] 1994 [852X480] V2.avi": { + "anime_title": "Crayon Shin-Chan Movie 2 The Secret of Buri Buri Kingdom", + "anime_type": "Movie", + "anime_year": "1994", + "audio_term": "AC3", + "file_extension": "avi", + "file_name": "[FB] Crayon Shin-Chan Movie 2 The Secret of Buri Buri Kingdom [DivX5 AC3] 1994 [852X480] V2", + "release_group": "FB", + "release_version": "2", + "video_resolution": "852X480", + "video_term": "DivX5" + }, + "[Hatsuyuki-Kaitou]_Fairy_Tail_2_-_52_(227)_[720p][10bit][9DF6B8D5].mkv": { + "anime_title": "Fairy Tail 2", + "episode_number": "52", + "episode_number_alt": "227", + "file_checksum": "9DF6B8D5", + "file_extension": "mkv", + "file_name": "[Hatsuyuki-Kaitou]_Fairy_Tail_2_-_52_(227)_[720p][10bit][9DF6B8D5]", + "release_group": "Hatsuyuki-Kaitou", + "video_resolution": "720p", + "video_term": "10bit" + }, + "[FBI] Baby Princess 3D Paradise Love 01v0 [BD][720p-AAC][457CC066].mkv": { + "anime_title": "Baby Princess 3D Paradise Love", + "audio_term": "AAC", + "episode_number": "01", + "file_checksum": "457CC066", + "file_extension": "mkv", + "file_name": "[FBI] Baby Princess 3D Paradise Love 01v0 [BD][720p-AAC][457CC066]", + "release_group": "FBI", + "release_version": "0", + "source": "BD", + "video_resolution": "720p" + }, + "[Shinsen-Subs]_Macross_Frontier_-_01b_[4D5EC315].avi": { + "anime_title": "Macross Frontier", + "episode_number": "01b", + "file_checksum": "4D5EC315", + "file_extension": "avi", + "file_name": "[Shinsen-Subs]_Macross_Frontier_-_01b_[4D5EC315]", + "release_group": "Shinsen-Subs" + }, + "[NamaeNai] Hidamari Sketch x365 - 09a (DVD) [49874745].mkv": { + "anime_title": "Hidamari Sketch x365", + "episode_number": "09a", + "file_checksum": "49874745", + "file_extension": "mkv", + "file_name": "[NamaeNai] Hidamari Sketch x365 - 09a (DVD) [49874745]", + "release_group": "NamaeNai", + "source": "DVD" + }, + "[KLF]_D.Gray-man_04V2.avi": { + "anime_title": "D.Gray-man", + "episode_number": "04", + "file_extension": "avi", + "file_name": "[KLF]_D.Gray-man_04V2", + "release_group": "KLF", + "release_version": "2" + }, + "[FaggotryRaws] Bakuman - 01 (NHK E 848x480).mkv": { + "anime_title": "Bakuman", + "episode_number": "01", + "file_extension": "mkv", + "file_name": "[FaggotryRaws] Bakuman - 01 (NHK E 848x480)", + "release_group": "FaggotryRaws", + "video_resolution": "848x480" + }, + "[5F] RWBY 14 Forever Fall Part 2 pt-BR.mp4": { + "anime_title": "RWBY", + "episode_number": "14", + "episode_title": "Forever Fall Part 2", + "file_extension": "mp4", + "file_name": "[5F] RWBY 14 Forever Fall Part 2 pt-BR", + "language": "pt-BR", + "release_group": "5F" + }, + "Dragon.Ball.KAI.-.01.-.1080p.BluRay.x264.DHD.mkv": { + "anime_title": "Dragon Ball KAI", + "episode_number": "01", + "episode_title": "DHD", + "file_extension": "mkv", + "file_name": "Dragon.Ball.KAI.-.01.-.1080p.BluRay.x264.DHD", + "source": "BluRay", + "video_resolution": "1080p", + "video_term": "x264" + }, + "[AnimeRG] Ushio to Tora (TV) - 02 [720p] [Xcelent].mkv": { + "anime_title": "Ushio to Tora (TV)", + "anime_type": "TV", + "episode_number": "02", + "file_extension": "mkv", + "file_name": "[AnimeRG] Ushio to Tora (TV) - 02 [720p] [Xcelent]", + "release_group": "AnimeRG", + "video_resolution": "720p" + }, + "[Anime": { + "file_name": "[Anime" + }, + "Gekkan Shoujo Nozaki-kun [HorribleSubs] (1080p)": { + "anime_title": "Gekkan Shoujo Nozaki-kun", + "file_name": "Gekkan Shoujo Nozaki-kun [HorribleSubs] (1080p)", + "release_group": "HorribleSubs", + "video_resolution": "1080p" + }, + "[EveTaku] AKB0048 Vol.03 - Making of Kibou-ni-Tsuite Music Video (BDRip 1080i H.264-Hi10P FLAC)[C09462E2]": { + "anime_title": "AKB0048", + "audio_term": "FLAC", + "file_checksum": "C09462E2", + "file_name": "[EveTaku] AKB0048 Vol.03 - Making of Kibou-ni-Tsuite Music Video (BDRip 1080i H.264-Hi10P FLAC)[C09462E2]", + "release_group": "EveTaku", + "source": "BDRip", + "video_term": [ + "H.264", + "Hi10P" + ], + "volume_number": "03" + }, + "[DmonHiro] Magi - The Labyrinth Of Magic - Vol.1v2 (BD, 720p)": { + "anime_title": "Magi - The Labyrinth Of Magic", + "file_name": "[DmonHiro] Magi - The Labyrinth Of Magic - Vol.1v2 (BD, 720p)", + "release_group": "DmonHiro", + "release_version": "2", + "source": "BD", + "video_resolution": "720p", + "volume_number": "1" + }, + "[tlacatlc6] Natsume Yuujinchou Shi Vol. 1v2 & Vol. 2 (BD 1280x720 x264 AAC)": { + "anime_title": "Natsume Yuujinchou Shi", + "audio_term": "AAC", + "file_name": "[tlacatlc6] Natsume Yuujinchou Shi Vol. 1v2 & Vol. 2 (BD 1280x720 x264 AAC)", + "release_group": "tlacatlc6", + "release_version": "2", + "source": "BD", + "video_term": "x264", + "video_resolution": "1280x720", + "volume_number": [ + "1", + "2" + ] + }, + "[Tsundere] Hyouka - 01v2-04 [BDRip h264 1920x1080 10bit FLAC]": { + "anime_title": "Hyouka", + "audio_term": "FLAC", + "episode_number": [ + "01", + "04" + ], + "file_name": "[Tsundere] Hyouka - 01v2-04 [BDRip h264 1920x1080 10bit FLAC]", + "release_group": "Tsundere", + "release_version": "2", + "source": "BDRip", + "video_resolution": "1920x1080", + "video_term": [ + "h264", + "10bit" + ] + }, + "[Doki] Nogizaka Haruka no Himitsu - Purezza - 01v2-03v2 (1280x720 h264 AAC)": { + "anime_title": "Nogizaka Haruka no Himitsu - Purezza", + "audio_term": "AAC", + "episode_number": [ + "01", + "03" + ], + "file_name": "[Doki] Nogizaka Haruka no Himitsu - Purezza - 01v2-03v2 (1280x720 h264 AAC)", + "release_group": "Doki", + "release_version": [ + "2", + "2" + ], + "video_resolution": "1280x720", + "video_term": "h264" + }, + "Fairy Tail - S06E32 - Tartaros Arc Iron Fist of the Fire Dragon [Episode 83]": { + "anime_season": "06", + "anime_title": "Fairy Tail", + "episode_number": "32", + "episode_number_alt": "83", + "episode_title": "Tartaros Arc Iron Fist of the Fire Dragon", + "file_name": "Fairy Tail - S06E32 - Tartaros Arc Iron Fist of the Fire Dragon [Episode 83]" + }, + "Noragami - S02E06 - What Must Be Done [Episode 6]": { + "anime_season": "02", + "anime_title": "Noragami", + "episode_number": "6", + "episode_title": "What Must Be Done", + "file_name": "Noragami - S02E06 - What Must Be Done [Episode 6]" + }, + "[Harunatsu] Classroom Crisis - Vol.1 [BD 720p-AAC]": { + "anime_title": "Classroom Crisis", + "audio_term": "AAC", + "file_name": "[Harunatsu] Classroom Crisis - Vol.1 [BD 720p-AAC]", + "release_group": "Harunatsu", + "source": "BD", + "video_resolution": "720p", + "volume_number": "1" + }, + "[GS] Classroom Crisis Vol.1&2 (BD 1080p 10bit FLAC)": { + "anime_title": "Classroom Crisis", + "audio_term": "FLAC", + "file_name": "[GS] Classroom Crisis Vol.1&2 (BD 1080p 10bit FLAC)", + "release_group": "GS", + "source": "BD", + "video_resolution": "1080p", + "video_term": "10bit", + "volume_number": [ + "1", + "2" + ] + }, + "[HorribleSubs] Momokuri - 01+02 [720p]": { + "anime_title": "Momokuri", + "episode_number": [ + "01", + "02" + ], + "file_name": "[HorribleSubs] Momokuri - 01+02 [720p]", + "release_group": "HorribleSubs", + "video_resolution": "720p" + }, + "[Infantjedi] Norn9 - Norn + Nonetto - 12": { + "anime_title": "Norn9 - Norn + Nonetto", + "episode_number": "12", + "file_name": "[Infantjedi] Norn9 - Norn + Nonetto - 12", + "release_group": "Infantjedi" + }, + "Dragon_Ball_Z_Movies_8_&_10_[720p,BluRay,DTS,x264]_-_THORA": { + "anime_title": "Dragon Ball Z Movies", + "audio_term": "DTS", + "episode_number": [ + "8", + "10" + ], + "file_name": "Dragon_Ball_Z_Movies_8_&_10_[720p,BluRay,DTS,x264]_-_THORA", + "release_group": "THORA", + "source": "BluRay", + "video_resolution": "720p", + "video_term": "x264" + }, + "[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD].mkv": { + "anime_title": "Toradora!", + "anime_year": "2008", + "audio_term": "FLAC", + "episode_number": "01", + "episode_title": "Tiger and Dragon", + "file_checksum": "1234ABCD", + "file_extension": "mkv", + "file_name": "[TaigaSubs]_Toradora!_(2008)_-_01v2_-_Tiger_and_Dragon_[1280x720_H.264_FLAC][1234ABCD]", + "release_group": "TaigaSubs", + "release_version": "2", + "video_resolution": "1280x720", + "video_term": "H.264" + } } \ No newline at end of file diff --git a/test/test.js b/test/test.js index 4329641..e593ed6 100644 --- a/test/test.js +++ b/test/test.js @@ -9,157 +9,194 @@ var expect = require('chai').expect; var anitomy = require('../build/Release/anitomy-js'); -describe('anitomy-js', function () { - - var fixture = require('./data.json'); - var fixtureValues = []; - var fixtureKeys = Object.keys(fixture); - for (var key in fixture) fixtureValues.push(fixture[key]); - - describe('anitomy parseSync', function () { - it('should parse all anime filenames, one by one', function () { - fixtureKeys.forEach(function (key) { - expect(anitomy.parseSync(key)).to.deep.equal(fixture[key]); - }); - }); - - it('should parse all anime filenames, all at once', function () { - expect(anitomy.parseSync(fixtureKeys)).to.deep.equal(fixtureValues); - }); +describe('anitomy-js', function() { + + var fixture = require('./data.json'); + var fixtureValues = []; + var fixtureKeys = Object.keys(fixture); + for (var key in fixture) fixtureValues.push(fixture[key]); + + describe('anitomy parseSync', function() { + it('should parse all anime filenames, one by one', function() { + fixtureKeys.forEach(function(key) { + expect(anitomy.parseSync(key)).to.deep.equal(fixture[key]); + }); + }); - it('should parse anime filenames, ignoring episode number, title, file extension and release group', function () { - var parsed = anitomy.parseSync(fixtureKeys, { - "parse_episode_title": false, - "parse_episode_number": false, - "parse_file_extension": false, - "parse_release_group": false - }); - parsed.forEach(function (anime) { - expect(anime).to.not.have.property("episode_title"); - // check episode_number_alt because anitomy still parsing - // some file's episode number even with parse_episode_number set to false - expect(anime).to.not.have.property("episode_number_alt"); - expect(anime).to.not.have.property("file_extension"); - expect(anime).to.not.have.property("release_group"); - }); - }); + it('should parse all anime filenames, all at once', function() { + expect(anitomy.parseSync(fixtureKeys)).to.deep.equal(fixtureValues); + }); - it('should ignore string', function () { - expect(anitomy.parseSync('[ANBU]_Princess_Lover!_-_01_[2048A39A].mkv', { - "ignored_strings": ['!'] - }).file_name).to.eq('[ANBU]_Princess_Lover_-_01_[2048A39A]'); - }); + it('should parse anime filenames, ignoring episode number, title, file extension and release group', + function() { + var parsed = anitomy.parseSync(fixtureKeys, { + "parse_episode_title": false, + "parse_episode_number": false, + "parse_file_extension": false, + "parse_release_group": false + }); + parsed.forEach(function(anime) { + expect(anime).to.not.have.property("episode_title"); + // check episode_number_alt because anitomy still parsing + // some file's episode number even with parse_episode_number set to + // false + expect(anime).to.not.have.property("episode_number_alt"); + expect(anime).to.not.have.property("file_extension"); + expect(anime).to.not.have.property("release_group"); + }); + }); + + it('should ignore string', function() { + expect( + anitomy + .parseSync( + '[ANBU]_Princess_Lover!_-_01_[2048A39A].mkv', + {"ignored_strings": ['!']}) + .file_name) + .to.eq('[ANBU]_Princess_Lover_-_01_[2048A39A]'); + }); - it('should override default delimiters', function () { - expect(anitomy.parseSync("[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director's Cut) [988DB090].mkv", { - "allowed_delimiters": '_.&+,|' - })).to.deep.equal({ - anime_title: "Seikon no Qwaser - 13v0 (Uncensored Director's Cut)", - file_checksum: '988DB090', - file_extension: 'mkv', - file_name: '[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director\'s Cut) [988DB090]', - release_group: 'chibi-Doki' - }); - }); + it('should override default delimiters', function() { + expect( + anitomy.parseSync( + "[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director's Cut) [988DB090].mkv", + {"allowed_delimiters": '_.&+,|'})) + .to.deep.equal({ + anime_title: "Seikon no Qwaser - 13v0 (Uncensored Director's Cut)", + file_checksum: '988DB090', + file_extension: 'mkv', + file_name: + '[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director\'s Cut) [988DB090]', + release_group: 'chibi-Doki' + }); + }); - it('should throw an exception for wrong datatypes (files)', function () { - expect(function () { anitomy.parseSync(1); }).to.throw('Wrong data type'); - }); + it('should throw an exception for wrong datatypes (files)', function() { + expect(function() { anitomy.parseSync(1); }).to.throw('Wrong data type'); + }); - it('should throw an exception for wrong datatypes (options)', function () { - expect(function () { anitomy.parseSync("", null); }).to.throw('Options must be an object'); - }); + it('should throw an exception for wrong datatypes (options)', function() { + expect(function() { + anitomy.parseSync("", null); + }).to.throw('Options must be an object'); + }); - it('should throw an exception for wrong datatypes (options/ignored_strings)', function () { - expect(function () { - anitomy.parseSync("", { "ignored_strings": null }); - }).to.throw('ignored_strings must be an array'); - }); + it('should throw an exception for wrong datatypes (options/ignored_strings)', + function() { + expect(function() { + anitomy.parseSync("", {"ignored_strings": null}); + }).to.throw('ignored_strings must be an array'); + }); + + it('should throw wrong number of arguments', function() { + expect(function() { + anitomy.parseSync(); + }).to.throw('Wrong number of arguments'); + }); + }); - it('should throw wrong number of arguments', function () { - expect(function () { anitomy.parseSync(); }).to.throw('Wrong number of arguments'); + describe('anitomy parseAsync', function() { + it('should parse all anime filenames, one by one', function(done) { + var length = fixtureKeys.length; + fixtureKeys.forEach(function(key) { + anitomy.parseAsync(key, function(data) { + expect(data).to.deep.equal(fixture[key]); + if (--length == 0) done(); }); + }); }); - describe('anitomy parseAsync', function () { - it('should parse all anime filenames, one by one', function (done) { - var length = fixtureKeys.length; - fixtureKeys.forEach(function (key) { - anitomy.parseAsync(key, function (data) { - expect(data).to.deep.equal(fixture[key]); - if (--length == 0) done(); - }); - }); - }); + it('should parse all anime filenames, all at once', function(done) { + anitomy.parseAsync(fixtureKeys, function(data) { + expect(data).to.deep.equal(fixtureValues); + done(); + }); + }); - it('should parse all anime filenames, all at once', function (done) { - anitomy.parseAsync(fixtureKeys, function (data) { - expect(data).to.deep.equal(fixtureValues); + it('should parse anime filenames, ignoring episode number, title, file extension and release group', + function(done) { + var options = { + "parse_episode_title": false, + "parse_episode_number": false, + "parse_file_extension": false, + "parse_release_group": false + }; + anitomy.parseAsync(fixtureKeys, function(data) { + data.forEach(function(anime) { + expect(anime, anime.file_name) + .to.not.have.property("episode_title"); + // check episode_number_alt because anitomy still parsing + // some file's episode number even with parse_episode_number set to + // false + expect(anime, anime.file_name) + .to.not.have.property("episode_number_alt"); + expect(anime, anime.file_name) + .to.not.have.property("file_extension"); + expect(anime, anime.file_name) + .to.not.have.property("release_group"); + }); + done(); + }, options); + }); + + it('should ignore string', function(done) { + expect( + anitomy.parseAsync( + '[ANBU]_Princess_Lover!_-_01_[2048A39A].mkv', function(data) { + expect(data.file_name) + .to.eq('[ANBU]_Princess_Lover_-_01_[2048A39A]'); done(); - }); - }); + }, {"ignored_strings": ['!']})); + }); - it('should parse anime filenames, ignoring episode number, title, file extension and release group', function (done) { - var options = { - "parse_episode_title": false, - "parse_episode_number": false, - "parse_file_extension": false, - "parse_release_group": false - }; - anitomy.parseAsync(fixtureKeys, function (data) { - data.forEach(function (anime) { - expect(anime, anime.file_name).to.not.have.property("episode_title"); - // check episode_number_alt because anitomy still parsing - // some file's episode number even with parse_episode_number set to false - expect(anime, anime.file_name).to.not.have.property("episode_number_alt"); - expect(anime, anime.file_name).to.not.have.property("file_extension"); - expect(anime, anime.file_name).to.not.have.property("release_group"); + it('should override default delimiters', function(done) { + expect( + anitomy.parseAsync( + "[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director's Cut) [988DB090].mkv", + function(data) { + expect(data).to.deep.equal({ + anime_title: + "Seikon no Qwaser - 13v0 (Uncensored Director's Cut)", + file_checksum: '988DB090', + file_extension: 'mkv', + file_name: + '[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director\'s Cut) [988DB090]', + release_group: 'chibi-Doki' }); done(); - }, options); - }); - - it('should ignore string', function (done) { - expect(anitomy.parseAsync('[ANBU]_Princess_Lover!_-_01_[2048A39A].mkv', function (data) { - expect(data.file_name).to.eq('[ANBU]_Princess_Lover_-_01_[2048A39A]'); - done(); - }, { "ignored_strings": ['!'] })); - }); - - it('should override default delimiters', function (done) { - expect(anitomy.parseAsync("[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director's Cut) [988DB090].mkv", - function (data) { - expect(data).to.deep.equal({ - anime_title: "Seikon no Qwaser - 13v0 (Uncensored Director's Cut)", - file_checksum: '988DB090', - file_extension: 'mkv', - file_name: '[chibi-Doki] Seikon no Qwaser - 13v0 (Uncensored Director\'s Cut) [988DB090]', - release_group: 'chibi-Doki' - }); - done(); - }, { "allowed_delimiters": '_.&+,|' })); - }); - - it('should throw an exception for wrong datatypes (files)', function () { - expect(function () { anitomy.parseAsync(1, function () { }); }).to.throw('Wrong data type'); - }); + }, + {"allowed_delimiters": '_.&+,|'})); + }); - it('should throw an exception for wrong datatypes (callback)', function () { - expect(function () { anitomy.parseAsync("", null); }).to.throw('Second parameter must be a callback'); - }); + it('should throw an exception for wrong datatypes (files)', function() { + expect(function() { + anitomy.parseAsync(1, function() {}); + }).to.throw('Wrong data type'); + }); - it('should throw an exception for wrong datatypes (options)', function () { - expect(function () { anitomy.parseAsync("", function () { }, null); }).to.throw('Options must be an object'); - }); + it('should throw an exception for wrong datatypes (callback)', function() { + expect(function() { + anitomy.parseAsync("", null); + }).to.throw('Second parameter must be a callback'); + }); - it('should throw an exception for wrong datatypes (options/ignored_strings)', function () { - expect(function () { - anitomy.parseAsync("", function () { }, { "ignored_strings": null }); - }).to.throw('ignored_strings must be an array'); - }); + it('should throw an exception for wrong datatypes (options)', function() { + expect(function() { + anitomy.parseAsync("", function() {}, null); + }).to.throw('Options must be an object'); + }); - it('should throw wrong number of arguments', function () { - expect(function () { anitomy.parseAsync(); }).to.throw('Wrong number of arguments'); - }); + it('should throw an exception for wrong datatypes (options/ignored_strings)', + function() { + expect(function() { + anitomy.parseAsync("", function() {}, {"ignored_strings": null}); + }).to.throw('ignored_strings must be an array'); + }); + + it('should throw wrong number of arguments', function() { + expect(function() { + anitomy.parseAsync(); + }).to.throw('Wrong number of arguments'); }); + }); });