From abe51ee61b4a9b2b968f3d082bca90c06215a33b Mon Sep 17 00:00:00 2001 From: jonnyboy Date: Fri, 22 Mar 2013 12:18:53 -0400 Subject: [PATCH] created dev branch, added backfill parts, test ugo script to create releases without regexes - this is considered a wip --- README.md | 2 +- bin/backfill_parts.php | 45 + bin/backfill_parts_threaded.php | 80 ++ bin/lib/additional | 1 - bin/monitor.php | 38 +- bin/safer_backfill_parts.php | 1 + config.sh | 17 +- start.sh | 4 +- ugo/automake.php | 1029 +++++++++++++++ ugo/automake_threaded.php | 105 ++ ugo/makenzb.php | 111 ++ ugo/makenzb_threaded.php | 166 +++ ugo/misc_sorter3.php | 2193 +++++++++++++++++++++++++++++++ 13 files changed, 3781 insertions(+), 11 deletions(-) create mode 100644 bin/backfill_parts.php create mode 100644 bin/backfill_parts_threaded.php create mode 100644 ugo/automake.php create mode 100644 ugo/automake_threaded.php create mode 100644 ugo/makenzb.php create mode 100644 ugo/makenzb_threaded.php create mode 100644 ugo/misc_sorter3.php diff --git a/README.md b/README.md index 88ec930dc..93c28b695 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ * A how-to from [nevermind](http://pastebin.com/ibpi71iE) will help your db run a little faster/easier. It can be damaging if you make a mistake while doing this. - * A couple of autoinstallers are available to completely install everything needed for Ubuntu 12.10 Newznab+ installation. [zombu2](https://github.com/zombu2/nninstall) and [convict](https://github.com/rcconvict/nninstaller) each have simlar installers and can be found in the gits. + * A couple of autoinstallers are available to completely install everything needed for Ubuntu 12.10 Newznab+ installation. [zombu2](https://github.com/zombu2/nninstall) and [convict](https://github.com/rcconvict/nninstaller) each have simlar installers and can be found in the gits. If you prefor to do things yourself there is an excellent guide [here](http://oizopower.tweakblogs.net/blog/8524/newznab%2B-installatie-%28ubuntu-nginx-percona%29.html). * Join in the conversation at irc://irc.synirc.net/newznab-tmux. diff --git a/bin/backfill_parts.php b/bin/backfill_parts.php new file mode 100644 index 000000000..4cf97d3c4 --- /dev/null +++ b/bin/backfill_parts.php @@ -0,0 +1,45 @@ +queryOneRow(sprintf("select name from groups WHERE (first_record_postdate BETWEEN '${_date}' and now()) and (name = '$groupName')")) or die(mysql_error()); + if (isset($query)) + { + $backfill = new Backfill(); + $backfill->backfillPostAllGroups($groupName, $groupPost); + echo "Backfilling completed.\n"; + } + else + { + echo "Already have the target post, skipping the group.\n"; + } + } + else + { + $groupName = ''; + $backfill = new Backfill(); + $backfill->backfillPostAllGroups($groupName, $groupPost); + } + +?> diff --git a/bin/backfill_parts_threaded.php b/bin/backfill_parts_threaded.php new file mode 100644 index 000000000..188b37ae6 --- /dev/null +++ b/bin/backfill_parts_threaded.php @@ -0,0 +1,80 @@ +getActive(); +unset($groups); + +$ps = new PowerProcess; +$ps->RegisterCallback('psUpdateComplete'); +$ps->maxThreads = 5; +$ps->tickCount = 50000; // value in usecs. change this to 1000000 (one second) to reduce cpu use +$ps->threadTimeLimit = 0; // Disable child timeout + +echo "Starting kevin123's threaded backfill process\n\n"; + +while ($ps->RunControlCode()) +{ + // Start the parent loop + if (count($groupList)) + { + // We still have groups to process + if ($ps->SpawnReady()) + { + // Spawn another thread + $ps->threadData = array_pop($groupList); + echo "[Thread-MASTER] Spawning new thread. Still have " . count($groupList) ." group(s) to update after this\n"; + $ps->spawnThread(); + } + else + { + // There are no more slots available to run + //$ps->tick(); + //echo ".\n"; + } + } + else + { + // No more groups to process + echo "No more groups to process - Initiating shutdown\n"; + $ps->Shutdown(); + echo "Shutdown complete\n"; + } +} + +unset($groupList); + +if ($ps->RunThreadCode()) +{ + $group = $ps->threadData; + + $thread = sprintf("%05d",$ps->GetPID()); + + echo "[Thread-{$thread}] Begining backfill processing for group {$group['name']}\n"; + + $param = $group['name']; + + $dir = dirname(__FILE__); + $file = 'backfill_parts.php'; + + $output = shell_exec("php {$dir}/{$file} {$param}"); + //$output = shell_exec("/usr/bin/php -c /etc/php5/cli/php.ini {$dir}/{$file} {$param}"); + + echo "[Thread-{$thread}] Completed update for group {$group['name']}\n"; +} + +// Exit to call back to parent - Let know that child has completed +exit(0); + +// Create callback function +function psUpdateComplete() +{ + echo "[Thread-MASTER] Threaded backfill process complete\n"; +} + + +?> + diff --git a/bin/lib/additional b/bin/lib/additional index 47e9c447a..dc5637a80 100644 --- a/bin/lib/additional +++ b/bin/lib/additional @@ -6,7 +6,6 @@ require('lib/postprocess1.php'); $postprocess = new PostProcess1(true); $postprocess->processAdditional1(); - ?> diff --git a/bin/monitor.php b/bin/monitor.php index 264cc8d42..f39bd0b90 100644 --- a/bin/monitor.php +++ b/bin/monitor.php @@ -2,7 +2,7 @@ require(dirname(__FILE__)."/config.php"); require(WWW_DIR.'/lib/postprocess.php'); -$version="0.1r743"; +$version="0.1r744"; $db = new DB(); @@ -10,7 +10,7 @@ $db = new DB(); $qry = "SELECT COUNT( releases.categoryID ) AS cnt, parentID FROM releases INNER JOIN category ON releases.categoryID = category.ID WHERE parentID IS NOT NULL GROUP BY parentID"; //needs to be processed query -$proc = "SELECT ( SELECT COUNT( groupID ) AS cnt from releases where consoleinfoID IS NULL and categoryID BETWEEN 1000 AND 1999 ) AS console, ( SELECT COUNT( groupID ) AS cnt from releases where imdbID IS NULL and categoryID BETWEEN 2000 AND 2999 ) AS movies, ( SELECT COUNT( groupID ) AS cnt from releases where musicinfoID IS NULL and categoryID BETWEEN 3000 AND 3999 ) AS audio, ( SELECT COUNT( groupID ) AS cnt from releases r left join category c on c.ID = r.categoryID where (categoryID BETWEEN 4000 AND 4999 and ((r.passwordstatus between -6 and -1) or (r.haspreview = -1 and c.disablepreview = 0)))) AS pc, ( SELECT COUNT( groupID ) AS cnt from releases where rageID = -1 and categoryID BETWEEN 5000 AND 5999 ) AS tv, ( SELECT COUNT( groupID ) AS cnt from releases where bookinfoID IS NULL and categoryID = 7020 ) AS book, ( SELECT COUNT( groupID ) AS cnt from releases r left join category c on c.ID = r.categoryID where (r.passwordstatus between -6 and -1) or (r.haspreview = -1 and c.disablepreview = 0)) AS work, ( SELECT COUNT( groupID ) AS cnt from releases) AS releases, ( SELECT COUNT( groupID ) AS cnt FROM releases r WHERE r.releasenfoID = 0) AS nforemains, ( SELECT COUNT( groupID ) AS cnt FROM releases WHERE releasenfoID not in (0, -1)) AS nfo, ( SELECT table_rows AS cnt FROM information_schema.TABLES where table_name = 'parts' AND TABLE_SCHEMA = '".DB_NAME."' ) AS parts, ( SELECT concat(round((data_length+index_length)/(1024*1024*1024),2),'GB') AS cnt FROM information_schema.tables where table_name = 'parts' AND TABLE_SCHEMA = '".DB_NAME."' ) AS partsize, ( SELECT UNIX_TIMESTAMP(adddate) from releases order by adddate desc limit 1 ) AS newestadd, ( SELECT name from releases order by adddate desc limit 1 ) AS newestaddname"; +$proc = "SELECT ( SELECT COUNT( groupID ) AS cnt from releases where consoleinfoID IS NULL and categoryID BETWEEN 1000 AND 1999 ) AS console, ( SELECT COUNT( groupID ) AS cnt from releases where imdbID IS NULL and categoryID BETWEEN 2000 AND 2999 ) AS movies, ( SELECT COUNT( groupID ) AS cnt from releases where musicinfoID IS NULL and categoryID BETWEEN 3000 AND 3999 ) AS audio, ( SELECT COUNT( groupID ) AS cnt from releases r left join category c on c.ID = r.categoryID where (categoryID BETWEEN 4000 AND 4999 and ((r.passwordstatus between -6 and -1) or (r.haspreview = -1 and c.disablepreview = 0)))) AS pc, ( SELECT COUNT( groupID ) AS cnt from releases where rageID = -1 and categoryID BETWEEN 5000 AND 5999 ) AS tv, ( SELECT COUNT( groupID ) AS cnt from releases where bookinfoID IS NULL and categoryID = 7020 ) AS book, ( SELECT COUNT( groupID ) AS cnt from releases r left join category c on c.ID = r.categoryID where (r.passwordstatus between -6 and -1) or (r.haspreview = -1 and c.disablepreview = 0)) AS work, ( SELECT COUNT( groupID ) AS cnt from releases) AS releases, ( SELECT COUNT( groupID ) AS cnt FROM releases r WHERE r.releasenfoID = 0) AS nforemains, ( SELECT COUNT( groupID ) AS cnt FROM releases WHERE releasenfoID not in (0, -1)) AS nfo, ( SELECT table_rows AS cnt FROM information_schema.TABLES where table_name = 'parts' AND TABLE_SCHEMA = '".DB_NAME."' ) AS parts, ( SELECT table_rows AS cnt FROM information_schema.TABLES where table_name = 'binaries' AND TABLE_SCHEMA = '".DB_NAME."' ) AS binaries, ( SELECT concat(round((data_length+index_length)/(1024*1024*1024),2),'GB') AS cnt FROM information_schema.tables where table_name = 'parts' AND TABLE_SCHEMA = '".DB_NAME."' ) AS partsize, ( SELECT concat(round((data_length+index_length)/(1024*1024*1024),2),'GB') AS cnt FROM information_schema.tables where table_name = 'binaries' AND TABLE_SCHEMA = '".DB_NAME."' ) AS binariessize, ( SELECT UNIX_TIMESTAMP(adddate) from releases order by adddate desc limit 1 ) AS newestadd, ( SELECT name from releases order by adddate desc limit 1 ) AS newestaddname"; //$proc = "SELECT * FROM procCnt;"; //get first release inserted datetime and oldest posted datetime @@ -49,6 +49,7 @@ $_alienx = dirname(__FILE__)."/../alienx"; $_conf = dirname(__FILE__)."/../conf"; $_powerline = dirname(__FILE__)."/../powerline"; $_cj = dirname(__FILE__)."/../nnscripts"; +$_ugo = dirname(__FILE__)."/../ugo"; $NNPATH="{$array['NEWZPATH']}{$array['NEWZNAB_PATH']}"; $TESTING="{$array['NEWZPATH']}{$array['TESTING_PATH']}"; $killed="false"; @@ -179,11 +180,14 @@ $nfo_remaining_now = 0; $nfo_now = 0; $parts_rows = 0; $parts_size_gb = 0; +$binaries_rows = 0; +$binaries_size_gb = 0; $releases_now = 0; //$firstdate = TIME(); $newestname = "Unknown"; $newestdate = TIME(); $parts_rows_unformated = 0; +$binaries_rows_unformated = 0; $releases_now_formatted = 0; $nfo_percent = 0; $console_percent = 0; @@ -276,6 +280,7 @@ printf($mask, "Binaries", "$binaries_state", "$binaries_reason"); printf($mask, "Backfill", "$backfill_state", "$backfill_reason"); printf($mask, "Import", "$import_state", "$import_reason"); printf($mask, "Parts", "$parts_size_gb", "$parts_rows rows"); +printf($mask, "Binaries", "$binaries_size_gb", "$binaries_rows bins"); if ( $array['RAMDISK_PATH'] != "" ) { printf($mask, "Ramdisk", "$disk_use", "$disk_free"); } @@ -329,7 +334,7 @@ while( $i > 0 ) //allow tmux to create panes before running queries if ( $i == 1 ) { printf("\n\033[1;31mTmux panes safely created in "); - for($a=15;$a>-1;$a--) + for($a=10;$a>-1;$a--) { printf("$a.."); sleep(1); @@ -423,6 +428,11 @@ while( $i > 0 ) if ( @$proc_result[0]['parts'] != NULL ) { $parts_rows_unformated = $proc_result[0]['parts']; } if ( @$proc_result[0]['parts'] != NULL ) { $parts_rows = number_format($proc_result[0]['parts']); } if ( @$proc_result[0]['partsize'] != NULL ) { $parts_size_gb = $proc_result[0]['partsize']; } + + if ( @$proc_result[0]['binaries'] != NULL ) { $binaries_rows_unformated = $proc_result[0]['binaries']; } + if ( @$proc_result[0]['binaries'] != NULL ) { $binaries_rows = number_format($proc_result[0]['binaries']); } + if ( @$proc_result[0]['binariessize'] != NULL ) { $binaries_size_gb = $proc_result[0]['binariessize']; } + if ( @$proc_result[0]['releases'] ) { $releases_now = $proc_result[0]['releases']; } if ( @$proc_result[0]['releases'] ) { $releases_now_formatted = number_format($proc_result[0]['releases']); } if ( @$proc_result[0]['newestaddname'] ) { $newestname = $proc_result[0]['newestaddname']; } @@ -603,6 +613,7 @@ while( $i > 0 ) printf($mask, "Backfill", "$backfill_state", "$backfill_reason"); printf($mask, "Import", "$import_state", "$import_reason"); printf($mask, "Parts", "$parts_size_gb", "$parts_rows rows"); + printf($mask, "Binaries", "$binaries_size_gb", "$binaries_rows bins"); if ( $array['RAMDISK_PATH'] != "" ) { printf($mask, "Ramdisk", "$disk_use used", "$disk_free free"); } @@ -1179,11 +1190,16 @@ while( $i > 0 ) } //set command for running backfill - if (( $array['KEVIN_SAFER'] == "true" ) && ( $optimize_safe_to_run != "true" )) { + if ( $array['KEVIN_SAFER'] == "true" ) { $log = writelog($panes0[3]); $_backfill_cmd = "cd $_bin && $_php safer_backfill_parts.php 2>&1 $log"; - } else - if ( $array['BACKFILL_THREADS'] == "true" ) { + } elseif ( $array['KEVIN_BACKFILL_PARTS'] == "true" ) { + $log = writelog($panes0[3]); + $_backfill_cmd = "cd $_bin && $_php backfill_parts.php 2>&1 $log"; + } elseif ( $array['KEVIN_THREADED'] == "true" ) { + $log = writelog($panes0[3]); + $_backfill_cmd = "cd $_bin && $_php backfill_parts_threaded.php 2>&1 $log"; + } elseif ( $array['BACKFILL_THREADS'] == "true" ) { $log = writelog($panes0[3]); $_backfill_cmd = "cd $_bin && $_php backfill_threaded.php 2>&1 $log && $mysql_command_1 2>&1 $log"; } else { @@ -1346,7 +1362,15 @@ while( $i > 0 ) } //runs update_release and in 0.5 once if needed and exits - if (( $array['RELEASES'] == "true" ) && ( $optimize_safe_to_run != "true" )) { + if (( $array['RELEASES'] == "true" ) && ( $array['UGO_THREADED'] == "true" ) && ( $optimize_safe_to_run != "true" )) { + $color = get_color(); + $log = writelog($panes0[5]); + shell_exec("$_tmux respawnp -t {$array['TMUX_SESSION']}:0.5 'echo \"\033[38;5;\"$color\"m\" && $ds1 $panes0[5] $ds2 && cd $_ugo && $_php automake.php reset && $_php automake_threaded.php && cd $_bin && $_php update_releases.php 2>&1 $log && echo \" \033[1;0;33m\" && echo \"sleeping\033[38;5;\"$color\"m {$array['RELEASES_SLEEP']} seconds...\" && sleep {$array['RELEASES_SLEEP']} && $ds1 $panes0[5] $ds3' 2>&1 1> /dev/null"); + } elseif (( $array['RELEASES'] == "true" ) && ( $array['UGO'] == "true" ) && ( $optimize_safe_to_run != "true" )) { + $color = get_color(); + $log = writelog($panes0[5]); + shell_exec("$_tmux respawnp -t {$array['TMUX_SESSION']}:0.5 'echo \"\033[38;5;\"$color\"m\" && $ds1 $panes0[5] $ds2 && cd $_ugo && $_php automake.php reset && $_php automake.php && cd $_bin && $_php update_releases.php 2>&1 $log && echo \" \033[1;0;33m\" && echo \"sleeping\033[38;5;\"$color\"m {$array['RELEASES_SLEEP']} seconds...\" && sleep {$array['RELEASES_SLEEP']} && $ds1 $panes0[5] $ds3' 2>&1 1> /dev/null"); + } elseif (( $array['RELEASES'] == "true" ) && ( $optimize_safe_to_run != "true" )) { $color = get_color(); $log = writelog($panes0[5]); shell_exec("$_tmux respawnp -t {$array['TMUX_SESSION']}:0.5 'echo \"\033[38;5;\"$color\"m\" && $ds1 $panes0[5] $ds2 && cd $_bin && $_php update_releases.php 2>&1 $log && echo \" \033[1;0;33m\" && echo \"sleeping\033[38;5;\"$color\"m {$array['RELEASES_SLEEP']} seconds...\" && sleep {$array['RELEASES_SLEEP']} && $ds1 $panes0[5] $ds3' 2>&1 1> /dev/null"); diff --git a/bin/safer_backfill_parts.php b/bin/safer_backfill_parts.php index 3890440e7..d72736903 100644 --- a/bin/safer_backfill_parts.php +++ b/bin/safer_backfill_parts.php @@ -22,6 +22,7 @@ $_parts = $array['KEVIN_PARTS']; $db = new DB; +echo "Starting kevin123's safer backfill process\n\n"; $query = $db->queryOneRow(sprintf("select name from groups WHERE (first_record_postdate BETWEEN '${_date}' and now()) and (active = 1) order by name ASC")); $groupPost = $_parts; diff --git a/config.sh b/config.sh index a5775fcc3..8b15beb83 100644 --- a/config.sh +++ b/config.sh @@ -162,7 +162,13 @@ export MAXDAYS="210" #you also need to enable kevin's compression mod, those files are needed and you still need to enable BACKFILL export KEVIN_SAFER="false" -#set the date to go back to, must be in the format of YYYY-MM-DD, like 2012-06-24 +#use kevin123's backfill_parts.php instead of normal backfill +export KEVIN_BACKFILL_PARTS="false" + +#use kevin123's backfill_parts_threaded.php instead of normal backfill_threaded +export KEVIN_THREADED="false" + +#set the date to go back to, must be in the format of YYYY-MM-DD, like 2012-06-24, this is the date of the posted nzbs export KEVIN_DATE="2012-06-24" #set the number of articles/headers to download at one time @@ -213,6 +219,15 @@ export MISC_ONLY="false" ############################################################ +#run ugo's automake.php script to create releases, this does not use regexes and will run in a loop prior +#to update_releases.php, this can be considerably slower, but may give you release that were being missed +export UGO="false" + +#run automake_threaded.php +export UGO_THREADED="false" + +############################################################ + #Create releases, this is really only necessary to turn off when you only want to post process export RELEASES="false" diff --git a/start.sh b/start.sh index 95f7cfa2b..0ce9d99bb 100755 --- a/start.sh +++ b/start.sh @@ -38,7 +38,7 @@ if $TMUXCMD -q has-session -t $TMUX_SESSION; then else printf "The above is just a TMUX notice, it is saying TMUX, that you do not have a TMUX session currently running. It is not an error. It is TMUX" printf "\033]0; $TMUX_SESSION\007\003\n" - $TMUXCMD -f $TMUX_CONF new-session -d -s $TMUX_SESSION -n Monitor 'printf "\033]2;Monitor\033\\" && cd bin && echo "Monitor Started" && echo "It might take a minute for everything to spinup......" && $NICE -n$NICENESS $PHP monitor.php' + #$TMUXCMD -f $TMUX_CONF new-session -d -s $TMUX_SESSION -n Monitor 'printf "\033]2;Monitor\033\\" && cd bin && echo "Monitor Started" && echo "It might take a minute for everything to spinup......" && $NICE -n$NICENESS $PHP monitor.php' if [ ! -f $NEWZPATH/www/lib/postprocess.php.orig ]; then cp $NEWZPATH/www/lib/postprocess.php $NEWZPATH/www/lib/postprocess.php.orig @@ -242,6 +242,7 @@ else #start tmux #printf "\033]0; $TMUX_SESSION\007\003\n" #$TMUXCMD -f $TMUX_CONF attach-session - $TMUX_SESSION || new-session -d -s $TMUX_SESSION -n $TMUX_SESSION 'cd bin && echo "Monitor Started" && echo "It might take a minute for everything to spinup......" && $NICE -n 19 $PHP monitor.php' + $TMUXCMD -f $TMUX_CONF new-session -d -s $TMUX_SESSION -n Monitor 'printf "\033]2;Monitor\033\\" && cd bin && echo "Monitor Started" && echo "It might take a minute for everything to spinup......" && $NICE -n$NICENESS $PHP monitor.php' $TMUXCMD selectp -t 0 $TMUXCMD splitw -h -p 67 'printf "\033]2;update_binaries\033\\"' @@ -380,3 +381,4 @@ else fi exit + diff --git a/ugo/automake.php b/ugo/automake.php new file mode 100644 index 000000000..00f1fec04 --- /dev/null +++ b/ugo/automake.php @@ -0,0 +1,1029 @@ + 3) + { + $name = $relname; + } + + $name = cleanstr($name); + + $name = preg_replace('/\(?yenc\)?/iU','',$name); + + $name = preg_replace("/^(\[\d+\].\[.+\].\[#?a.b.[^\]]+\].(\[))/i", " ", $name); + + $name = preg_replace("/\[(?![^\[]+\])|\((?![^\(]+\))|\{(?![^\{]+\})/i", " ", $name); + + $name = preg_replace("/^\(?\?+\)/i", " ", $name); + + $name = preg_replace('/\bmac[\. ]osx|mac[\. ]os[\. ]x\b|macos[\. ]x\b/iU', 'macosx', $name); + + $name = preg_replace('/ - - /iU',' - ',$name); + + $name = preg_replace('/^[\.\-\_\<\|]|[\.\-\_\|]$|\"/iU',' ',$name); + + $name = preg_replace('/^\s|\s$/iU','',$name); + + $name = preg_replace('/ +/iU',' ',$name); + + $name = cleanstr($name); + + $name = preg_replace('/(\d{1,4}? ?)?([o0]f ?\d{1,4}?)$/iU','',$name); + + $name = preg_replace('/ ?[o0]f ?$/iU','',$name); + + $name = preg_replace('/ +/iU',' ',$name); + + + if ($qual != '') + { + $name = $name." ".$qual; + } + + echo "release: ".$name." * * * ".$parent['name']."\n"; + + $i = 1; + $parts = count($results); + $notyet = true; + + if (isset($results[0]) && ($results[0]['reltotalpart'] <= $parts) && $parts > 0 && is_string($name)) + { + $notyet = false; + echo "doing update: ".$parts." ".count($results)."\n"; + + $parts = count($results); + + $query = "Select * from `binaries` where `relname`= ".$db->escapeString($name).";"; + + $count = $db->query($query); + + if (count($count) > 0) + { + $nombre = $db->escapeString($name." ".$parent["ID"]); + $notyet = clearmatches ($name, $results, $code = -6); + return $notyet; + } else { + $nombre = $db->escapeString($name); + } + + foreach ($results as $r) + { + $query = sprintf("UPDATE `binaries` SET `relname`=%s, `relpart`=%d, `reltotalpart`=%d, `procstat`=%d, `regexID`=%d, `fromname`='%s' where procstat != 5 AND `ID` = %d", $nombre, $i++, $parts, $PROCSTAT_TITLEMATCHED, -(ord($sect) - ord("A") + 1), $mail, $r["ID"] ); + + $db->queryDirect($query); + + } + } else if ($parts == 1){ + } + + return $notyet; +} + +function cleanstr ($str = '', $full = false) +{ + + $str = preg_replace('/\(??yenc\)??/iU', '', $str); + $str = preg_replace('/(?<=\.\b[a-z][a-z0-9]{2})(\.\b\d{1,4}?\b)(?!\.[0-9])/U', ' ', $str); + $str1 = preg_replace('/\s*([<>]*?(www\.)?[^\[\<>"]+?(\.\b(com|net|org|info)\b(?!\.[a-zA-Z][a-zA-Z0-9]{2})[^\[\(\"<>]*?))/U',' ', $str); + + if (strlen($str1)>0) + $str = $str1; + + $str = preg_replace('/(\.\b[a-z][a-z0-9]{2}?\b|\.NFO|\.part[0-9]{1,4}?)+?/U',' ', $str); + $str = preg_replace('/\.vol\d{1,4}?\+\d{1,4}?|\binfo\b|\.par2\b|\bp\d{1,4}?\b/iU', ' ', $str); + +$str = preg_replace('/[\<\>]/iU', ' ', $str); + + $str = preg_replace('/[\"\:]|(?![a-z0-9])\'(?![a-z0-9])/',' ',$str); + $str = preg_replace('/\-(?!\d\d)/',' ',$str); + $str = preg_replace('/[\.](?!\d)(?1) + { + do + { + if (strcmp($arr[$i-1] ,$arr[$i]) == 0) + { + unset($arr[$i]); + $arr = array_values($arr); + } else { + $i++; + } + } while ($i < count($arr)); + } + + return $arr; +} + +function checknames ($post, $matches, $fullname, $parts, $r, $db, $mail) +{ + global $relname, $suffix; + global $nzb, $nfo; + global $pars, $files; + global $qual; + + echo "cn: ".$post."\n"; + echo "fn: ".$fullname."\n"; + + $qualities = array('480', '720', '720p', '1080', '1080p', 'ac3', 'audio_ts', 'avi', 'bd25', 'bd50', 'bdmv', 'bdrip', 'bluray', 'BR-Disk', 'BR-Rip', 'brrip', 'cam', 'camrip', 'dc', 'directors cut', 'divx\d?', 'dts', 'DVD-R', 'DVD-Rip', 'dvd', 'dvdr', 'dvdrip', 'dvdscr', 'extended', 'h264', 'hd', 'hdcam', 'hdts', 'iso', 'm2ts', 'mkv', 'mpeg', 'mpg', 'ntsc', 'pal', 'proper', 'ppvrip', 'r1', 'r2', 'r3', 'r4', 'r5', 'r6', 'r7', 'repack', 'rip', 'scr', 'screener', 'tc', 'telecine', 'telesync', 'ts', 'video_ts', 'unrated', 'x264', 'xvid'); + + $pattern = '/[\{\[\(]0*?1\/'.$r['totalParts'].'??[\]\}\)]$/iU'; + + $fullname = preg_replace($pattern, '', $fullname); + + $post = preg_replace($pattern, '', $post); + + $str = $post; + + if (preg_match('/^[\{\[\(]?(attn|att|attention)\:?/iU', $post)) + { + $str = preg_replace('/\batt[^ \:]*?\:?/iU','', $post); + + echo "attn: ".$str."\n"; + } + + if (!preg_match('/\d{1,4}?\/\d{1,4}?/iU', $fullname) || preg_match('/(File|Post) \d{1,4}? ?[o0]f ?\d{1,4}?/iU', $fullname)) + { + $str = preg_replace('/\d{1,4}? ?([o0]f ?\d{1,4}?)/iU','$1', $post); + } else { + if (preg_match('/\d{1,4}?\/\d{1,4}?[\]\}\)]/iU', $fullname) && preg_match('/ ?[o0]f ?\d{1,4}?/iU', $fullname)) + { + $str = preg_replace('/[\{\{\(]\d{1,4}?\/(\d{1,4}?)[\]\}\)]/iU','', $str); + echo "cn1: ".$str."\n"; + } else { + $str = preg_replace('/\d{1,4}? ?([o0]f ?\d{1,4}?)/iU','$1', $str); + $str = preg_replace('/\d{1,4}?\/(\d{1,4}?)/iU','$1', $str); + echo "cn2: ".$str."\n"; + } + } + + $postwords = $namemat = splitarray($str); + + $actual = array(); + + $nfo = 0; + $nzb = 0; + $segs = 0; + $segsarr = array(); + $pars = 0; + $files = 0; + $mode = array(); + $extras = 0; + + foreach ($matches as $m) + { + + $str = $m['name']; + + if ($suffix == '') + { + $tmp = preg_split('/\b(rar|zip|tar)\b/', $str, 0, PREG_SPLIT_DELIM_CAPTURE); + + if (count($tmp) > 1) + { + $suffix = ".".$tmp[1]; + } + } + + if (!preg_match('/\d{1,4}?\/\d{1,4}?/iU', $m['name'])) + { + $str = preg_replace('/\d{1,4}? ?([o0]f ?\d{1,4}?)/iU','$1', $m['name']); + } else { + if (preg_match('/\d{1,4}?\/\d{1,4}?[\]\}\)]/iU', $m['name']) && preg_match('/ ?[o0]f ?\d{1,4}?/iU', $m['name'])) + { + $str = preg_replace('/[\{\{\(]\d{1,4}?\/(\d{1,4}?)[\]\}\)]/iU','', $m['name']); + } else { + $str = preg_replace('/\d{1,4}? ?([o0]f ?\d{1,4}?)/iU','$1', $m['name']); + $str = preg_replace('/\d{1,4}?\/(\d{1,4}?)/iU','$1', $m['name']); + } + } + + $keywords = splitarray($str); + + $i = 0; + foreach ($postwords as $p) + { + foreach ($keywords as $k) + { + + if (strcmp($p,$k) == 0) + { + $i++; + } + } + } + $mode[] = $i; + } + +$mode = array_count_values($mode); +ksort($mode); + +end($mode); +$index = 0; +$key = 0; + +do { + $index = $index + current($mode); +echo "a".current($mode)."\n"; + $key++; + +} while (($index < $parts) && (prev($mode) !== false)); + +echo "index raw".$index." ".$key."\n"; + +if (current($mode) !== false) +{ + if ($index > $parts) + { + $j = current($mode); + echo "c".$j."\n"; + next($mode); + $index = $index - $j; + if ($index < $parts * 0.9) + { + prev($mode); + } + echo "d".current($mode)."\n"; + } +} else { +echo "e".current($mode)."\n"; + end($mode); +echo "f".current($mode)."\n"; +} + +if (current($mode) === false) +{ + end($mode); +echo "g".current($mode)."\n"; +} + +$index = key($mode); + +echo "index ".$index."\n"; + +foreach ($matches as $m) +{ + $str = $m['name']; + + if ($suffix == '') + { + $tmp = preg_split('/\b(rar|zip|tar)\b/', $str, 0, PREG_SPLIT_DELIM_CAPTURE); + + if (count($tmp) > 1) + { + $suffix = ".".$tmp[1]; + } + } + + if (!preg_match('/\d{1,4}?\/\d{1,4}?/iU', $m['name'])) + { + $str = preg_replace('/\d{1,4}? ?([o0]f ?\d{1,4}?)/iU','$1', $m['name']); + } else { + if (preg_match('/\d{1,4}?\/\d{1,4}?[\]\}\)]/iU', $m['name']) && preg_match('/ ?[o0]f ?\d{1,4}?/iU', $m['name'])) + { + $str = preg_replace('/[\{\{\(]\d{1,4}?\/(\d{1,4}?)[\]\}\)]/iU','', $m['name']); + } else { + $str = preg_replace('/\d{1,4}? ?([o0]f ?\d{1,4}?)/iU','$1', $m['name']); + $str = preg_replace('/\d{1,4}?\/(\d{1,4}?)/iU','$1', $m['name']); + } + } + + $keywords = splitarray($str); + + $i = 0; + foreach ($postwords as $p) + { + foreach ($keywords as $k) + { + + if (strcmp($p,$k) == 0) + { + $i++; + } + } + } + + if ($i >= $index && $index > 0) + { + + $actual[] =$m; + $str = preg_replace('/[\.](?!\d)(?= 1) + { + $pars = $pars + $m['totalParts']; + $extras++; + + } else if (preg_match('/sfv|\bnfo\b|\bnzb\b|par2/Ui', $str) >= 1) + { + $extras++; + } else + { + $segsarr[] = $m['totalParts']; + } + + $str = cleanstr($str); + + $str = preg_split("/[\s_\"]+/", $str, 0, PREG_SPLIT_DELIM_CAPTURE); + foreach ($str as $n) + { + $namemat[] = $n; + if (strcasecmp($n, 'nfo') == 0) + { + $nfo = $m['ID']; + } else if (strcasecmp($n, 'nzb') == 0) + { + $nzb = $m['ID']; + } + } + } +} + +echo "p2: ".$pars." files: ".array_sum($segsarr)." e: ".$extras."\n"; + +$files = count($segsarr); + +if (array_sum($segsarr) > 0) +{ + $segs = $pars /array_sum($segsarr) * ($files + $extras); +} + +$pars = round($segs); + +echo "p2: ".$pars." files: ".$files."\n"; + +$namemat = array_count_values($namemat); +asort($namemat); + +if (count($namemat) > 1) +{ + reset($namemat); + $i = 1; + $max = count($actual)-1; + + while (next($namemat) < $max && current($namemat) !== false) + { + $i++; + } + + $namemat = array_slice($namemat, $i,count($namemat), true); + + $j = 0; + $name = ''; + $imat = array(); + foreach ($actual as $m) + { + $i = 0; + + foreach ($namemat as $key => $value) + { + $str = $m['name']; + $str = preg_replace('/(\.(vol\d{1,4}?\+\d{1,4}?|sfv|part\d{1,4}?|nfo|\bnzb\b|par2))/iU','', $str); + if(strripos($str, $key) !== false) + { + $i++; + } + } + $imat[] = $i; + if ($i > $j) + { + $name = $str; + $j = $i; + } + } + + $name = cleanstr($name); + + echo 'name = '.$name."\n"; + + $name2 = ''; + + $name = preg_replace('/[\.\-](?!\d)(? $value) + { + + if (strcmp($key,$n) == 0) + { + $name2 = $name2.' '.$n; + unset($namemat[$key]); + } + } + } + + do { + $name2 = preg_replace('/^[\[\{\(](?!\d+\])|[\]\}\)]$|^ | $/iU','', $name2, -1, $count); + } while ($count > 0); + + echo "name2 = ".$name2."\n"; + $relname = cleanstr($name2); + echo "relname = ".$relname."\n"; + + $qual = ''; + + foreach ($namemat as $key => $value) + { + foreach($qualities as $q) + { + if (stripos ($key , $q) !== false) + { + $qual = $qual.' '.$q; + continue(2); + } + } + } + + if ($nfo == 0) + { + $tmp = addnfo ($mail, $r, $db, $relname); + + echo "addnfo: ".count($actual)."\n"; + + if (isset($tmp)) + { + + } + } +} +return $actual; +} + +function clearmatches ($name, $results, $code = -1) +{ + global $db; + + echo "clearing ".count($results)."\n"; + + global $relname; + + foreach ($results as $r) + { + if ($name == '') + { + $query = sprintf("update binaries set procstat=%d, `procattempts`=0, `regexID`=NULL, `relpart`=0, `reltotalpart`=0 where (ID = %d OR binaryhash ='%s') and procstat != 5" , $code, $r["ID"], $r['binaryhash'] ); + } else { + + $query = sprintf("update binaries set procstat=%d, `procattempts`=0, `regexID`=NULL, `relpart`=0, `reltotalpart`=0, `relname`=%s where (ID = %d OR binaryhash ='%s') and procstat != 5" , $code, $db->escapeString($relname), $r["ID"], $r['binaryhash']); + } + +// echo $query."\n"; + + $db->query($query); + } + return false; +} + +function checkmatches ($query, $r, $short = false) +{ + +global $relname, $nfo; +global $db; + + $query = $query." AND groupID=".$r['groupID']; + + if ($short) + { + $query = $query." AND `date` <= DATE_ADD('".$r['date']."', INTERVAL 6 HOUR) AND `date` >= DATE_SUB('".$r['date']."', INTERVAL 6 HOUR) "; + } else { + $query = $query." AND `date` <= DATE_ADD('".$r['date']."', INTERVAL 2 DAY) AND `date` >= DATE_SUB('".$r['date']."', INTERVAL 2 DAY) "; + } + + if (preg_match('/^(\[\d+\])/', $r['name'], $matches)) + { + $query = $query." AND name like '%".$matches[1]."%' "; + } + + + $query = $query." AND `procstat` != 5"; + + $query = $query." GROUP BY binaryhash"; + + $query = $query." ORDER BY name;"; + + $matches = $db->query($query); + + echo count($matches)." ".$query."\n"; + + if (count($matches) == 0) + { + $query = str_ireplace("match (name) against ('"," `name` like '%", $query); + $query = str_ireplace("' IN NATURAL LANGUAGE MODE)","%'", $query); + + $matches = $db->query($query); + + $matches = $db->query($query); + } + + return $matches; +} + +function makenzb ($nzb, $nzb1, $nfo, $nfo1) +{ + global $nntpconnected, $nntp; + global $relname; + + if (!$nntpconnected) + { + } + if ($nzb == 0) + { + $nzb = $nzb1; + } + + if ($nzb != 0) + { +echo "getting nzb\n"; + + $relname = preg_replace('/[\[\{\(]?\d{1,4}?\/\d{1,4}?[\]\}\)]?/iU','', $relname); + $relname = preg_replace('/\/|\:|^\.|^ | $|^[\[\]\{\}\(\)](?!\d+\])/iU','', $relname); + $relname = preg_replace('/^[\`\'\"\<\/]/iU','', $relname); + $relname = preg_replace('/^[\-\+\_]/iU','', $relname); + $relname = preg_replace('/( \d{1,4}?)? ?[o0]f ?\d{1,4}?$/iU','', $relname); + $relname = cleanstr($relname); + + } + if ($nfo == 0) + { + $nfo = $nfo1; + } + + if ($nfo != 0) + { +echo "getting nfo\n"; + + } +} + +function addnfo ($mail, $r, $db, $relname) +{ + $query = "SELECT * FROM `binaries` where match (name) against (".$db->escapeString($relname)." IN NATURAL LANGUAGE MODE)"; + + $query = $query." AND `name` like '%.nfo%'"; + + $query = $query." AND `fromname` like '%".$mail."%'"; + + $query = $query." AND groupID=".$r['groupID']; + + $query = $query." AND `date` <= DATE_ADD('".$r['date']."', INTERVAL 2 DAY) AND `date` >= DATE_SUB('".$r['date']."', INTERVAL 2 DAY) "; + + $query = $query." AND `procstat` != 5"; + + $query = $query." GROUP BY binaryhash"; + + $query = $query." limit 1;"; + + $matches = $db->query($query); + + if (isset($matches[0])) + { + return $matches[0]; + } else { + return null; + } +} + +function okresults (&$results, &$cuenta, $parts, $i, $patern, $patern2, $r, $mail, $dogn = true) +{ + global $pars, $relname; + global $db; + + echo "OKr CR: ".count($results)." P2: $pars P: $parts\n"; + + if (count($results) + $pars < $parts || count($results) > 2 * $parts) + { + $cuenta1 = preg_split($patern, $r['name'], 0, PREG_SPLIT_DELIM_CAPTURE); + + if (isset($cuenta1) && $dogn) + { + $cuenta1[0] = getname($cuenta1); + } + + if (!isset($cuenta1[$i]) || strlen($cuenta1[$i]) < 3) + { + $cuenta1[$i] = $cuenta1[0]; + } + + $cuenta1[0] = preg_replace($patern2 ,'', $cuenta1[$i]); + +echo "ok: ".$cuenta1[0]."\n"; + + $query = "SELECT * FROM `binaries` where name like '%".preg_replace('/\'/','\\\'', $cuenta1[0])."%'"; + + $query = $query." AND `fromname` like '%".$mail."%'"; + + $matches1 = checkmatches($query, $r); + + $relname1 = $relname; + + $pars1 = $pars; + + $results1 = checknames($cuenta1[0], $matches1, $r['name'], $parts, $r, $db, $mail); + +echo "OKr1 CR1: ".count($results1)." P2.1: $pars1 P: $parts\n"; + + if (abs(count($results1) + $pars - $parts) < abs(count($results) + $pars1 -$parts) && count($results1) < 2 * $parts) + { +echo "using OKr1\n"; + $matches = $matches1; + $cuenta[0] = $cuenta1[0]; + $results = $results1; + $relname1 = $relname; + $pars1 = $pars; + } + + $pars = $pars1; + $relname = $relname1; + if (count($results) > $parts) + { + $matches1 = checkmatches($query, $r, true); + + $relname1 = $relname; + + $pars1 = $pars; + + $results1 = checknames($cuenta1[0], $matches1, $r['name'], $parts, $r, $db, $mail); + + echo "OKr2 CR2: ".count($results1)." P2.2: $pars1 P: $parts\n"; + + if (abs(count($results1) + $pars - $parts) < abs(count($results) + $pars1 -$parts) && count($results1) < 2 * $parts) + { + echo "using OKr2\n"; + $matches = $matches1; + $cuenta[0] = $cuenta1[0]; + $results = $results1; + $relname1 = $relname; + $pars1 = $pars; + } + + $pars = $pars1; + $relname = $relname1; + + } + } +} + +function domatching ($pattern, $db, $r, $oldname, $sect) +{ + global $notyet, $jump; + + global $ptr; + + global $nzb, $nfo; + + global $pars, $files; + + global $relname; + + $cuenta = preg_split($pattern, $r['name'], 0, PREG_SPLIT_DELIM_CAPTURE); + + if (isset($cuenta[1]) && $notyet) + { + + echo "doing ".$sect."\n"; + + echo "1: ".$r['name']."\n"; + echo "2: ".$cuenta[0]."\n"; + + $cuenta[0] = getname($cuenta); + + if (strlen($cuenta[0]) <= 3) + { + } + + echo "3: ".$cuenta[0]."\n"; + + $query = "SELECT * FROM `binaries` where match (name) against (".$db->escapeString($cuenta[0])." IN NATURAL LANGUAGE MODE)"; + + $mail = preg_split('/(\b[a-z0-9\.\_\-\' ]+?\b@\b[a-z0-9\.\_\-\' ]+?\b)/Ui', $r['fromname'], 0, PREG_SPLIT_DELIM_CAPTURE); + + if (!isset($mail[1])) + { + $mail[1] = $r['fromname']; + } + + $mail[1] = preg_replace('/^\'|\'$/','', $db->escapeString($mail[1])); + + $query = $query." AND `fromname` like '%".$mail[1]."%'"; + + $query = $query." AND name like '%".preg_replace('/\'/','\\\'', $cuenta[1])."%'"; + + $matches = checkmatches($query, $r); + + $parts = intval(preg_replace('/[^\d]/','', $cuenta[1])); + + echo $cuenta[1]."\n"; + + $results = checknames($cuenta[0] , $matches, $r['name'], $parts, $r, $db, $mail[1]); + + $patern = $pattern; + $patern2 = '/(\.(\b[a-z][a-z0-9]{2}?\b|\bNFO|\bnfo\b|p\d{1,4}?|par2|part\d{1,4}?|vol\d{1,4}?\+\d{1,4}?)(?!\]).+?)+?/iU'; + okresults ($results, $cuenta, $parts, 2, $patern, $patern2, $r, $mail[1], false); + + $patern = $pattern; + $patern2 = '/(\.(\b[a-z][a-z0-9]{2}?\b|\bNFO|\bnfo\b|p\d{1,4}?|par2|part\d{1,4}?|vol\d{1,4}?\+\d{1,4}?)(?!\]).+?)+?/U'; + okresults ($results, $cuenta, $parts, 0, $patern, $patern2, $r, $mail[1], false); + + $patern = '/([^\"\)\]]+?)(\.(\b[a-z][a-z0-9]{2}?\b|\bNFO|\bnfo\b|info\b|p\d{1,4}?|par2|part\d{1,4}?|vol\d{1,4}?\+\d{1,4}?))+?/U'; + $patern2 = '/(\.(\b[a-z][a-z0-9]{2}?\b|\bNFO|\bnfo\b|p\d{1,4}?|par2|part\d{1,4}?|vol\d{1,4}?\+\d{1,4}?))+?(?!\])/U'; + okresults ($results, $cuenta, $parts, 1, $patern, $patern2, $r, $mail[1], true); + + $nfo1 = $nfo; + $nzb1 = $nzb; + $pars1 =$pars; + $cuenta1 = $cuenta; + $relname1 = $relname; + +echo "OK end CR: ".count($results)." P: ". $parts." P2: ".$pars."\n"; + + $results1 = checknames($r['name'], $matches, $r['name'], $parts, $r, $db, $mail[1]); + + if (abs(count($results1) + $pars - $parts) < abs(count($results) + $pars1 -$parts) && count($results1) < 2 * $parts) + { + $results = $results1; + $relname1 = $relname; + $pars1 = $pars; + } + + $pars = $pars1; + $relname = $relname1; + +echo "OK end CR: ".count($results)." P: ". $parts." P2: ".$pars."\n"; + + $name = getname($cuenta); + + echo $ptr." N:".$name." CM:".count($matches)." P:".$parts." CR:".count($results)." ".$r['age']." days ".$sect." ".$r['ID']."\n"; + + echo "stats: P2:".$pars." CR:".count($results)." P:".$parts." F:".$files." N:".$nzb."\n"; + + if (($nzb != 0 || $nzb1 != 0) && $files == 0) + { +echo "D1\n"; + makenzb($nzb, $nzb1, $nfo, $nfo1); + $jump = $jump && clearmatches($name, $results, -3); + } else if (((((count($results) + $pars >= $parts) && ($files > 0 || count($results) == $parts)) || (count($results) >= $parts && ($files > 0 || count($results) == $parts))) && ($files <= 2 * $parts)) && $oldname != $name) + { +echo "D2\n"; + $jump = $jump && makerelease($results, $r, $name, $db, $sect, $mail[1]); + } else if ((((count($results) + $pars >= $parts) && $files > 2) || (count($results) >= $parts && $files > 2)) && ($files < 2 * $parts)) + { +echo "D3\n"; + $jump = $jump && makerelease($results, $r, $name, $db, $sect, $mail[1]); + } else if (($nzb != 0 || $nzb1 != 0) && ($r['age'] >= 3 || $files == 0)) + { +echo "D4\n"; + makenzb($nzb, $nzb1, $nfo, $nfo1); + $jump = $jump && clearmatches($name, $results, -3); + } else if (count($results) >= $parts && $parts == 2 && $files == 2) { +echo "doing a 2 part release\n"; + $jump = $jump && makerelease($results, $r, $name, $db, $sect, $mail[1]); + } else if (count($results) == 1 && $parts == 1 && $r['totalParts'] > 10 && $nzb == 0 && $nzb1 == 0) { +echo "doing a 1 part release\n"; + $jump = $jump && makerelease($results, $r, $name, $db, $sect, $mail[1]); + } else if (count($results) <= 2 * $parts || count($results) > 0) { +echo "clearmatches ".$sect."\n"; +echo "stats: ".$pars." ".count($results)." ".$parts." ".$files." ".$nzb."\n"; + $jump = $jump && clearmatches('', $results); + } else { +echo "skipping\n"; +echo "stats: ".$pars." ".count($results)." ".$parts." ".$files." ".$nzb."\n"; + } + $notyet = false; + } +} + +$nzb = 0; +$nfo = 0; +$pars = 0; +$files = 0; +$qual = ''; + +$nntpconnected = false; + +$db = new Db; +$nntp = new Nntp; + +echo "starting auto matcher\n"; +$time = microtime(true); + +$ptr = 0; +$i = 0; +$j = 0; +$oldname = ''; +$name = "*"; +$oldid = 0; + +if (isset($argv[1])) + { + echo "doing group ".$argv[1]."\n"; + } + +do { + +if (isset($argv[1])) + { + $query = "SELECT *, hour(TIMEDIFF(now(), `date`))/24 as age from binaries b where b.`ID` in (select a.ID from binaries a where a.`procstat`=0 AND a.groupID = ".$argv[1]." AND a.`name` REGEXP '([0-9] ?([o0]f|\\\\/) ?[0-9])|([\\\\(\\\\{\\\\[]?[0-9]+ *(segs|parts))' group by a.binaryhash order by null) limit ".$ptr.", 2"; + + $rel = $db->query($query); + } else { + + $rel = $db->query("UPDATE `binaries` SET `procstat`=0,`procattempts`=0,`regexID`=NULL, `relpart`=0,`reltotalpart`=0,`relname`=NULL WHERE procstat = -6"); + + $query = "SELECT *, hour(TIMEDIFF(now(), `date`))/24 as age from binaries b where b.`ID` in (select a.ID from binaries a where a.`procstat`=0 AND a.`name` REGEXP '([0-9] ?([o0]f|\\\\/) ?[0-9])|([\\\\(\\\\{\\\\[]?[0-9]+ *(segs|parts))' order by a.`groupID`, a.`name`) group by binaryhash order by null limit ".$ptr.", 2"; + + $rel = $db->query($query); + } + +echo " * *\n"; +echo " * * * \n"; +echo " * * * *\n"; + + if (isset($rel[0])) + { + if ($oldid == $rel[0]['ID']) + { + $ptr++; + continue; + } + $oldid = $rel[0]['ID']; + } + + $relnum = count($rel); + + if ($relnum > 0) + { +echo "relnum is $relnum\n"; + foreach ($rel as $r) + { + $j++; + + $suffix = ''; + $notyet = true; + $jump = true; + + echo "name: ".$r['name']." ".$r['ID']."\n"; + + $relname = ''; + + $pattern = '/[\{\[\(]0*?1\/'.$r['totalParts'].'??[\]\}\)]$/iU'; + + $r['name'] = preg_replace($pattern, '', $r['name']); + + $pattern = '/(?:File|Post) \d{1,4}? ?[o0]f ?(\d{1,4}?)/iU'; + + domatching($pattern, $db, $r, $oldname, "A"); + + $pattern = '/(? 0 && $ptr <10000); +echo "finnis ". $i." ".$j."\n"; +if ($nntpconnected) +{ + $nntp->doQuit(); + $nntpconnected = false; +} + +unset($db); +unset($nntp); +$time = microtime(true) - $time; +echo "time = ".$time."\n"; + +//sql code to reset binaries (nothing processed) +//UPDATE `binaries` SET `procstat`=0,`procattempts`=0,`regexID`=NULL, `relpart`=0,`reltotalpart`=0,`relname`=NULL WHERE 1 = 1 + +//sql code to see the releases +//SELECT distinct `relname`, `name`, `reltotalpart`, count(*), `groupID`, `ID`, `procstat`, `regexID` FROM `binaries` where reltotalpart > 0 and procstat = 5 group by `relname` ORDER BY count(*) DESC +//SELECT relname, SUM(reltotalpart) AS reltotalpart, groupID, reqID, fromname, SUM(num) AS num, CASE WHEN regexID < 0 THEN 1 ELSE coalesce(g.minfilestoformrelease, s.minfilestoformrelease) END as minfilestoformrelease FROM ( SELECT relname, reltotalpart, groupID, reqID, fromname, regexID, COUNT(ID) AS num FROM binaries WHERE procstat = 5 GROUP BY relname, reltotalpart, groupID, reqID, fromname ORDER BY NULL ) x left outer join groups g on g.ID = x.groupID inner join ( select value as minfilestoformrelease from site where setting = 'minfilestoformrelease' ) s GROUP BY relname, groupID, reqID, fromname, minfilestoformrelease ORDER BY NULL +//SELECT nombre, bID groupID, reqID, SUM(num) AS num FROM ( SELECT name as nombre, relname, `binaries`.`ID` AS bID, `regexID`, reltotalpart, groupID, reqID, fromname, COUNT(ID) AS num FROM binaries WHERE procstat = -1 GROUP BY relname, reltotalpart, groupID, reqID, fromname ORDER BY NULL ) x LEFT OUTER JOIN groups g ON g.ID = x.groupID INNER JOIN ( SELECT VALUE AS minfilestoformrelease FROM site WHERE setting = 'minfilestoformrelease' ) s GROUP BY relname, groupID, reqID, fromname ORDER BY `num` desc + +//sql code to see what didn't get released +//SELECT nombre, SUM(num) AS num, bid, groupID, CASE WHEN regexID < 0 THEN 1 ELSE coalesce(g.minfilestoformrelease, s.minfilestoformrelease) END as minfilestoformrelease FROM ( SELECT name as nombre, ID as bid, relname, date, reltotalpart, groupID, reqID, fromname, regexID, COUNT(ID) AS num FROM binaries WHERE procstat = -1 GROUP BY relname, reltotalpart, groupID, reqID, fromname ORDER BY NULL ) x left outer join groups g on g.ID = x.groupID inner join ( select value as minfilestoformrelease from site where setting = 'minfilestoformrelease' ) s GROUP BY relname, groupID, reqID, fromname, minfilestoformrelease ORDER BY `num` desc + +//sql code to see the state of the binaries (-3 nzb to be dled, -2 spam, -1 can't processed, 0 unprocessed, 5 ready for release +//SELECT `procstat` , COUNT( * ), sum(totalParts) FROM `binaries` GROUP BY `procstat` + +//sql code to see how many potential records can be processed by the assmembler +//SELECT count(*) FROM `binaries` where `procstat`=0 AND name REGEXP '([0-9] ?(of|\\/) ?[0-9])|([\\(\\{\\[]?[0-9]+ *(segs|parts))' order by `groupID`, `name` + +//SELECT * FROM `binaries` WHERE `date` < DATE_SUB(now(), INTERVAL 4 DAY) AND `name` LIKE '%.nzb%' and `procstat` != 5 ORDER BY `binaries`.`name` ASC + +//sql code to clean orphaned binaries's records +//select * FROM `binaries` WHERE `ID` NOT IN (SELECT p.`binaryID` FROM `parts` p) +//delete FROM parts WHERE `binaryID` NOT IN (SELECT b.id FROM binaries b) + +//select * FROM `parts` WHERE NOT EXISTS(SELECT ID FROM `binaries`); + +//ALTER TABLE `newznab`.`binaries` ADD INDEX ( `binaryhash` ) + +?> diff --git a/ugo/automake_threaded.php b/ugo/automake_threaded.php new file mode 100644 index 000000000..6c4332d51 --- /dev/null +++ b/ugo/automake_threaded.php @@ -0,0 +1,105 @@ +query("UPDATE `binaries` SET `procstat`=0,`procattempts`=0,`regexID`=NULL, `relpart`=0,`reltotalpart`=0,`relname`=NULL WHERE procstat not in (4, 6)"); + } +} + +$rel = $db->query("UPDATE `binaries` SET `procstat`=0,`procattempts`=0,`regexID`=NULL, `relpart`=0,`reltotalpart`=0,`relname`=NULL WHERE procstat = -6"); + +$query = "SELECT count(*), groups.`name`, groups.ID"; +$query = $query." FROM binaries INNER JOIN groups ON binaries.groupID = groups.ID"; +$query = $query." WHERE binaries.procstat = 0"; +$query = $query." GROUP BY groups.ID ORDER BY count(*) asc"; + +$groupList = $db->query($query); +unset($db); + +$ps = new PowerProcess; +$ps->RegisterCallback('psUpdateComplete'); +$ps->maxChildren = 8; +$ps->tickCount = 10000; // value in usecs. change this to 1000000 (one second) to reduce cpu use +$ps->threadTimeLimit = 0; // Disable child timeout + +$tim = microtime(true) - $time; +echo "time = ".$tim."\n"; + +echo "Starting threaded assembly process\n"; + +while ($ps->RunControlCode()) +{ + // Start the parent loop + if (count($groupList)) + { + // We still have groups to process + if ($ps->SpawnReady()) + { + // Spawn another thread + $ps->threadData = array_pop($groupList); + echo "[Thread-MASTER] Spawning new thread. Still have " . count($groupList) ." group(s) to update after this\n"; + $ps->spawnThread(); + } + else + { + // There are no more slots available to run + //$ps->tick(); + //echo ".\n"; + } + } + else + { + // No more groups to process + echo "No more groups to process - Initiating shutdown\n"; + $ps->Shutdown(); + echo "Shutdown complete\n"; + } +} +$tim = microtime(true) - $time; +echo "time = ".$tim."\n"; +unset($groupList); + +if ($ps->RunThreadCode()) +{ + $group = $ps->threadData; + + $thread = sprintf("%05d",$ps->GetPID()); + + echo "[Thread-{$thread}] Begining assembly processing for group {$group['name']}\n"; + + $param = $group['ID']; + + $dir = dirname(__FILE__); + $file = 'automake.php'; + + $output = shell_exec("php {$dir}/{$file} {$param}"); + + echo "[Thread-{$thread}] Completed update for group {$group['name']}\n"; + $tim = microtime(true) - $time; + echo "time = ".$tim."\n"; +} + +// Exit to call back to parent - Let know that child has completed +exit(0); + +// Create callback function +function psUpdateComplete() +{ + echo "[Thread-MASTER] Threaded assembly process complete\n"; +} + +?> diff --git a/ugo/makenzb.php b/ugo/makenzb.php new file mode 100644 index 000000000..cd662421f --- /dev/null +++ b/ugo/makenzb.php @@ -0,0 +1,111 @@ +queryOneRow($query); + + if (!isset($name)) + { + $name = $row['relname']; + } + + if (preg_match('/\.nzb\b/i', $row['name']) && $row['size'] < 10000000) + { +echo "doing nzb\n"; + $nntp = new Nntp; + if ($nntp->doConnect()) + { + $bin = $nntp->getBinary($id); + + $name = preg_replace('/ /','_',$name); + + if (file_exists($path.$name.".nzb")) + { + $name = $name." ".$id; + } + + if (strlen($bin) == 0) + $ok = false; + elseif (file_put_contents($path.$name.".nzb", $bin) == 0) + $ok = false; + + } + $nntp->doQuit(); + + unset($nntp); + unset($bin); + } + + if ($ok) + { + echo "clearing \n"; + $query = "UPDATE `binaries` SET `procstat` = 6 WHERE ID = ".$id; + + $db->query($query); + + } + +} + + +mb_internal_encoding("UTF-8"); + +$db = new Db; + +if (isset($argv[1])) +{ + if (isset($argv[2])) + { + makenzb($argv[1], $argv[2]); + } else { + makenzb($argv[1]); + } +} else { + + $db->query("UPDATE `binaries` SET `binaries`.`procstat` = 6 WHERE `binaries`.`procstat` = - 3 AND binaries.ID NOT IN ( SELECT `parts`.`binaryID` FROM `parts` )"); + + $rel = $db->query("SELECT * FROM `binaries` WHERE `procstat` = -3"); + + foreach($rel as $bin) + { + + $name = $bin['relname']; + + $name = preg_replace('/yenc/iU',' ',$name); + + $name = preg_replace('/\d+?\/\d+?/iU',' ',$name); + + $name = preg_replace('/[\(\)\{\}\[\]]/iU',' ',$name); + + $name = preg_replace('/[\`\'\"\:\/\-\<\>]/iU',' ',$name); + + $name = preg_replace('/\.(?!nzb)/iU',' ',$name); + + $name = preg_replace('/ +?/iU',' ',$name); + + $name = preg_replace('/^ | $/iU','',$name); + + $name = preg_replace('/ /','_',$name); + + $id = $bin['ID']; + + echo "doing $name\n"; + + makenzb($id, $name); + + } +} + + +unset($db); +?> diff --git a/ugo/makenzb_threaded.php b/ugo/makenzb_threaded.php new file mode 100644 index 000000000..803fbaf40 --- /dev/null +++ b/ugo/makenzb_threaded.php @@ -0,0 +1,166 @@ +RegisterCallback('psUpdateComplete'); +$ps->maxChildren = 2; +$ps->tickCount = 10000; // value in usecs. change this to 1000000 (one second) to reduce cpu use +$ps->threadTimeLimit = 0; // Disable child timeout + +$db = new Db; + +$rel = $db->query("SELECT * FROM `binaries` WHERE `procstat` = -3"); + +unset($db); + +echo "Starting threaded nzb exporter process\n"; + +while ($ps->RunControlCode()) +{ + // Start the parent loop + if (count($rel)) + { + // We still have groups to process + if ($ps->SpawnReady()) + { + // Spawn another thread + $ps->threadData = array_pop($rel); + echo "[Thread-MASTER] Spawning new thread. Still have " . count($rel) ." nzb(s) to update after this\n"; + $ps->spawnThread(); + } + else + { + // There are no more slots available to run + //$ps->tick(); + //echo ".\n"; + } + } + else + { + // No more groups to process +// $query = "UPDATE `binaries` SET `procstat` = 6 WHERE `procstat` = -3 OR `procstat` = -2"; + $db = new Db; + //var_dump($db->query($query)); + echo "No more nzbs to process - Initiating shutdown\n"; + $ps->Shutdown(); + echo "Shutdown complete\n"; + + $path = FS_ROOT."/nzbs/"; + + $filestoprocess = glob($path."*.nzb"); + + foreach($filestoprocess as $nzbFile) + { + + $xml = file_get_contents( $nzbFile ); + + $matches = preg_split('/\A(\<\?xml[^\r\n]+?\?\>)\s*\R+/iU', $xml, 0, PREG_SPLIT_DELIM_CAPTURE); + + $name = preg_split('/\.nzb$/i', $nzbFile, 0, PREG_SPLIT_DELIM_CAPTURE); + + $name = $name[0]; + + $marker = ''; + + foreach ($matches as $m) + { + if (preg_match('/^(\<\?xml[^\r\n]+?\?\>)/iU', $m)) + { + echo "$m\n"; + $marker = $m; + continue; + } + } + + + if (!empty($marker)) + { + $matches = preg_split('/('.preg_quote($marker).'\s*\R+)/iU', $xml, 0, PREG_SPLIT_DELIM_CAPTURE); + + if (strlen($matches[0]) == 0) + { + unset($matches[0]); + $matches = array_values($matches); + } + + echo count($matches)."\n"; + + if (count($matches) > 2) + { + for ($i = 0; $i < count($matches); $i = $i + 2) + { + echo $i."\n"; + $outxml = $matches[$i] . $matches[$i + 1]; + $fileout = $name . '.' . $i . '.nzb'; + file_put_contents($fileout, $outxml); + echo $fileout."\n"; + } + } + } + } + } +} + +unset($rel); +unset($db); + +if ($ps->RunThreadCode()) +{ + $bin = $ps->threadData; + + $thread = sprintf("%05d",$ps->GetPID()); + + echo "[Thread-{$thread}] Begining processing for nzb {$bin['ID']}\n"; + + $name = $bin['relname']; + + $name = preg_replace('/yenc/iU',' ',$name); + + $name = preg_replace('/\d+?\/\d+?/iU',' ',$name); + + $name = preg_replace('/[\(\)\{\}\[\]]/iU',' ',$name); + + $name = preg_replace('/[\`\'\"\:\/\-\<\>]/iU',' ',$name); + + $name = preg_replace('/\.(?!nzb)/iU',' ',$name); + + $name = preg_replace('/ +?/iU',' ',$name); + + $name = preg_replace('/^ | $/iU','',$name); + + $name = preg_replace('/ /','_',$name); + + $id = $bin['ID']; + + if ($name == '') + { + $name = $id; + } + + echo "\nname: ".$name." \n"; + + $dir = dirname(__FILE__); + $file = 'makenzb.php'; + +// echo "php {$dir}/{$file} {$id} {'$name'}"; + + $output = shell_exec("php {$dir}/{$file} {$id} {$name}"); + + echo "[Thread-{$thread}] Completed update for {$bin['name']}\n"; +} + +// Exit to call back to parent - Let know that child has completed +exit(0); + +// Create callback function +function psUpdateComplete() +{ + echo "Threaded export process complete\n"; +} + +?> diff --git a/ugo/misc_sorter3.php b/ugo/misc_sorter3.php new file mode 100644 index 000000000..7d16946af --- /dev/null +++ b/ugo/misc_sorter3.php @@ -0,0 +1,2193 @@ + 1) + $author = trim($tmp[1]." ".$tmp[0]); + + $rel = $book->getBookInfoByName($author, $title); + + echo "book1 "; + var_dump($rel); + + if ($rel === false) + { + $query = "Select * from `bookinfo` WHERE `title` LIKE '%".$title."%' AND ID in (SELECT ID FROM `bookinfo` WHERE `author` sounds LIKE '".$author."')"; + $rel = $db->query($query); + + echo "book2 "; + var_dump($rel); + + if (isset($rel[0]["ID"])) + { + $bookID = $rel[0]["ID"]; + } else { + + $bookID = $book->updateBookInfo($author, $title); + } + } else { + $bookID = $rel['ID']; + } + unset($book); + echo "book ".$bookID."\n"; + return $bookID; +} + + +function findmusicname($row, $cat = 3010) +{ + global $db; + $ok = false; + + $query = "SELECT * FROM releases WHERE ( releases.passwordstatus < 0 AND releases.haspreview < 0 ) AND ID = ".$row['ID']; + $rel = $db->queryOneRow($query); + + if ($rel !== false) + return false; + + $query = "SELECT releasevideo.releaseID FROM releasevideo WHERE releasevideo.releaseID = ".$row['ID']; + $rel = $db->queryOneRow($query); + + if ($rel !== false) + return false; + + $query = "SELECT releasefiles.releaseID, releasefiles.`name` FROM releasefiles INNER JOIN releases ON releasefiles.releaseID = releases.ID WHERE releases.ID = ".$row['ID']." order by releasefiles.`name`"; + $rel = $db->query($query); + + $name = ''; + $ok = false; + + $m3u = ''; + $alt = ''; + $mp3 = false; + $mp3name = ''; + $files = 0; + $extras = 0; + $folder = ''; + $bookId = 0; + $musicId = 0; + + + if (count($rel) > 0) + { + echo "findmusicname ".$row['ID']." ".count($rel)."\n"; + foreach($rel as $r) + { + $sub = $r['name']."\n"; + + $sub = preg_replace('/[\x01-\x1f]/', '', $sub); + + $sub = preg_replace('/(? 0.7) && $mp3)." ".$mp3." ".$m3u."\n"; + + if (($m3u != '' || (($files + $extras) / count($rel) > 0.7)) && $mp3) + { + $name = $m3u; + + if ($files == 1) + $name = $mp3name; + + if (empty($name)) + { + $name = matchnames($row['name'], $alt); + } + + echo $row['guid']." ".$name.' '.$mp3.' '.($files + $extras) / count($rel)."\n"; + } + + + // if (preg_match('/\.mp3|\.m3u|\.sfv|\.nfo|\.flac/|\.asf/', $r['name'])) + // echo "release file ".$r['name']."\n"; + + $name = preg_replace("/^\d+\-/i", '', $name); + $name = trim(preg_replace("/\\\\|^ +| +$/i", ' ', $name)); + +echo "file name $name\n"; + + } else { + $name = domusicfiles ($row); + } + +echo "found name $name\n"; + + if ($name != '') + { + $music = new Music(); + $result = $music->parseArtist($name); + $artist = $result['artist']; + $album = $result['album']; + + if (empty($album) && empty($artist)) + $album = $name; + +echo "1artist = $artist album = $album\n"; + + $album = stripname($album); + $artist = stripname($artist); + + $artist = preg_replace('/\d+/', '', $artist); + + $tmp = explode(",", $artist); + + if (count($tmp) > 1) + $artist = trim($tmp[1]." ".$tmp[0]); + + +echo "2artist = $artist album = $album\n"; + + $rel = $music->getMusicInfoByName($artist, $album); +// var_dump($rel); + $musicId = $rel['ID']; + + if ($musicId <= 1) + { + echo "amazon music1 "; + $musicId = $music->updateMusicInfo($artist, $album, 0); + + if ($musicId === false) + { +// $book = new Book(true); +// $bookId = $book->updateBookInfo($artist, $album); +// unset($book); + $bookId = findbookid ($artist, $album); + } +//var_dump($musicId); + } +echo "music name: $name $musicId $bookId\n"; + if ($musicId > 1) + { + $ok = dodbupdate($row['ID'], $cat, $name, $musicId, 'music'); + } else if ($bookId > 0) { + $ok = dodbupdate($row['ID'], 3030, $name, $bookId, 'book'); + } else { + if (preg_match('/book/i', $row['gname'])) + $ok = dodbupdate($row['ID'], 3030, $name); + else + $ok = dodbupdate($row['ID'], $cat, $name); + } + + unset($music); + } + return $ok; +} + +function stripname($name) +{ + + global $qualities; + + $quality = preg_replace('/(.+?)/iU', "/\b\\1\b.*?$/iU", $qualities); + +// var_dump($quality); + + $name1 = $name; + + do { + $original = $name1; +// echo "fm1: $name1\n"; + $name1 = preg_replace($quality, " ", $name1); + $name1 = preg_replace('/(as )?(requested|request|req):?/i', " ", $name1); + $name1 = preg_replace('/Thanks To Original Poster/i', " ", $name1); + $name1 = preg_replace('/\b[a-z]{1,2}[0-9]{1,2} /i', " ", $name1); + $name1 = preg_replace('/^\d+|\d+$/', '', $name1); + $name1 = preg_replace('/\battn:? [^ ]+\b/i', " ", $name1); + $name1 = preg_replace('/^National.?Geographic|^nat.?geo|^bbc/i', " ", $name1); + $name1 = preg_replace("/\.?(s\d+?e\d+?)\.?/iU", " \\1 ", $name1); + $name1 = preg_replace("/^(\[\d+\].\[.+\].(\[#?a.b.[^\]]+\])*?.)/iU", "", $name1); + $name1 = preg_replace("/\[(?![^\[]+\])|\((?![^\(]+\))|\{(?![^\{]+\})/iU", " ", $name1); + $name1 = preg_replace("/^\(?\?+?\)/iU", " ", $name1); + $name1 = preg_replace("/[\x01-\x1f\_\!\?\[\{\}\]\/\:\|]/iU", " ", $name1); + $name1 = preg_replace("/(?parseNameEpSeason($name); + + if (empty($showinfo['cleanname'])) + { + $showinfo['name'] = $name; + $showinfo['cleanname'] = $name; + } + +echo "clean ".$showinfo['cleanname']."\n"; + + $rageID = $tvrage->getByTitle($showinfo['cleanname']); + + } + +// echo "1 $name\n"; + + if ($rageID == false) + { + $rageID = $tvrage->parseRageIdFromNfo($nfo); + + $name1 = $tvrage->getRageInfoFromService($rageID); +// var_dump($name1); + if (isset($name1['name']) && $name1['name'] != '') + $name = $name1['name']; + else + { + if (!isset($showinfo['cleanname'])) + $showinfo = $tvrage->parseNameEpSeason($name); + $showInfo1 = array( + 'name' => '', + 'season' => '', + 'episode' => '', + 'seriesfull' => '', + 'airdate' => '', + 'country' => '', + 'year' => '', + 'cleanname' => '' + ); + foreach ($showInfo1 as $k => $v) + if (isset($showinfo[$k])) + $showInfo1[$k] = $showinfo[$k]; + $showinfo = $showInfo1; + echo "calling rage $name\n"; +// var_dump($showinfo); + try { + $tvrShow = $tvrage->getRageMatch($showinfo); +// var_dump($tvrShow); + if (isset($tvrShow["showid"])) + $rageID = $tvrShow["showid"]; +// echo "$rageID \n"; + } catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + } + $tvrage->updateRageInfo($rageID, $showinfo, $tvrShow, null); + } + +// echo "2 $name\n"; + + if ($rageID == false) + { + $query = "SELECT * FROM releases WHERE ( releases.passwordstatus < 0 AND releases.haspreview < 0 ) AND ID = ".$row['ID']; + $rel = $db->queryOneRow($query); + + if ($rel !== false) + return false; + + $query = "SELECT releasevideo.releaseID FROM releasevideo WHERE releasevideo.releaseID = ".$row['ID']; + $rel = $db->queryOneRow($query); + + if ($rel === false) + return false; + + $query = "SELECT releasefiles.releaseID, releasefiles.`name` FROM releasefiles INNER JOIN releases ON releasefiles.releaseID = releases.ID WHERE releases.ID = ".$row['ID']; + $rel = $db->query($query); + + foreach($rel as $r) + { + $name1 = preg_replace('/(?parseNameEpSeason($name1); + +// var_dump($parsed); + + $rageID = $tvrage->getByTitle($parsed['cleanname']); + + if ($rageID == false) + { + if ($parsed) + $name1 = $parsed['cleanname']; + $sql = sprintf("SELECT rageID from tvrage where (releasetitle = %s or releasetitle = %s)", $db->escapeString($name1), $db->escapeString(str_replace(' and ', ' & ', $name1))); + + $sql = str_replace(" = '", " like '%", $sql); + $sql = str_replace("' or", "%' or", $sql); + $sql = str_replace("')", "%')", $sql); + +// echo "$sql\n"; + + $res = $db->queryOneRow($sql); + if ($res) + $rageID = $res["rageID"]; + } + } + if ($rageID != 0 && $name1 != '') + $name = $name1; + } + + $tmp = $tvrage->getByRageID($rageID); + +// echo "ltvrageid = $rageID\n"; +// var_dump($tmp); + + if (!isset($tmp[0])) + { + + $name = preg_replace('/[\_\.]|bbc|nat.?geo|national.?geographic/i', " ", $name1); +// $name = preg_replace('/(19|20)\d{2}.*$/i', " ", $name); + $name = preg_replace('/\d{1,3} ?of ?\d{1,3}.*$/i', " ", $name); + $name = preg_replace('/^[\]\}\)]|[\[\{\(]/i', "", $name); + $name = trim($name); + +echo "name == $name\n"; + $showinfo = $tvrage->parseNameEpSeason($name); + if (!isset($showinfo['cleanname'])) + $showinfo = array( + 'name' => $name, + 'season' => '', + 'episode' => '', + 'seriesfull' => '', + 'airdate' => '', + 'country' => '', + 'year' => '', + 'cleanname' => $name + ); + + + + try { + $tvrShow = $tvrage->getRageMatch($showinfo); + if (isset($tvrShow["showid"])) + $rageID = $tvrShow["showid"]; + } catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } +// var_dump($tvrShow); + if ($tvrShow === false) + { + $name1 = preg_replace('/(\D+?)( s?\d{1,3}?(?!\d).*?)/iU', '\1', $name); + $showinfo = $tvrage->parseNameEpSeason($name1); + if (!isset($showinfo['cleanname'])) + $showinfo = array( + 'name' => $name1, + 'season' => '', + 'episode' => '', + 'seriesfull' => '', + 'airdate' => '', + 'country' => '', + 'year' => '', + 'cleanname' => $name1 + ); +echo "$name1\n"; + $tvrShow = $tvrage->getRageMatch($showinfo); +// var_dump($tvrShow); + if ($tvrShow !== false) + { + if (isset($tvrShow["showid"])) + $rageID = $tvrShow["showid"]; + } + } + + if (($tvrShow !== false && is_array($tvrShow) && $tvrShow['title'] == $name) || $rageID) + { + $showinfo['name'] = $tvrShow["title"]; + $showinfo['cleanname'] = $tvrShow["title"]; + if ($rageID != 0) + $tvrage->updateRageInfo($rageID, $showinfo, $tvrShow, NULL); + } + $tmp = $tvrage->getByRageID($rageID); + } + + if (isset($tmp[0])) + { +// echo "rageID = $rageID\n"; +// echo "title = ".$tmp[0]['releasetitle']."\n"; +// var_dump($tmp); + + $show = $tvrage->parseNameEpSeason($tmp[0]["releasetitle"]." ".$row['searchname']); +// var_dump($tvrage->getEpisodeInfo($rageID, $show['season'], $show['episode'])); + + $name = matchnames($row['name'], $tmp[0]['releasetitle']." ".$show['seriesfull']); + + $name = findquality ($nfo, $name); + + if (dodbupdate($row['ID'], $cat, $name, $rageID, 'tv')) + { + if (is_array($show) && $show['name'] != '') + { + // $tvrage->updateEpInfo($show, $row['ID']); + } + $ok = $rageID; + } + } + + unset($tvrage); + return $ok; +} + +function cleanname($name) +{ + global $qualities; + + $quality = preg_replace('/(.+?)/iU', "/\.*?(\b\\1\b)\.*?/iU", $qualities); + + do { + $original = $name; +// echo "CN: $name\n"; + $name = preg_replace($quality, " \\1 ", $name); + $name = preg_replace("/\.?(s\d+?e\d+?)\.?/iU", " \\1 ", $name); + $name = preg_replace("/yenc/iU", " ", $name); + $name = preg_replace("/^(\[\d+\].\[.+\].(\[#?a.b.[^\]]+\])*?.)/iU", "", $name); + $name = preg_replace("/\[(?![^\[]+\])|\((?![^\(]+\))|\{(?![^\{]+\})/iU", " ", $name); + $name = preg_replace("/^\(?\?+?\)/iU", " ", $name); + $name = preg_replace("/[\x01-\x1f\_\!\?\[\{\}\]\/\:\|]/iU", " ", $name); + $name = preg_replace("/(?getByRageID($rageID); + unset($tvrage); + + $name1 = $name1[0]["releasetitle"]; + + $name = matchnames($row['name'], $name1); + + echo "doing tv1 ".$name." ".$row['guid']."\n"; + + $ok = dodbupdate($id, $cat, $name, $rageID, 'tv'); + + } else { + +//echo "$name $name1\n"; + + $name = matchnames($row['name'], $name1); + + echo "doing tv2 ".$name." ".$row['guid']."\n"; + +// $matches = preg_split('/(\btitle\:|\bname=)[ \.\_]*?(.*)\r/iU', $nfo, 0, PREG_SPLIT_DELIM_CAPTURE); + +// echo $matches[1]."\n"; + + if (empty($name)) + { + $ok = dodbupdate($id, $cat, ''); + } else { + $ok = dodbupdate($id, $cat, $name); + } + } + return $ok; +} + +function doAmazon ($name, $id, $nfo = "", $q, $region = 'com', $upc = false, $nfo ='', $row = '') +{ + global $db; + $s = new Sites(); + $site = $s->get(); + $amazon = new AmazonProductAPI($site->amazonpubkey, $site->amazonprivkey, $site->amazonassociatetag); + $ok = false; + + + try { + if ($upc) + { + $amaz = $amazon->getItemByUpc(trim($q), $region); + } else { + $amaz = $amazon->getItemByAsin(trim($q), $region); + } + } catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + unset($s); + unset($amaz); + unset($amazon); + return $ok; + } + + $type = $amaz->Items->Item->ItemAttributes->ProductGroup; + + switch ($type) + { + case 'Book': + $new = (string) $amaz->Items->Item->ItemAttributes->Author; + $new = $new . " - ". (string) $amaz->Items->Item->ItemAttributes->Title; + $name = matchnames($name, $new); + + $query = "SELECT ID FROM `bookinfo` WHERE `asin` = '".(string) $amaz->Items->Item->ASIN."'"; + $rel = $db->query($query); + if (count($rel) == 0) + { + $book = new Book(); + $item = array(); + $item["asin"] = (string) $amaz->Items->Item->ASIN; + $item["url"] = (string) $amaz->Items->Item->DetailPageURL; + $item["coverurl"] = (string) $amaz->Items->Item->LargeImage->URL; + if ($item['coverurl'] != "") + $item['cover'] = 1; + else + $item['cover'] = 0; + $item["author"] = (string) $amaz->Items->Item->ItemAttributes->Author; + $item["dewey"] = (string) $amaz->Items->Item->ItemAttributes->DeweyDecimalNumber; + $item["ean"] = (string) $amaz->Items->Item->ItemAttributes->EAN; + $item["isbn"] = (string) $amaz->Items->Item->ItemAttributes->ISBN; + $item["publisher"] = (string) $amaz->Items->Item->ItemAttributes->Publisher; + $item["publishdate"] = (string) $amaz->Items->Item->ItemAttributes->PublicationDate; + $item["pages"] = (string) $amaz->Items->Item->ItemAttributes->NumberOfPages; + $item["title"] = (string) $amaz->Items->Item->ItemAttributes->Title; + $item["review"] = ""; + if (isset($amaz->Items->Item->EditorialReviews)) + $item["review"] = trim(strip_tags((string) $amaz->Items->Item->EditorialReviews->EditorialReview->Content)); + + $bookId = $book->addUpdateBookInfo($item['title'], $item['asin'], $item['url'], + $item['author'], $item['publisher'], $item['publishdate'], $item['review'], + $item['cover'], $item['dewey'], $item['ean'], $item['isbn'], $item['pages'] ); + unset($book); + } else { + $bookId = $rel[0]['ID']; + } + + + $query = "SELECT * FROM releases INNER JOIN releaseaudio ON releases.ID = releaseaudio.releaseID WHERE releases.ID = $id"; + $rel = $db->query($query); + if (count($rel) == 0) + { + $ok = dodbupdate($id, 7020, $name, $bookId, 'book'); + } else { + $ok = dodbupdate($id, 3030, $name, $bookId, 'book'); + } + unset($rel); + break; + + case 'Digital Music Track': + case 'Digital Music Album': + case 'Music': + $new = (string) $amaz->Items->Item->ItemAttributes->Artist; + if ($new != '') + $new = $new . " - "; + $new = $new .(string) $amaz->Items->Item->ItemAttributes->Title; + $name = matchnames($name, $new); + + $query = "SELECT * FROM `bookinfo` WHERE `asin` = '".(string) $amaz->Items->Item->ASIN."'"; + +// echo "$query\n"; + $rel = $db->query($query); + if (count($rel) == 0) + { + $mus = array(); + $mus['coverurl'] = (string) $amaz->Items->Item->LargeImage->URL; + if ($mus['coverurl'] != "") + $mus['cover'] = 1; + else + $mus['cover'] = 0; + + $mus['title'] = (string) $amaz->Items->Item->ItemAttributes->Title; + + $mus['asin'] = (string) $amaz->Items->Item->ASIN; + + $mus['url'] = (string) $amaz->Items->Item->DetailPageURL; + + $mus['salesrank'] = (string) $amaz->Items->Item->SalesRank; + if (empty($mus['salesrank'])) + $mus['salesrank'] = 'null'; + + $mus['artist'] = (string) $amaz->Items->Item->ItemAttributes->Artist; + + $mus['publisher'] = (string) $amaz->Items->Item->ItemAttributes->Publisher; + + $mus['releasedate'] = $db->escapeString((string) $amaz->Items->Item->ItemAttributes->ReleaseDate); + if ($mus['releasedate'] == "''") + $mus['releasedate'] = 'null'; + + $mus['review'] = ''; + if (isset($amaz->Items->Item->EditorialReviews)) + $mus['review'] = trim(strip_tags((string) $amaz->Items->Item->EditorialReviews->EditorialReview->Content)); + + $mus['year'] = ($mus['releasedate'] != 'null' ? substr($mus['releasedate'], 1, 4) : date("Y")); + + $mus['tracks'] = ''; + if (isset($amaz->Items->Item->Tracks)) + { + $tmpTracks = (array) $amaz->Items->Item->Tracks->Disc; + $tracks = $tmpTracks['Track']; + $mus['tracks'] = (is_array($tracks) && !empty($tracks)) ? implode('|', $tracks) : ''; + } + + $music = new Music(); + $musicId = $music->addUpdateMusicInfo($mus['title'], $mus['asin'], $mus['url'], + $mus['salesrank'], $mus['artist'], $mus['publisher'], $mus['releasedate'], $mus['review'], + $mus['year'],'', $mus['tracks'], $mus['cover'] ); + + unset($music); + } else { + $musicId = $rel[0]['ID']; + } + + $ok = dodbupdate($id, 3010, $name, $musicId, 'music'); + break; + + case 'Movies': + case 'DVD': + $new = (string) $amaz->Items->Item->ItemAttributes->Title; + $new = $new . " (" . substr((string) $amaz->Items->Item->ItemAttributes->ReleaseDate, 0, 4) . ")"; + $name = matchnames($name, $new); + + $ok = matchimdb ($nfo, $row); + + if (!$ok) + { + $name = findquality ($nfo, $name); + $ok = dodbupdate($id, 2000, $name); + } + break; + + default: + echo "* * * * * * uncatched amazon category $type ".$name; + break; + } +//echo $query."\n"; + + unset($s); + unset($amaz); + unset($amazon); + return $ok; +} + +function doarray($matches) +{ + $r = array(); + + foreach ($matches as $m) + { + if (strlen($m) < 50) + { + $str = preg_replace("/\s/iU", "", $m); + + $m = strtolower($str); + + if ($m == 'audiobook') { + $r[-1] = $m; + } else if ($m == 'anidb.net') { + $r[-2] = $m; + } else if ($m == 'upc') { + $r[-3] = $m; + } else if ($m == 'amazon.') { + $r[-4] = $m; + } else if ($m == 'asin') { + $r[-5] = $m; + } else if ($m == 'imdb') { + $r[-6] = $m; + } else if ($m == 'os') { + $r[-7] = $m; + } else if ($m == 'mac' || $m == 'macintosh' || $m == 'dmg' || $m == 'macos' || $m == 'macosx' || $m == 'osx') { + $r[-8] = $m; + } else if ($m == 'itunes.apple.com/') { + $r[-9] = $m; + } else if (preg_match('/sports|deportes|nhl|nfl|\bnba/i', $m)) { + $r[1000] = $m; + } else if (preg_match('/avi|xvid|divx|mkv/i', $m)) { + $r[1001] = $m; + } else { + $r[] = $m; + } + } + } + + ksort($r); + return $r; +} + +function doOS ($nfo, $name, $cat, $id) +{ + global $db; + + $ok = false; + + $pattern = '/(.*v(?:er)?[\.\s]*?\d+\.\d(?:\.\d+)??[^\v]*?)|(?getNZBPath($row['guid']); + $m3u = ''; + $alt = ''; + $mp3 = false; + $mp3name = ''; + $files = 0; + $extras = 0; + + echo "doing music ".$row['guid']."\n"; + + if ($nzbinfo->loadFromFile($file)) + { + $name = $row['name']; + + $name = preg_replace("/\//",' ', $name); + +// echo "$name\n"; + + $name = preg_quote($name); + + + echo "$name\n"; + + + foreach($nzbinfo->nzb as $nzbsubject) + { + + $sub = $nzbsubject['subject']."\n"; + + $sub = preg_replace("/$name/i",'', $sub); + +// echo "doing music file = $sub\n"; + + if (preg_match('/\.(vol\d{1,3}?\+\d{1,3}?|par2|nfo\b|sfv|par\b|p\d{1,3}?|sv\b)/iU', $sub)) + { + $extras++; + $alt = preg_replace('/(\.vol\d{1,3}?\+\d{1,3}?|\.par2|\.[a-z][a-z0-9]{2})+?".+?/iU', '', $sub); + } + + if (preg_match('/\.mp3/', $sub, $matches)) + { + $mp3name = preg_replace('/(\.mp3".+?)/iU', '.mp3', $sub); + $mp3name = preg_replace('/(?iU)^[^\"]+\"(0\d+?-?(00)??)??/iU', '', $mp3name); + + $mp3 = true; + $files++; + } + + if (preg_match('/\.m3u|\"00+[ \-\_\.]+?|\.nfo\b|\.sfv/iU', $sub, $matches)) + { + if (preg_match('/\.url|playlist/iU', $sub)) + { + continue; + } + $sub = preg_replace('/(\.vol\d{1,3}?\+\d{1,3}?|\.par2|\.[a-z][a-z0-9]{2})+?".+?/iU', '', $sub); + + $m3u = preg_replace('/(?iU)^[^\"]+\"(0\d+?-?(00)??)??/iU', '', $sub); + } + + } + } + $name = ''; + + echo (($m3u != '' || ($files + $extras) / count($nzbinfo->nzb) > 0.7) && $mp3)." ".$mp3." ".$m3u."\n"; + + if (($m3u != '' || (($files + $extras) / count($nzbinfo->nzb) > 0.7)) && $mp3) + { + $name = $m3u; + + if ($files == 1) + $name = $mp3name; + + if (empty($name)) + { + $name = matchnames($row['name'], $alt); + } + + echo $row['guid']." ".$name.' '.$mp3.' '.($files + $extras) / count($nzbinfo->nzb)."\n"; + + } + + echo (($m3u != '' || ($files + $extras) / count($nzbinfo->nzb) > 0.7) && $mp3)." ".$mp3." ".$m3u."\n"; + +echo "music files $name\n"; + $name = cleanname($name); +echo "cleaned name $name\n"; + unset($file); + + unset($nzbinfo); + unset($nzb); + + return $name; +} + +function findquality ($nfo, $name) +{ + global $qualities; +// $qualities = array('\b480[ip]?\b', '\b640[ip]?\b', '\b720[ip]?\b', '1080[ip]?\b', 'audio_ts', '\bavi\b', 'bd..\b', 'bdrip', 'bluray', 'BR\-?Disk', 'br\-?rip', 'cam', 'divx', 'dvd', 'hd\-?tv', 'iso\b', 'm2ts', 'mkv', 'mpeg', 'mpg', 'ntsc', 'pal', 'ppv', 'r\d\b', '\bscr\b', '\bscreener\b', 'tc\b', 'telecine', 'telesync', '\bts\b', '\b(..)?tv\b', 'tv\-?rip', 'video_ts', 'x264', 'xvid'); +// $qualities = array('(..)?tv', '480[ip]?', '640[ip]?', '720[ip]?', '1080[ip]?', 'audio_ts', 'avi', 'bd[\- ]?rip', 'bd25', 'bd50', 'bdmv', 'blu ?ray', 'br[\- ]?disk', 'br[\- ]?rip', 'cam', 'cam[\- ]?rip', 'divx', 'dvd', 'dvd[\- ]?r', 'dvd[\- ]?rip', 'dvd[\- ]?scr', 'hd', 'hd[\- ]?tv', 'hd[\- ]?cam', 'hd[\- ]?ts', 'iso', 'm2ts', 'mkv', 'mpeg(\-\d)?', 'mpg', 'ntsc', 'pal', 'ppv', 'ppv[\- ]?rip', 'r\d{1}', 'scr', 'screener', 'tc', 'telecine', 'telesync', 'ts', 'tv[\- ]?rip', 'video_ts', 'x264', 'xvid'); + $qual = array(); +// echo "$name\n"; + foreach ($qualities as $quality) + { + if (preg_match("/(?$quality) + { + if (preg_match("/$quality/iU", $name)) + { + unset($qual[$key]); + } + } + + $n = ''; + if (count($qual) > 0) + { + foreach ($qual as $quality) + { + $n = $n ." ".$quality; + } + } + + return trim($name .' '.$n); +} + +function matchanime ($nfo, $id, $name) +{ + $ok = false; + $anime = ''; + + if (preg_match('/anidb.net.*aid=(\d+?)/iU', $nfo, $set)) + { + $anidb = new AniDB(); + if ($anidb->getAnimeInfo($set[1]) === false) + { + $anidb->addTitle($anidb->AniDBAPI($set[1])); + } + $anime = $anidb->getAnimeInfo($set[1]); + + if ($anime !== false) + { + + $anime = matchnames($name, $anime['title']); + + $ok = dodbupdate($id, 5070, $anime, $set[1], 'anime'); + } + unset($anidb); + + } + return $ok; +} + +function matchimdb ($nfo, $row) +{ + $ok = false; + + preg_match('/imdb\.[a-z0-9\.\_\-\/]+?(?:tt|\?)(\d+?)\/?/iU', $nfo, $set); + +// echo "imdb name= ".$row['name']."\n"; + + if (isset($set[1])) + { + $imdb = $set[1] + 0; + + $movie = new Movie(); + + $title = $movie->getMovieInfo($imdb); + + if ($title === false) + { + $movie->fetchImdbProperties($imdb); + $movie->updateMovieInfo($imdb); + $title = $movie->getMovieInfo($imdb); + } + + $name = $title['title']." (".$title['year'].")"; + +// $name = matchnames($row['name'], $name); + + // echo "quality ".findquality ($nfo, $name)."\n"; + $name = findquality ($nfo, $name); + + $name = matchnames($row['name'], $name); + + echo "imdb $name\n"; + +// echo (strval($imdb) + 0) . " * * * " . (strval($title['imdbID']) + 0) ."\n"; + + if ((strval($imdb) + 0) == (strval($title['imdbID']) + 0)) + { + if (preg_match('/sport/iU', $title['genre'])) { + $ok = dodbupdate($row['ID'], 5060, $name, $imdb, 'imdb'); + } else if (preg_match('/docu/iU', $title['genre'])) { + $ok = dodbupdate($row['ID'], 5080, $name, $imdb, 'imdb'); + } else if (preg_match('/talk\-show/iU', $title['genre'])) { + $ok = dodbupdate($row['ID'], 5000, $name, $imdb, 'imdb'); + } else if (preg_match('/tv/iU', $title['genre']) || preg_match('/episode/iU', $title['genre']) || preg_match('/reality/iU', $title['genre'])) { + $ok = updateTV ($title['title']." (".$title['year'].")", $row['ID'], $row, 5000, $nfo); + } else { + $ok = dodbupdate($row['ID'], 2000, $name, $imdb, 'imdb'); + } + } + unset($movie); + } +// echo (bool) $ok."\n"; + return $ok; +} + +function matchaudiobook ($nfo, $id, $oldname, $row) +{ + global $db; + $ok = false; + + if (preg_match('/Sample Rate|MP3|speech|Encoded|ID3|(un)?abridged|Copyright|Ripped|khz|stero|mono/i', $nfo)) + { + if (preg_match('/mpeg|pixels|fps/i', $nfo)) + { + echo "not audio\n"; + return $ok; + } + $query = "SELECT * FROM releases INNER JOIN releasevideo ON releases.ID = releasevideo.releaseID where ( releases.passwordstatus >= 0 OR releases.haspreview >= 0 ) AND releases.ID = ".$id; + $rel = $db->query($query); + if (count($rel) > 0) + { + echo "not audio\n"; + return $ok; + } + unset ($rel); + + echo "audiobooks $id\n"; + $name = $oldname; + $author = ''; + $title = ''; + $bookID = 0; + $set = preg_split('/\btitle\:?(\.\.+?|\s\s+?|__+?)([^\r]*)\r/Ui', $nfo, 0, PREG_SPLIT_DELIM_CAPTURE); + + + if (isset($set[2])) + { + + $set[2] = trim(preg_replace('/[\|\:\-]| +/', ' ', $set[2])); + +// echo $set[2]."\n"; + $name = $set[2]; + $title = $name; + + $set = preg_split('/author\:?(\.\.+?|\s\s+?|__+?)([^\r]*)\r/Ui', $nfo, 0, PREG_SPLIT_DELIM_CAPTURE); + + if (isset($set[2])) + { + $set[2] = trim(preg_replace('/[\|\:\-]| +/', ' ', $set[2])); + +// echo $set[2]."\n"; + $name = $set[2]." - ".$name; + $author = $set[2]; + } + + $bookID = findbookid ($author, $title); +// +// $book = new Book(); +// $rel = $book->getBookInfoByName($author, $title); +// +// if ($rel === false) +// { +// $query = "Select * from `bookinfo` WHERE `title` LIKE '%".$title."%' AND ID in (SELECT ID FROM `bookinfo` WHERE `author` sounds LIKE '".$author."')"; +// $rel = $db->query($query); +// // echo "$query\n"; +// +// if (isset($rel[0]["ID"])) +// { +// // var_dump($rel); +// $bookID = $rel[0]["ID"]; +// } else { +// // echo "not found\n"; +// $bookID = $book->updateBookInfo($author, $title); +// // echo "$bookID\n"; +// } +// } else { +// $bookID = $rel['ID']; +// } + + $name = matchnames($oldname, $name); + if ($bookID > 0) + { + $ok = dodbupdate($id, 3030, $name, $bookID, 'book'); + } else { + $ok = dodbupdate($id, 3030, $name); + } + } else { + $ok = findmusicname($row, 3030); +// $ok = dodbupdate($id, 3030); + } + } +// unset($book); + return $ok; +} + +function matchmusic($nfo, $row) +{ + $artist = $album = ''; + + $artist = preg_split('/(?:a\s?r\s?t\s?i\s?s\s?t\b)+? *?(?!(?:[^ \.\:\}\]\*] ?){2,}?\b)(?:[\*\?\-\=\|\;\:\.\[\}\]\( \xb0-\x{3000}]+?)[ \.\>\:]([a-z0-9]?(?!:).+?(?\:]([a-z0-9]?(?!:).+?(?1 && $title[1] <50 && isset($artist[1]) && strlen($artist[1]) >1 && $artist[1] <50) + { + +// echo "\n * * * * * title= ".$title[1]."\t ".$row['name']."\n"; + if (isset($artist[1])) + { + $new = trim($artist[1]); + $artist1 = trim($artist[1]); + } + + + if (isset($title[1])) + { + if (strlen($new) > 1) + { + $new = $new . " -*- "; + } + $new = $new . trim($title[1]); + $album = trim($title[1]); + } + + $name = matchnames($row['name'], $new); + + $artist = matchnames($artist1, ''); + $album = matchnames($album, ''); + +// echo "$artist * * $album\n"; + } else { + + $name = domusicfiles ($row); + if ($name != "") + { + $result = $music->parseArtist($name); + $artist = $result['artist']; + $album = $result['album']; + } + } + +echo "3artist = $artist album = $album\n"; + + $album = stripname($album); + $artist = stripname($artist); + + + + $tmp = explode(",", $artist); + + if (count($tmp) > 1) + $artist = trim($tmp[1]." ".$tmp[0]); + +echo "4artist = $artist album = $album\n"; + + if ($artist != '' && $album != '') + $musicId = 0; + else { + $rel = $music->getMusicInfoByName($artist, $album); +// var_dump($rel); + $musicId = $rel['ID']; + } + + if ($musicId <= 1) + { + echo "amazon music2 "; + $musicId = $music->updateMusicInfo($artist, $album, 0); + + if ($musicId === false) + { +// var_dump($artist); +// var_dump($album); + $book = new Book(true); + $bookId = $book->updateBookInfo($artist, $album); + unset($book); + } +// var_dump($musicId); + + } + + if ($musicId > 0) + { + $ok = dodbupdate($row['ID'], 3010, $name, $musicId, 'music'); + } else if ($bookId > 0) { + $ok = dodbupdate($row['ID'], 3030, $name, $bookId, 'book'); + } + + if (!$ok) + { + $ok = findmusicname($row, 3010); + +// $name = matchnames($row['name'], domusicfiles($row)); +// $ok = dodbupdate($row['ID'], 3010, ''); + } + if (!$ok) + { + if (preg_match('/book/i', $row['gname'])) + $ok = dodbupdate($row['ID'], 3030, $name); + else + $ok = dodbupdate($row['ID'], 3010, $name); + } + unset($music); + return $ok; +} + +function matchmag($nfo, $row) +{ + $ok = false; + $set = preg_split('/(?:\btitle|\bname|release)\b(?:[\-\:\.\}\[\s\xb0-\x{3000}]+?)\B([a-z0-9\.\- \(\)]+?)/Uui', $nfo, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); + if (isset($set[1])) + { + $name = trim($set[1]); + if (preg_match('/(?:issue)\b(?:[\-\:\.\}\[\s\xb0-\x{3000}]+?)\B([a-z0-9\.\- \(\)\/]+?)/iuU', $nfo, $set)) + { + if (isset($set[1])) + { + $name = $name." ".trim($set[1]); + } + $name = matchnames($row['name'], $name); + $ok = dodbupdate($row['ID'], 7010, $name ); + } + } + return $ok; +} + +function dodbupdate($id, $cat, $name = '', $typeid = 0, $type='none', $debug = DEBUGGING) +{ + global $db; + + $query = "UPDATE `releases` SET `categoryID` = $cat"; + + if ($name != '') + $query = $query.", `searchname` = ".$db->escapeString($name); + switch ($type) { + case 'imdb': + if ($typeid != 0) + $query = $query.", `imdbID` = $typeid"; + break; + case 'book': + if ($typeid != 0) + $query = $query.", `bookinfoID` = $typeid"; + break; + case 'music': + if ($typeid != 0) + $query = $query.", `musicinfoID` = $typeid"; + break; + case 'anime': + if ($typeid != 0) + $query = $query.", `anidbID` = $typeid"; + break; + case 'tv': + if ($typeid != 0) + $query = $query.", `rageID` = $typeid"; + break; + default: + break; + } + + $query = $query." where `ID` = $id"; +echo $debug." ".$query."\n"; + if (!$debug) + { +echo "updating"; + if ($db->query($query) !== false) + return true; + } else { + return true; + } + return false; +} + +function findmovie($name) +{ + $imdb = 0; + + $j = 0; + + $name = stripname($name); + + $url = "http://www.omdbapi.com/?r=xml&s="; + $name1 = $name; + if (preg_match('/([^\[\r\]]+)[\[\{\(\_\. ]+?((?:19|20)\d{2})/U', $name, $title)) + { + $url = $url.urlencode($title[1])."&y=".$title[2]; + $name1 = $title[1]." ".$title[2]; + } + else + $url = $url.urlencode($name); + +echo "omdbapi: $url\n"; +echo cleanname($name1)."\n"; + + $data = getUrl($url); + +//echo "$data\n"; + $xmlObj = @simplexml_load_string(html_entity_decode($data)); + $arrXml = objectsIntoArray($xmlObj); + +// var_dump($arrXml); + + if (isset($arrXml["Movie"])) + { + + $tvrage = new TVRage(true); + + $name1 = ''; + + foreach ($arrXml["Movie"] as $ax) + { +// var_dump($ax); + + if (isset($ax["@attributes"])) + $a = $ax["@attributes"]; + else + $a = $ax; + if (isset($title[2]) && $a["Year"] == $title[2]) + { + $i = 0; + $a["Title"] = preg_replace('/&/', ' and ', $a["Title"]); + $name = preg_replace('/&/', ' and ', $name); + +//echo "matched ".$a["Title"]."\n"; + + $arr = preg_split('/[\:\:\.\, \-\_\(\)\[\]\{\}]/', $a["Title"], 0, PREG_SPLIT_NO_EMPTY); + foreach ($arr as $r) + { +echo preg_quote($r)."\n"; + if (preg_match('/'.preg_quote($r).'/i', $name)) + $i++; + } + if (count($arr) == $i && $i > $j) + { + $name1 = $name; + $imdb = $a["imdbID"]; + $j = $i; + } +// echo "comp result ".count($arr)." ".$i." ".$name."\n"; +// echo $a["Title"]."\n"; + } + } + echo "$name1 $imdb\n"; + + unset($tvrage); + } + echo "findmovie = $imdb\n"; + + return array(strval($imdb), $j); +} + +function matchvideo($row, $nfo) +{ + global $db; + + $ok = false; + + $imdb = ''; + + $j = 0; + + $query = "SELECT releasevideo.releaseID FROM releasevideo WHERE releasevideo.releaseID = ".$row['ID']; + $rel = $db->queryOneRow($query); + + if ($rel === false) + { + $query = "SELECT releasefiles.`name`, releasefiles.releaseID, releasefiles.size FROM releasefiles WHERE releasefiles.releaseID = ".$row['ID']; + $res = $db->queryDirect($query); + + $cont = false; + while ($rel = $db->getAssocArray($res)) + { + if(preg_match('/\.(iso|mkv|mp4|iso|divx)$|\.([^\.]+)$/', $rel['name'], $ext)) + { + echo "ext = ".$ext[1]."\n"; + var_dump($ext); + $cont = true; + } + } + if (!$cont) + return false; + } + $thename = $name = $row['name']; +echo "name1: $name\n"; + $rageID = lookupTV ($name, $nfo, $row, 5000); + + if ($rageID == 0) + { + $imdb = findmovie($name); + $imdb = $imdb[0]; + } + + if ($rageID == 0 && empty($imdb) ) + { + $set = preg_split('/(?:\btitle|\bname).+[\.\s]+?[^a-z0-9]*?([a-z0-9\-\.\_ ]+?)/iU', $nfo, 0, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY); +//var_dump($set); + if (isset($set[1])) + { +echo "name2: ".$set[1]."\n"; + $rageID = lookupTV ($set[1], $nfo, $row, 5000); + if ($rageID) + { + $thename = $set[1]; + } else + { + $imdb = findmovie($set[1]); + $imdb = $imdb[0]; + } + + } + + if ($rageID == 0 && empty($imdb) ) + { + $query = "SELECT releasefiles.releaseID, releasefiles.`name` FROM releasefiles INNER JOIN releases ON releasefiles.releaseID = releases.ID WHERE releases.ID = ".$row['ID']; + $rel = $db->query($query); + + $ok = false; + $j = 0; + + + if (count($rel) > 0) + { + foreach($rel as $r) + { + $name1 = preg_replace('/video[\_\. ]ts/iU', ' ', $r['name']); + + $name1 = preg_replace('/\\\\/', ' ', $name1); + + $name1 = preg_replace('/\.[a-z][a-z0-9]{2}$/iU', '', $name1); + + $name1 = preg_replace('/ +/', ' ', $name1); + + $name1 = preg_replace('/^ | $/', '', $name1); + + echo "file ".$name1."\n"; +echo "name3: $name1\n"; + $rageID = lookupTV ($name1, $nfo, $row, 5000); + + if ($rageID && $j == 0) + { + $thename = $name1; + break; + } else { + $tmp = findmovie($name1); +// var_dump($tmp); + if ($tmp[1] > $j) + { + echo "$rageID\n"; + $imdb = $tmp[0]; + $j = $tmp[1]; + $thename = $name1; + } + } + + } + } + } + } +echo "$j $rageID $imdb\n"; + + if ($imdb != '') + { + $imdb = preg_replace('/^tt/', '', $imdb); + $movie = new Movie(); + $tmp = $movie->getMovieInfo($imdb); + + if ($tmp === false) + { + $movie->fetchImdbProperties($imdb); + $movie->updateMovieInfo($imdb); + $tmp = $movie->getMovieInfo($imdb); + } + + + $thename = matchnames($row['name'], $thename); + $thename = matchnames($thename, $tmp['title']); + $thename = findquality ($nfo, $thename); + + unset($movie); + +echo "$thename\t"; +// var_dump($tmp); + + if (isset($tmp['ID'])) + { + if (preg_match('/sport/iU', $tmp['genre'])) { + $ok = dodbupdate($row['ID'], 5060, $thename, $imdb, 'imdb'); + } else if (preg_match('/docu/iU', $tmp['genre'])) { + $ok = dodbupdate($row['ID'], 5080, $thename, $imdb, 'imdb'); + } else if (preg_match('/talk\-show/iU', $tmp['genre'])) { + $ok = dodbupdate($row['ID'], 5000, $thename, $imdb, 'imdb'); + } else if (preg_match('/tv/iU', $tmp['genre']) || preg_match('/episode/iU', $tmp['genre']) || preg_match('/reality/iU', $tmp['genre'])) { + $ok = updateTV ($tmp['title']." (".$tmp['year'].")", $row['ID'], $row, 5000, $nfo); + } else { + $ok = dodbupdate($row['ID'], 2000, $thename, $imdb, 'imdb'); + } + } + + + } + + if ($rageID) + { + $tvrage = new TVRage(true); + $tmp = $tvrage->getByRageID($rageID); + $thename = matchnames($row['name'], $thename); + $thename = matchnames($thename, $tmp[0]['releasetitle']); + $thename = findquality ($nfo, $thename); + + $name = $tmp[0]['releasetitle']; + + // $tmp = $tvrage->getByRageID($rageID); + + unset($tvrage); +// var_dump($tmp); +echo "doing updates"; + if (isset($tmp[0])) + { + if (preg_match('/sports/i', $tmp[0]['genre'])) + $ok = dodbupdate($row['ID'], 5060, $thename, $rageID, 'tv'); + elseif (preg_match('/documen/i', $tmp[0]['genre'])) + $ok = dodbupdate($row['ID'], 5080, $thename, $rageID, 'tv'); + else + $ok = dodbupdate($row['ID'], 5000, $thename, $rageID, 'tv'); + } + } + + if ($rageID == 0 && empty($imdb) ) + { + $thename = matchnames($row['name'], $thename); + $thename = findquality ($nfo, $thename); + + if (preg_match('/sport/i', $row['gname'])) + $ok = dodbupdate($row['ID'], 5060, $thename); + elseif (preg_match('/docu/i', $row['gname'])) + $ok = dodbupdate($row['ID'], 5080, $thename); + elseif (preg_match('/tv/i', $row['gname'])) + $ok = dodbupdate($row['ID'], 5000, $thename); + elseif (preg_match('/mov/i', $row['gname'])) + $ok = dodbupdate($row['ID'], 2000, $thename); + else + $ok = dodbupdate($row['ID'], 5050, $thename); + } + + return $ok; +} + +mysql_query("SET NAMES 'utf8'"); +mysql_query("SET CHARACTER SET 'utf8'"); +mb_internal_encoding("UTF-8"); +mb_regex_encoding("UTF-8"); +mb_http_output("UTF-8"); +mb_language("uni"); + +$db = new DB(); + + +$query = "SELECT uncompress(releasenfo.nfo) AS nfo, releases.ID, releases.guid, releases.`name`, releases.searchname, groups.`name` AS gname FROM releasenfo INNER JOIN releases ON releasenfo.releaseID = releases.ID INNER JOIN groups ON releases.groupID = groups.ID WHERE releases.categoryID IN ( SELECT ID FROM category WHERE parentID = 8000 )"; +//$query = "SELECT uncompress(releasenfo.nfo) AS nfo, releases.ID, releases.guid, releases.`name`, releases.searchname, groups.`name` AS gname FROM releasenfo INNER JOIN releases ON releasenfo.releaseID = releases.ID INNER JOIN groups ON releases.groupID = groups.ID"; +//$query = "SELECT uncompress(releasenfo.nfo) AS nfo, releases.ID, releases.guid, releases.`name`, releases.searchname, groups.`name` AS gname FROM releasenfo INNER JOIN releases ON releasenfo.releaseID = releases.ID INNER JOIN groups ON releases.groupID = groups.ID WHERE releases.guid = 'e4c785818de8184770f5bf7b1f383863'"; +// +//echo $query."\n"; + +$res = $db->queryDirect($query); + +while ($row = $db->getAssocArray($res)) +{ + $nfo = utf8_decode($row['nfo']); + $pattern = '/(imdb)\.[a-z0-9\.\_\-\/]+?(tt|\?)(\d+?)\/?|(tvrage)|(\bASIN)|(isbn)|(UPC\b)|(comic book)|(comix)|(tv series)|(\bos\b)|(documentaries)|(documentary)|(doku)|(macintosh)|(dmg)|(mac[ _\.\-]??os[ _\.\-]??x??)|(\bos\b\s??x??)|(\bosx\b)'; + $pattern = $pattern . '|(\bios\b)|(iphone)|(ipad)|(ipod)|(pdtv)|(hdtv)|(video streams)|(movie)|(audiobook)|(audible)|(recorded books)|(spoken book)|(speech)|(read by)\:?|(narrator)\:?|(narrated by)'; + $pattern = $pattern . '|(avi\b)|(xvid)|(divx)|(mkv)|(amazon\.)[a-z]{2,3}.*\/dp\/|(anidb.net).*aid=|(\blame\b)|(\btrack)|(t r a c k)|music|type:(game)|(game) Type|(platform)|\b(win(?:dows|all|xp)\b)|(\bwin\b)'; + $pattern = $pattern . '|(application)|(plugin)|(\bcrack)|(install)|(setup)|(magazin)|(x264)|(itunes\.apple\.com\/)|(sports)|(deportes)|(nhl)|(nfl)|(\bnba)|ncaa|(album)/iU'; + + $matches = preg_split($pattern, $nfo, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE); + + $matches = doarray($matches); + +if (count($matches) > 0) +{ +// var_dump($matches); +} + + + foreach($matches as $m) + { + + if (isset($m)) { + $case = preg_replace('/ /', '', $m); + } else { + $case = ''; + } +if ($row['name'] == '4d5bdbf0da623fb9cf849b8b745c60e9') +print_r($matches); + + if (($m == 'os' || $m == 'platform') && preg_match('/(?:\bos\b(?: type)??|platform)[ \.\:\}]+(\w+?).??(\w*?)/iU', $nfo, $set)) + { + + if (isset($set[1])) + { +// var_dump($set); + $case = strtolower($set[1]); + } + if (strlen($set[2]) && (stripos($set[2], 'mac') !== false || stripos($set[2], 'osx') !== false)) + { + $case = strtolower($set[2]); + } + } + + + echo "\n".$case." ".$row['guid']."\n"; +// echo $row['name']."\n"; +// echo $row['searchname']."\n"; +// echo "$case ".$row['guid']."\n"; + + switch (strtolower($case)) + { + case 'itunes.apple.com/': + echo $row['guid']."\n"; + preg_match('/itunes\.apple\.com\/(.*)/iU', $nfo, $set); + echo 'itunes.apple.com'.$set[1]."\n"; + break; + + case 'imdb': + if (matchimdb($nfo, $row)) + break(2); + break; + + + case "asin": + case "isbn": + case "amazon.": + case "upc": + if ($case == 'asin' || $case == 'isbn') + { + preg_match('/(?:isbn|asin)[ \:]*? *?([a-zA-Z0-9]{8,13}?)/iU', $nfo, $set); + if (isset($set[1])) + { + if (strlen($set[1])>10) + break; + if (isset($set[1])) + { + $set[2] = $set[1]; + $set[1] = "com"; + } + } + } else if ($case == 'amazon.') { + preg_match('/amazon\.([a-z]*?\.?[a-z]{2,3}?)\/.*\/dp\/([a-zA-Z0-9]{8,10}?)/iU', $nfo, $set); + } else if ($case == 'upc') { + preg_match('/UPC\:?? *?([a-zA-Z0-9]*?)/iU', $nfo, $set); + if (isset($set[1])) + { + $set[2] = $set[1]; + $set[1] = "All"; + } + } else { + echo "* * * * * error in amazon"; + break; + } + + if (count($set) > 1) + { + if (doAmazon ($row['name'], $row['ID'], $nfo, $set[2], $set[1], $case == 'upc', $nfo, $row)) + { + break(2); + } + } + break; + case 'comicbook': + case 'comix': + if (dodbupdate($row['ID'], 7030)) + break(2); + break; + case 'audiobook': + case 'audible': + case 'recordedbooks': + case 'spokenbook': + case 'readby': + case 'narratedby': + case 'narrator': + case 'speech': + if (matchaudiobook ($nfo, $row['ID'], $row['name'], $row)) + break(2); + break; + + case 't r a c k': + case 'track': + case 'lame': + case 'album': + case 'music': + if (preg_match('/(a\s?r\s?t\s?i\s?s\s?t|l\s?a\s?b\s?e\s?l|mp3|e\s?n\s?c\s?o\s?d\s?e\s?r|rip|stereo|mono)/i', $nfo)) + { + if (!preg_match('/(\bavi\b|x\.?264|divx|mvk|xvid|install|Setup\.exe|unzip|unrar)/i', $nfo)) + { + if (matchmusic($nfo, $row)) + { + // echo "breaking 2\n"; + break(2); + } + } else { +// echo "$case ".$row['guid']."\n"; + if (findmusicname($row, 3010)) + break (2); + } + } + break; + + case 'magazin': +// echo "magazin\n"; + if (matchmag($nfo, $row)) + break(2); + break; + + case 'dmg': + case 'mac': + case 'macintosh': + case 'macos': + case 'macosx': + case 'osx': + if (doOS($nfo, $row['name'], 4030, $row['ID'])) + break(2); + break; + + case 'ios': + case 'iphone': + case 'ipad': + case 'ipod': + + if (doOS($nfo, $row['name'], 4060, $row['ID'])) + break(2); + break; + + case 'application': + case 'install': + case 'setup': + if (!preg_match('/(Setup(\.exe)?|unzip|unrar)/i', $nfo)) + continue; + if (preg_match('/(\bavi\b|x\.?264|divx|mvk|xvid|install)/i', $nfo)) + continue; + + case 'windows': + case 'win': + case 'winall': + case 'winxp': + case 'plugin': + case 'crack': + if (doOS($nfo, $row['name'], 4020, $row['ID'])) + break(2); + break; + + case 'android': + if (doOS($nfo, $row['name'], 4070, $row['ID'])) + break(2); + break; + + case 'game': + $set = preg_split('/\>(.*)\queryDirect($query); +while ($row = $db->getAssocArray($res)) +{ +echo "\n".$row['guid']."\n"; + +$query = 'SELECT releasenfo.releaseID, uncompress(releasenfo.nfo) AS nfo FROM releasenfo WHERE releasenfo.releaseID = '.$row['ID']; +$rel = $db->queryOneRow($query); + +$nfo = ''; +if ($rel !== false) + if ($rel['releaseID'] == $row['ID']) + $nfo = $rel['nfo']; + + matchmusic($nfo, $row); + //findmusicname($row, 3010); +} + +$query = "SELECT releasefiles.`name` AS rname, releasefiles.size, releases.*, groups.`name` AS gname FROM releasefiles INNER JOIN releases ON releasefiles.releaseID = releases.ID INNER JOIN groups ON releases.groupID = groups.ID WHERE releases.categoryID IN ( SELECT ID FROM category WHERE parentID = 8000 ) ORDER BY releasefiles.releaseID, releasefiles.`name`"; +$res = $db->queryDirect($query); +while ($row = $db->getAssocArray($res)) +{ + + if(preg_match('/\.([^\.]{3,4})$/', $row['rname'], $ext)) + { + echo "ext = ".$ext[1]."\n"; +// var_dump($ext); + switch ($ext[1]) + { + case 'epub': + case 'mobi': + $title = preg_split("/ \- /", $row['rname']); + $author = preg_replace('/(\.[^\.]+)/', '', $title[1]); + + $tmp = preg_replace('/'.$row['name'].'/', '', $title[0]); + $tmp = preg_split('/\\\\/', $tmp, 0, PREG_SPLIT_NO_EMPTY); + + + + echo "author: ".$author." title: ".$tmp[count($tmp)-1]."\n"; + + $bookId = findbookid ($author, $tmp[count($tmp)-1]); + + $title1 = $tmp[count($tmp)-1]; + + echo $bookId."\n"; + + if ($bookId == 0) + { + $bookId = findbookid ($tmp[count($tmp)-1], $author); + echo "inverse ".$bookId."\n"; + + $title1 = $author; + $author = $tmp[count($tmp)-1]; + + } + + $title1 = matchnames($row['name'], $author.' - '.$title1); + + if ($bookId != 0) + $ok = dodbupdate($row['ID'], 7020, $title1, $bookId, 'book'); + else + $ok = dodbupdate($row['ID'], 7020, $title1); + + + case 'avi': + case 'mkv': + case 'mp4': + case 'iso': + $tmp = preg_replace("/([^\\\\]+?)\\\\(\\1)/", "\\2", $row['rname']); + $tmp = preg_replace("/".preg_quote($row['name'])."/", "", $tmp); + $tmp = preg_replace("/\\\\/", " ", $tmp); + $tmp = stripname($tmp); + + $tvrage = new TVRage(true); + $parsed = $tvrage->parseNameEpSeason($tmp); + + unset($tvrage); + echo "name = ".$tmp."\n"; + + $nfo = $tmp."\n"; + + var_dump($parsed); + + matchvideo($row, $nfo); + + break; + + + default: + break; + } + + } + +} + +unset($res); +unset($row); +unset($matches); + +$movie = new Movie(); +$movie->processMovieReleases(); +$movie->updateUpcoming(); + +$music = new Music(true); +$music->processMusicReleases(); + +$book = new Book(true); +$book->processBookReleases(); + +$anidb = new AniDB(true); +$anidb->animetitlesUpdate(); +$anidb->processAnimeReleases(); + +$tvrage = new TVRage(true); +$tvrage->processTvReleases(true); + +$thetvdb = new TheTVDB(true); +$thetvdb->processReleases(); + +$query = "update releases set releases.categoryID= 5060 WHERE imdbID IN ( SELECT movieinfo.imdbID FROM movieinfo WHERE movieinfo.genre REGEXP 'sport' AND NOT movieinfo.genre REGEXP 'comedy' AND NOT movieinfo.genre REGEXP 'romance' AND NOT movieinfo.genre REGEXP 'drama' )"; + +$db->query($query); + +$query = "update releases set releases.categoryID= 5000 WHERE imdbID IN ( SELECT movieinfo.imdbID FROM movieinfo WHERE genre REGEXP 'tv|talk\-show|reality|episode' ) AND categoryID NOT IN ( SELECT ID FROM category WHERE parentID = 5000 )"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=2050 WHERE (`categoryID` in (SELECT ID FROM category WHERE parentID = 8000 and `imdbID` > 0) OR `categoryID` = 2000) AND size > 10500000000"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=2040 WHERE (`categoryID` in (SELECT ID FROM category WHERE parentID = 8000 and `imdbID` > 0) OR `categoryID` = 2000) AND size > 2500000000"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=2030 WHERE (`categoryID` in (SELECT ID FROM category WHERE parentID = 8000 and `imdbID` > 0) OR `categoryID` = 2000) AND size > 500000000"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=2020 WHERE (`categoryID` in (SELECT ID FROM category WHERE parentID = 8000 and `imdbID` > 0) OR `categoryID` = 2000)"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=2040 WHERE `categoryID` = 2050 AND size <10000000000"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=2030 WHERE `categoryID` = 2040 AND size < 2500000000"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=5040 WHERE (`categoryID` in (SELECT ID FROM category WHERE parentID = 8000 and `rageID` > 0) OR `categoryID` = 5000) AND size > 1500000000"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=5030 WHERE (`categoryID` in (SELECT ID FROM category WHERE parentID = 8000 and `rageID` > 0) OR `categoryID` = 5000) AND size > 10000000"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=5050 WHERE (`categoryID` in (SELECT ID FROM category WHERE parentID = 8000 and `rageID` > 0) OR `categoryID` = 5000)"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=5030 WHERE `categoryID` = 5040 AND size < 1500000000"; + +$db->query($query); + +$query = "UPDATE `releases` SET `categoryID`=5050 WHERE `categoryID` = 5030 AND size < 1000000"; + +$db->query($query); + +$query = "UPDATE releases SET categoryID = 5070 WHERE rageID IN ( SELECT tvrage.rageID FROM tvrage WHERE tvrage.genre REGEXP 'animat' )"; + +$db->query($query); + +$query = "update releases set releases.categoryID= 5080 WHERE imdbID IN ( SELECT movieinfo.imdbID FROM movieinfo WHERE genre REGEXP 'docum' )"; + +$db->query($query); + +//ALTER TABLE `movieinfo` CHANGE `genre` `genre` VARCHAR( 256 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL + +?> \ No newline at end of file