小说绘上架版本
This commit is contained in:
+54
@@ -0,0 +1,54 @@
|
||||
//
|
||||
// TFCollectionManager.h
|
||||
// WXReader
|
||||
//
|
||||
// Created by 谢腾飞 on 2020/12/1.
|
||||
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface TFCollectionManager : NSObject
|
||||
|
||||
+ (instancetype)shareManagerWithProductionType:(TFProductionType)productionType;
|
||||
|
||||
#pragma add
|
||||
// 添加收藏作品
|
||||
- (BOOL)addCollectionWithProductionModel:(TFProductionModel *)productionModel;
|
||||
|
||||
- (BOOL)addCollectionWithProductionModel:(TFProductionModel *)productionModel atIndex:(NSInteger)index;
|
||||
|
||||
#pragma delete
|
||||
// 删除收藏作品
|
||||
- (BOOL)removeCollectionWithProductionModel:(TFProductionModel *)productionModel;
|
||||
|
||||
- (BOOL)removeCollectionWithProduction_id:(NSInteger)production_id;
|
||||
|
||||
// 删除全部收藏作品
|
||||
- (BOOL)removeAllCollection;
|
||||
|
||||
#pragma change
|
||||
// 修改本地作品记录
|
||||
- (BOOL)modificationCollectionWithProductionModel:(TFProductionModel *)productionModel;
|
||||
|
||||
// 移动当前作品记录到首位
|
||||
- (void)moveCollectionToTopWithProductionModel:(TFProductionModel *)productionModel;
|
||||
|
||||
#pragma check
|
||||
// 本地全部作品记录
|
||||
- (NSArray <TFProductionModel *> *)getAllCollection;
|
||||
|
||||
// 此作品是否已收藏
|
||||
- (TFProductionModel * _Nullable)isCollectedWithProductionModel:(TFProductionModel *)productionModel;
|
||||
|
||||
// 获取作品收藏记录
|
||||
- (TFProductionModel *)getCollectedProductionModelWithProduction_id:(NSInteger)production_id;
|
||||
|
||||
// 此作品是否已收藏
|
||||
- (BOOL)isCollectedWithProduction_id:(NSInteger)production_id;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
+284
@@ -0,0 +1,284 @@
|
||||
//
|
||||
// TFCollectionManager.m
|
||||
// WXReader
|
||||
//
|
||||
// Created by 谢腾飞 on 2020/12/1.
|
||||
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TFCollectionManager.h"
|
||||
|
||||
@interface TFCollectionManager ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation TFCollectionManager
|
||||
|
||||
static TFProductionType _productionType;
|
||||
static TFCollectionManager *_instanceCollection;
|
||||
|
||||
+ (instancetype)shareManagerWithProductionType:(TFProductionType)productionType
|
||||
{
|
||||
static dispatch_once_t once_token_collection;
|
||||
dispatch_once(&once_token_collection, ^{
|
||||
_instanceCollection = [[self alloc] init];
|
||||
});
|
||||
_productionType = productionType;
|
||||
return _instanceCollection;
|
||||
}
|
||||
|
||||
#pragma add
|
||||
// 添加收藏作品
|
||||
- (BOOL)addCollectionWithProductionModel:(TFProductionModel *)productionModel
|
||||
{
|
||||
return [self addCollectionWithProductionModel:productionModel atIndex:0];
|
||||
}
|
||||
|
||||
- (BOOL)addCollectionWithProductionModel:(TFProductionModel *)productionModel atIndex:(NSInteger)index
|
||||
{
|
||||
if (!productionModel) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
// 已存储
|
||||
if ([self isCollectedWithProductionModel:productionModel]) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (self.collectionArray.count == 0) {
|
||||
[self.collectionArray addObject:productionModel];
|
||||
} else {
|
||||
|
||||
if (index < 0) {
|
||||
index = 0;
|
||||
} else if (index > self.collectionArray.count - 1) {
|
||||
index = self.collectionArray.count - 1;
|
||||
}
|
||||
[self.collectionArray insertObject:productionModel atIndex:index];
|
||||
}
|
||||
|
||||
// 写入文件
|
||||
return [self writeToPlistFile];
|
||||
}
|
||||
|
||||
#pragma delete
|
||||
|
||||
// 删除收藏作品
|
||||
- (BOOL)removeCollectionWithProductionModel:(TFProductionModel *)productionModel
|
||||
{
|
||||
TFProductionModel *t_model = [self isCollectedWithProductionModel:productionModel];
|
||||
return [self removeCollectionWithProduction_id:t_model.production_id];
|
||||
}
|
||||
|
||||
// 删除收藏作品
|
||||
- (BOOL)removeCollectionWithProduction_id:(NSInteger)production_id
|
||||
{
|
||||
if (![self isCollectedWithProduction_id:production_id]) {
|
||||
// 本地无记录无法删除
|
||||
return NO;
|
||||
}
|
||||
|
||||
for (TFProductionModel *t_model in self.collectionArray) {
|
||||
if (t_model.production_id == production_id) {
|
||||
[self.collectionArray removeObject:t_model];
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 写入文件
|
||||
return [self writeToPlistFile];
|
||||
}
|
||||
|
||||
// 删除全部收藏作品
|
||||
- (BOOL)removeAllCollection
|
||||
{
|
||||
[self.collectionArray removeAllObjects];
|
||||
|
||||
[[NSFileManager defaultManager] removeItemAtPath:[self cacheFilePath] error:nil];
|
||||
|
||||
// 写入文件
|
||||
return [self writeToPlistFile];
|
||||
}
|
||||
|
||||
#pragma change
|
||||
// 修改本地作品记录
|
||||
- (BOOL)modificationCollectionWithProductionModel:(TFProductionModel *)productionModel
|
||||
{
|
||||
// 本地记录不存在,无法删除
|
||||
if (![self isCollectedWithProductionModel:productionModel]) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
for (int i = 0; i < self.collectionArray.count; i ++) {
|
||||
TFProductionModel *t_model = [self.collectionArray objectAtIndex:i];
|
||||
if (t_model.production_id == productionModel.production_id) {
|
||||
[self.collectionArray replaceObjectAtIndex:i withObject:productionModel];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 写入文件
|
||||
return [self writeToPlistFile];
|
||||
}
|
||||
|
||||
// 移动当前作品记录到首位
|
||||
- (void)moveCollectionToTopWithProductionModel:(TFProductionModel *)productionModel
|
||||
{
|
||||
TFProductionModel *t_model = [self isCollectedWithProductionModel:productionModel];
|
||||
if (!t_model) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.collectionArray.count == 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (TFProductionModel *tt_model in self.collectionArray) {
|
||||
if (tt_model.production_id == productionModel.production_id) {
|
||||
[self.collectionArray removeObject:tt_model];
|
||||
[self.collectionArray insertObject:tt_model atIndex:0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[self writeToPlistFile];
|
||||
}
|
||||
|
||||
#pragma check
|
||||
// 本地全部作品记录
|
||||
- (NSArray <TFProductionModel *> *)getAllCollection
|
||||
{
|
||||
return [self.collectionArray mutableCopy];
|
||||
}
|
||||
|
||||
// 此作品是否已收藏
|
||||
- (TFProductionModel * _Nullable)isCollectedWithProductionModel:(TFProductionModel *)productionModel
|
||||
{
|
||||
if (self.collectionArray.count <= 0) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
if (!productionModel) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
for (TFProductionModel *t_model in self.collectionArray) {
|
||||
if (t_model.production_id == productionModel.production_id) {
|
||||
return t_model;
|
||||
}
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (TFProductionModel *)getCollectedProductionModelWithProduction_id:(NSInteger)production_id
|
||||
{
|
||||
if (self.collectionArray.count <= 0) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
if (production_id == 0) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
for (TFProductionModel *t_model in self.collectionArray) {
|
||||
if (t_model.production_id == production_id) {
|
||||
return t_model;
|
||||
}
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
// 此作品是否已收藏
|
||||
- (BOOL)isCollectedWithProduction_id:(NSInteger)production_id
|
||||
{
|
||||
if (self.collectionArray.count <= 0) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
for (TFProductionModel *t_model in self.collectionArray) {
|
||||
if (t_model.production_id == production_id) {
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
#pragma mark - private
|
||||
static NSMutableDictionary *collectionDictionary;
|
||||
|
||||
- (NSMutableArray *)collectionArray
|
||||
{
|
||||
if (!collectionDictionary) {
|
||||
collectionDictionary = [NSMutableDictionary dictionary];
|
||||
}
|
||||
|
||||
NSMutableArray *t_arr = [collectionDictionary objectForKey:[TFUtilsHelper formatStringWithInteger:_productionType]];
|
||||
if (!t_arr) {
|
||||
|
||||
NSMutableArray *localDataArray = [NSMutableArray arrayWithContentsOfFile:[self cacheFilePath]];
|
||||
|
||||
t_arr = [NSMutableArray array];
|
||||
for (NSString *modelJsong in localDataArray) {
|
||||
[t_arr addObject:[TFProductionModel modelWithJSON:modelJsong]];
|
||||
}
|
||||
|
||||
[collectionDictionary setObject:t_arr forKey:[NSString stringWithFormat:@"%@", [TFUtilsHelper formatStringWithInteger:_productionType]]];
|
||||
|
||||
}
|
||||
|
||||
return t_arr;
|
||||
}
|
||||
|
||||
- (NSString *)cacheFilePath
|
||||
{
|
||||
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectOrNilAtIndex:0];
|
||||
NSString *rootFloderPath = [documentPath stringByAppendingPathComponent:[@"WXYZ_ProductionCollectionFileFloder" md5String]];
|
||||
// 创建章节文件夹
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:rootFloderPath]) {
|
||||
[[NSFileManager defaultManager] createDirectoryAtPath:rootFloderPath withIntermediateDirectories:YES attributes:nil error:nil];
|
||||
}
|
||||
|
||||
NSString *cacheFilePath = @"";
|
||||
switch (_productionType) {
|
||||
case TFProductionTypeNovel:
|
||||
cacheFilePath = [rootFloderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", [@"BookCollectionFile" md5String]]];
|
||||
break;
|
||||
case TFProductionTypeComic:
|
||||
cacheFilePath = [rootFloderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", [@"ComicCollectionFile" md5String]]];
|
||||
break;
|
||||
case TFProductionTypeAudio:
|
||||
cacheFilePath = [rootFloderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", [@"AudioCollectionFile" md5String]]];
|
||||
break;
|
||||
case TFProductionTypeAi:
|
||||
cacheFilePath = [rootFloderPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", [@"AiCollectionFile" md5String]]];
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:cacheFilePath]) {
|
||||
[@[] writeToFile:cacheFilePath atomically:NO];
|
||||
}
|
||||
|
||||
return cacheFilePath;
|
||||
}
|
||||
|
||||
// 写入文件
|
||||
- (BOOL)writeToPlistFile
|
||||
{
|
||||
NSMutableArray *t_arr = [NSMutableArray array];
|
||||
|
||||
for (TFProductionModel *t_model in self.collectionArray) {
|
||||
[t_arr addObject:[t_model modelToJSONString]];
|
||||
}
|
||||
|
||||
// 写入文件
|
||||
if (![t_arr writeToFile:[self cacheFilePath] atomically:NO]) {
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
@end
|
||||
Reference in New Issue
Block a user