mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-07-20 22:01:50 +02:00
feat(torrents): add H&R system enable config
This commit is contained in:
2
config/env/torrents.js
vendored
2
config/env/torrents.js
vendored
@@ -964,6 +964,7 @@ module.exports = {
|
||||
* when admin/oper to delete a h&r torrent, system will auto remove all warning and number of user
|
||||
* NOTE: you can change these value at anytime if you understand it
|
||||
*
|
||||
* @enable: setting whether enable the H&R function
|
||||
* @condition: the condition of HnR warning, user must meet one of them before you receive the warning
|
||||
* @seedTime: torrent seed time, unit of day, default to 7 days
|
||||
* @seedTime_str: string desc of @seedTime
|
||||
@@ -975,6 +976,7 @@ module.exports = {
|
||||
* @checkWaringInterval_str: string desc of @checkWaringInterval
|
||||
*/
|
||||
hitAndRun: {
|
||||
enable: true,
|
||||
condition: {
|
||||
seedTime: 60 * 60 * 1000 * 24 * 7,
|
||||
seedTime_str: '7d',
|
||||
|
||||
@@ -22,6 +22,8 @@ var supportConfig = config.meanTorrentConfig.support;
|
||||
var backupConfig = config.meanTorrentConfig.backup;
|
||||
var announceConfig = config.meanTorrentConfig.announce;
|
||||
var signConfig = config.meanTorrentConfig.sign;
|
||||
var hnrConfig = config.meanTorrentConfig.hitAndRun;
|
||||
|
||||
var inbox = require('inbox');
|
||||
var simpleParser = require('mailparser').simpleParser;
|
||||
|
||||
@@ -71,7 +73,10 @@ module.exports = function (app) {
|
||||
|
||||
cronJobs.push(removeGhostPeers());
|
||||
cronJobs.push(checkUserAccountIdleStatus());
|
||||
cronJobs.push(countUsersHnrWarning());
|
||||
|
||||
if (hnrConfig.enable) {
|
||||
cronJobs.push(countUsersHnrWarning());
|
||||
}
|
||||
|
||||
if (supportConfig.mailTicketSupportService) {
|
||||
cronJobs.push(listenServiceEmail());
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
<dt class="h-line">{{ 'CA_TORRENT_ATTR' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<div class="checkbox checkbox-hnr">
|
||||
<label class="checkbox-inline">
|
||||
<label class="checkbox-inline" ng-if="vm.hnrConfig.enable">
|
||||
<input type="checkbox" ng-model="vm.filterHnR"
|
||||
ng-change="vm.onHnRChanged();"> {{ 'CA_TORRENT_HNR' | translate}}
|
||||
</label>
|
||||
|
||||
@@ -365,7 +365,7 @@ exports.announce = function (req, res) {
|
||||
if not find and torrent is h&r and user isn`t vip, then create complete record
|
||||
---------------------------------------------------------------*/
|
||||
function (done) {
|
||||
if (req.torrent.torrent_hnr && !req.passkeyuser.isVip) {
|
||||
if (hnrConfig.enable && req.torrent.torrent_hnr && !req.passkeyuser.isVip) {
|
||||
Complete.findOne({
|
||||
torrent: req.torrent._id,
|
||||
user: req.passkeyuser._id
|
||||
@@ -429,19 +429,23 @@ exports.announce = function (req, res) {
|
||||
---------------------------------------------------------------*/
|
||||
function (done) {
|
||||
if (!req.seeder && !req.passkeyuser.isVip && event(query.event) === EVENT_STARTED) {
|
||||
if (req.passkeyuser.hnr_warning >= hnrConfig.forbiddenDownloadMinWarningNumber) {
|
||||
if (!req.torrent.torrent_hnr) {
|
||||
done(190);
|
||||
} else {
|
||||
if (!req.completeTorrent) {
|
||||
done(191);
|
||||
if (hnrConfig.enable) {
|
||||
if (req.passkeyuser.hnr_warning >= hnrConfig.forbiddenDownloadMinWarningNumber) {
|
||||
if (!req.torrent.torrent_hnr) {
|
||||
done(190);
|
||||
} else {
|
||||
if (!req.completeTorrent.hnr_warning) {
|
||||
done(190);
|
||||
if (!req.completeTorrent) {
|
||||
done(191);
|
||||
} else {
|
||||
done(null);
|
||||
if (!req.completeTorrent.hnr_warning) {
|
||||
done(190);
|
||||
} else {
|
||||
done(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
done(null);
|
||||
}
|
||||
} else {
|
||||
done(null);
|
||||
@@ -711,7 +715,7 @@ exports.announce = function (req, res) {
|
||||
---------------------------------------------------------------*/
|
||||
function (curru, currd, done) {
|
||||
if (curru > 0 || currd > 0) {
|
||||
if (req.completeTorrent) {
|
||||
if (hnrConfig.enable && req.completeTorrent) {
|
||||
mtDebug.debugGreen('---------------WRITE COMPLETE DATA----------------', 'ANNOUNCE', true, req.passkeyuser);
|
||||
req.completeTorrent.update({
|
||||
$inc: {
|
||||
@@ -735,7 +739,7 @@ exports.announce = function (req, res) {
|
||||
---------------------------------------------------------------*/
|
||||
function (done) {
|
||||
if (!req.currentPeer.isNewCreated) {
|
||||
if (req.completeTorrent && req.completeTorrent.complete && event(query.event) !== EVENT_COMPLETED) {
|
||||
if (hnrConfig.enable && req.completeTorrent && req.completeTorrent.complete && event(query.event) !== EVENT_COMPLETED) {
|
||||
mtDebug.debugGreen('---------------UPDATE H&R COMPLETE TOTAL_SEED_TIME----------------', 'ANNOUNCE', true, req.passkeyuser);
|
||||
req.completeTorrent.update({
|
||||
$inc: {
|
||||
@@ -847,7 +851,7 @@ exports.announce = function (req, res) {
|
||||
---------------------------------------------------------------*/
|
||||
function (done) {
|
||||
if (!req.currentPeer.isNewCreated) {
|
||||
if (req.completeTorrent && event(query.event) !== EVENT_COMPLETED) {
|
||||
if (hnrConfig.enable && req.completeTorrent && event(query.event) !== EVENT_COMPLETED) {
|
||||
mtDebug.debugGreen('---------------COUNT H&R WARNING FOR USER----------------', 'ANNOUNCE', true, req.passkeyuser);
|
||||
req.completeTorrent.countHnRWarning(false, true);
|
||||
}
|
||||
@@ -864,7 +868,7 @@ exports.announce = function (req, res) {
|
||||
if (event(query.event) === EVENT_STOPPED) {
|
||||
mtDebug.debugGreen('---------------EVENT_STOPPED----------------', 'ANNOUNCE', true, req.passkeyuser);
|
||||
|
||||
if (req.completeTorrent) {
|
||||
if (hnrConfig.enable && req.completeTorrent) {
|
||||
req.completeTorrent.countHnRWarning(true, false);
|
||||
}
|
||||
removeCurrPeer(function () {
|
||||
@@ -937,7 +941,7 @@ exports.announce = function (req, res) {
|
||||
req.currentPeer.globalUpdateMethod(true);
|
||||
}
|
||||
|
||||
if (req.completeTorrent) {
|
||||
if (hnrConfig.enable && req.completeTorrent) {
|
||||
req.completeTorrent.globalUpdateMethod(true);
|
||||
}
|
||||
|
||||
@@ -1033,7 +1037,7 @@ exports.announce = function (req, res) {
|
||||
}).exec();
|
||||
|
||||
//update completeTorrent complete status
|
||||
if (req.completeTorrent) {
|
||||
if (hnrConfig.enable && req.completeTorrent) {
|
||||
req.completeTorrent.update({
|
||||
$set: {
|
||||
complete: true
|
||||
|
||||
@@ -1614,7 +1614,7 @@
|
||||
VIDEO: {
|
||||
SELF: 'Video Info',
|
||||
FORMAT: 'Format',
|
||||
Duration: 'Duration',
|
||||
DURATION: 'Duration',
|
||||
BITRATE: 'Bit Rate',
|
||||
WIDTH: 'Width',
|
||||
HEIGHT: 'Height',
|
||||
|
||||
@@ -181,12 +181,14 @@
|
||||
* checkHnRWarning
|
||||
*/
|
||||
vm.checkHnRWarning = function () {
|
||||
vm.getWarning();
|
||||
$interval(vm.getWarning, vm.hnrConfig.checkWaringInterval);
|
||||
if(vm.hnrConfig.enable) {
|
||||
vm.getWarning();
|
||||
$interval(vm.getWarning, vm.hnrConfig.checkWaringInterval);
|
||||
}
|
||||
};
|
||||
|
||||
vm.getWarning = function () {
|
||||
if (Authentication.user) {
|
||||
if (Authentication.user && vm.hnrConfig.enable) {
|
||||
UsersService.getUserWarningNumber()
|
||||
.then(function (data) {
|
||||
vm.user.hnr_warning = Authentication.user.hnr_warning = data.hnr_warning;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
vm.torrentSalesType = MeanTorrentConfig.meanTorrentConfig.torrentSalesType;
|
||||
vm.torrentRLevels = MeanTorrentConfig.meanTorrentConfig.torrentRecommendLevel;
|
||||
vm.salesGlobalConfig = MeanTorrentConfig.meanTorrentConfig.torrentGlobalSales;
|
||||
vm.hnrConfig = MeanTorrentConfig.meanTorrentConfig.hitAndRun;
|
||||
|
||||
/**
|
||||
* buildPager
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
<a ui-sref="{{item.state}}">
|
||||
<i class="fa fa-fw {{item.faIcon}} {{item.faClass}}"></i><span ng-bind="item.title" menu-title="{{item.title}}"></span>
|
||||
</a>
|
||||
<span class="badge menu-badge badge_danger" ng-show="vm.user.hnr_warning>0">{{vm.user.hnr_warning}}</span>
|
||||
<span class="badge menu-badge badge_danger" ng-show="vm.user.hnr_warning>0 && vm.hnrConfig.enable">{{vm.user.hnr_warning}}</span>
|
||||
</li>
|
||||
<li ui-sref-active="active" ng-repeat="item in vm.scoreMenu.items" class="menu-parent">
|
||||
<a ui-sref="{{item.state}}">
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
vm.signConfig = MeanTorrentConfig.meanTorrentConfig.sign;
|
||||
vm.announce = MeanTorrentConfig.meanTorrentConfig.announce;
|
||||
vm.itemsPerPageConfig = MeanTorrentConfig.meanTorrentConfig.itemsPerPage;
|
||||
vm.hnrConfig = MeanTorrentConfig.meanTorrentConfig.hitAndRun;
|
||||
|
||||
vm.invitationFields = {
|
||||
isOfficial: true
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
vm.signConfig = MeanTorrentConfig.meanTorrentConfig.sign;
|
||||
vm.user = Authentication.user;
|
||||
vm.announce = MeanTorrentConfig.meanTorrentConfig.announce;
|
||||
vm.hnrConfig = MeanTorrentConfig.meanTorrentConfig.hitAndRun;
|
||||
|
||||
vm.invitePopover = {
|
||||
title: 'INVITATION.TITLE_SEND',
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
<li>{{ 'STATUS_FIELD.SEEDED' | translate}}:{{ vm.selectedUser.seeded }}</li>
|
||||
<li>{{ 'STATUS_FIELD.LEECHED' | translate}}:{{ vm.selectedUser.leeched }}</li>
|
||||
<li>{{ 'STATUS_FIELD.FINISHED' | translate}}:{{ vm.selectedUser.finished }}</li>
|
||||
<li ng-if="vm.selectedUser.hnr_warning>0">
|
||||
<li ng-if="vm.selectedUser.hnr_warning>0 && vm.hnrConfig.enable">
|
||||
{{ 'STATUS_FIELD.HNR_WARNING' | translate}}:<span class="badge badge_danger">{{vm.selectedUser.hnr_warning}}</span>
|
||||
</li>
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
<li>{{ 'STATUS_FIELD.SEEDED' | translate}}:{{ vm.selectedUser.seeded }}</li>
|
||||
<li>{{ 'STATUS_FIELD.LEECHED' | translate}}:{{ vm.selectedUser.leeched }}</li>
|
||||
<li>{{ 'STATUS_FIELD.FINISHED' | translate}}:{{ vm.selectedUser.finished }}</li>
|
||||
<li ng-if="vm.selectedUser.hnr_warning>0">
|
||||
<li ng-if="vm.selectedUser.hnr_warning>0 && vm.hnrConfig.enable">
|
||||
{{ 'STATUS_FIELD.HNR_WARNING' | translate}}:<span class="badge badge_danger">{{vm.selectedUser.hnr_warning}}</span>
|
||||
</li>
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
vm.torrentRLevels = MeanTorrentConfig.meanTorrentConfig.torrentRecommendLevel;
|
||||
vm.torrentTypeConfig = MeanTorrentConfig.meanTorrentConfig.torrentType;
|
||||
vm.salesGlobalConfig = MeanTorrentConfig.meanTorrentConfig.torrentGlobalSales;
|
||||
vm.hnrConfig = MeanTorrentConfig.meanTorrentConfig.hitAndRun;
|
||||
|
||||
vm.torrentType = localStorageService.get('admin_last_selected_type') || 'movie';
|
||||
vm.filterVIP = isSelectedVipType(vm.torrentType);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
vm.torrentTypeConfig = MeanTorrentConfig.meanTorrentConfig.torrentType;
|
||||
vm.salesGlobalConfig = MeanTorrentConfig.meanTorrentConfig.torrentGlobalSales;
|
||||
vm.rssConfig = MeanTorrentConfig.meanTorrentConfig.rss;
|
||||
vm.hnrConfig = MeanTorrentConfig.meanTorrentConfig.hitAndRun;
|
||||
|
||||
vm.searchTags = [];
|
||||
vm.searchKey = $state.params.keys || '';
|
||||
|
||||
@@ -290,7 +290,7 @@ pre.prettyprint {
|
||||
background-color: #f7f7f7;
|
||||
border: solid 1px #ddd;
|
||||
border-radius: 3px;
|
||||
padding: 2px 3px 2px 25px;
|
||||
padding: 0 3px 0 25px;
|
||||
margin-bottom: 3px;
|
||||
&:hover {
|
||||
border: solid 1px @brand-primary;
|
||||
@@ -327,7 +327,7 @@ pre.prettyprint {
|
||||
background-color: #f7f7f7;
|
||||
border: solid 1px #ddd;
|
||||
border-radius: 3px;
|
||||
padding: 2px 3px 2px 25px;
|
||||
padding: 0 3px 0 25px;
|
||||
margin-bottom: 3px;
|
||||
margin-right: 4px;
|
||||
&:hover {
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
<span class="label label-se-info" ng-if="item.torrent_type == 'tvserial'"
|
||||
ng-click="$event.stopPropagation();">S{{item.torrent_seasons}}E{{item.torrent_episodes}}</span>
|
||||
|
||||
<span class="label label-hnr-info" ng-if="item.torrent_hnr" ng-class="{'used': parent.filterHnR}"
|
||||
<span class="label label-hnr-info" ng-if="item.torrent_hnr && vm.hnrConfig.enable" ng-class="{'used': parent.filterHnR}"
|
||||
ng-click="vm.onHnRClicked(); $event.stopPropagation();">H&R</span>
|
||||
|
||||
<span class="label label-vip-info" ng-if="item.torrent_vip" ng-class="{'used': parent.filterVIP}"
|
||||
@@ -227,7 +227,8 @@
|
||||
</button>
|
||||
</div>
|
||||
<div class="margin-top-2">
|
||||
<button class="btn col-xs-6 btn-xs btn-default" ng-click="vm.toggleHnR(item); $event.stopPropagation();">
|
||||
<button class="btn col-xs-6 btn-xs btn-default" ng-disabled="!vm.hnrConfig.enable"
|
||||
ng-click="vm.toggleHnR(item); $event.stopPropagation();">
|
||||
{{ (item.torrent_hnr ? 'ADMIN_BASIC_UNSET_HNR' : 'ADMIN_BASIC_SET_HNR') | translate}}
|
||||
</button>
|
||||
<button class="btn col-xs-6 btn-xs btn-default" ng-click="vm.toggleVIP(item); $event.stopPropagation();">
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
<dt class="h-line">{{ 'CA_TORRENT_ATTR' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span class="checkbox checkbox-hnr">
|
||||
<label class="checkbox-inline">
|
||||
<label class="checkbox-inline" ng-if="vm.hnrConfig.enable">
|
||||
<input type="checkbox" ng-model="vm.filterHnR" ng-change="vm.onHnRChanged();"> {{ 'CA_TORRENT_HNR' | translate}}
|
||||
</label>
|
||||
<label class="checkbox-inline" ng-if="!vm.isGlobalSaleNow()">
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
<dt class="h-line">{{ 'CA_TORRENT_ATTR' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<div class="checkbox checkbox-hnr">
|
||||
<label class="checkbox-inline">
|
||||
<label class="checkbox-inline" ng-if="vm.hnrConfig.enable">
|
||||
<input type="checkbox" ng-model="vm.filterHnR" ng-change="vm.onHnRChanged();"> {{ 'CA_TORRENT_HNR' | translate}}
|
||||
</label>
|
||||
<label class="checkbox-inline" ng-if="!vm.isGlobalSaleNow()">
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
vm.scoreLevelData = ScoreLevelService.getScoreLevelJson(vm.user.score);
|
||||
vm.announce = MeanTorrentConfig.meanTorrentConfig.announce;
|
||||
vm.signConfig = MeanTorrentConfig.meanTorrentConfig.sign;
|
||||
vm.hnrConfig = MeanTorrentConfig.meanTorrentConfig.hitAndRun;
|
||||
|
||||
/**
|
||||
* unIdle
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
vm.messageTo = messageTo;
|
||||
vm.isContextUserSelf = isContextUserSelf;
|
||||
vm.scoreLevelData = ScoreLevelService.getScoreLevelJson(vm.user.score);
|
||||
vm.hnrConfig = MeanTorrentConfig.meanTorrentConfig.hitAndRun;
|
||||
|
||||
mtDebug.info(user);
|
||||
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.FINISHED' | translate}}:</dt>
|
||||
<dd class="h-line">{{ vm.user.finished }}</dd>
|
||||
|
||||
<div ng-if="vm.user.hnr_warning>0">
|
||||
<div ng-if="vm.user.hnr_warning>0 && vm.hnrConfig.enable">
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.HNR_WARNING' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span class="badge badge_danger">{{vm.user.hnr_warning}}</span>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</h4>
|
||||
</span>
|
||||
|
||||
<div class="alert alert-warning text-center" role="alert" ng-if="vm.user.hnr_warning>0">
|
||||
<div class="alert alert-warning text-center" role="alert" ng-if="vm.user.hnr_warning>0 && vm.hnrConfig.enable">
|
||||
<span translate="WARNING_TOOLTIP" translate-values="{wnumber: vm.user.hnr_warning}"></span>
|
||||
<a ui-sref="status.warning">{{'WARNING_DETAIL_LINK' | translate}}</a>
|
||||
</div>
|
||||
@@ -184,7 +184,7 @@
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.FINISHED' | translate}}:</dt>
|
||||
<dd class="h-line">{{ vm.user.finished }}</dd>
|
||||
|
||||
<div ng-if="vm.user.hnr_warning>0">
|
||||
<div ng-if="vm.user.hnr_warning>0 && vm.hnrConfig.enable">
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.HNR_WARNING' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<span class="badge badge_danger">{{vm.user.hnr_warning}}</span>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<a><i class="fa fa-arrow-down fa-2x" aria-hidden="true"></i><span
|
||||
class="tab-title">{{'STATUS_DOWNLOADING' | translate}}</span></a>
|
||||
</li>
|
||||
<li ui-sref="status.warning" ui-sref-active="active" title="{{'STATUS_WARNING' | translate}}">
|
||||
<li ui-sref="status.warning" ui-sref-active="active" title="{{'STATUS_WARNING' | translate}}" ng-if="vm.hnrConfig.enable">
|
||||
<a><i class="fa fa-warning fa-2x" aria-hidden="true"></i><span class="tab-title">{{'STATUS_WARNING' | translate}}</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.FINISHED' | translate}}:</dt>
|
||||
<dd class="h-line">{{ vm.user.finished }}</span></dd>
|
||||
|
||||
<div ng-if="vm.user.hnr_warning>0">
|
||||
<div ng-if="vm.user.hnr_warning>0 && vm.hnrConfig.enable">
|
||||
<dt class="h-line">{{ 'STATUS_FIELD.HNR_WARNING' | translate}}:</dt>
|
||||
<dd class="h-line"><span class="badge badge_danger">{{vm.user.hnr_warning}}</span></dd>
|
||||
</div>
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
<dt class="h-line">{{ 'CA_TORRENT_ATTR' | translate}}:</dt>
|
||||
<dd class="h-line">
|
||||
<div class="checkbox checkbox-hnr">
|
||||
<label class="checkbox-inline">
|
||||
<label class="checkbox-inline" ng-if="vm.hnrConfig.enable">
|
||||
<input type="checkbox" ng-model="vm.filterHnR"
|
||||
ng-change="vm.onHnRChanged();"> {{ 'CA_TORRENT_HNR' | translate}}
|
||||
</label>
|
||||
|
||||
Reference in New Issue
Block a user