Committer: gprochaev
LJSUP-8840. Remove requests to FB for every page requestU trunk/bin/upgrading/update-db-general.pl U trunk/bin/worker/category-recent-posts U trunk/cgi-bin/LJ/Browse/Parser.pm U trunk/cgi-bin/LJ/Widget/Browse.pm
Modified: trunk/bin/upgrading/update-db-general.pl =================================================================== --- trunk/bin/upgrading/update-db-general.pl 2011-05-17 07:26:59 UTC (rev 19066) +++ trunk/bin/upgrading/update-db-general.pl 2011-05-17 11:08:07 UTC (rev 19067) @@ -3379,6 +3379,8 @@ timecreate datetime NOT NULL, journalid int(10) unsigned NOT NULL, is_deleted tinyint(1) NOT NULL default '0', + pic_orig_url VARCHAR(255) NOT NULL DEFAULT '', + pic_fb_url VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`journalid`,`jitemid`), KEY `timecreate` (`timecreate`), KEY `journalid` (`journalid`) @@ -4341,6 +4343,13 @@ do_alter("category", "ALTER TABLE category MODIFY parentcatid INT UNSIGNED NOT NULL"); } + if (column_type("category_recent_posts", "pic_orig_url")) { + do_alter("category_recent_posts", + "ALTER TABLE category_recent_posts + ADD pic_orig_url VARCHAR(255) NOT NULL DEFAULT '', + ADD pic_fb_url VARCHAR(255) NOT NULL DEFAULT '' + "); + } }); register_tablecreate("eventrates", <<'EOC'); # clustered Modified: trunk/bin/worker/category-recent-posts =================================================================== --- trunk/bin/worker/category-recent-posts 2011-05-17 07:26:59 UTC (rev 19066) +++ trunk/bin/worker/category-recent-posts 2011-05-17 11:08:07 UTC (rev 19067) @@ -13,6 +13,7 @@ use base 'LJ::NewWorker::Manual'; use LJ::Browse; +use LJ::Browse::Parser; # how long to wait if we didn't process any at all my $sleep_when_idle; @@ -70,8 +71,18 @@ my $sth = $dbh->prepare ("INSERT INTO category_recent_posts (jitemid, timecreate, journalid) VALUES (?, ?, ?)"); $sth->execute($entry->{itemid}, $entry->{logtime}, $journalid); + my $e_obj = LJ::Entry->new ($u->{userid}, jitemid => $entry->{itemid}); + my $event = $e_obj->event_raw; + + my $parsed = LJ::Browse::Parser->do_parse ( + text => $event, + remove_tags => [ 'b', 'p', 'div', 'span', 'strong', 'font' ], + max_len => 400, + crop_image => 1, + entry => $e_obj, + ); + ## Add tags for every entry - my $e_obj = LJ::Entry->new ($u->{userid}, jitemid => $entry->{itemid}); my $poster = $e_obj->poster; next if $poster->is_suspended; next if $e_obj->is_suspended; @@ -87,6 +98,25 @@ } +=head + ## Remove old posts + my $verticals = $dbh->selectall_arrayref ("SELECT vert_id, not_deleted, remove_after FROM vertical2", { Slice => {} }); + foreach my $vert (@$verticals) { + next unless $vert->{'remove_after'} && $vert->{'not_deleted'}; + my $cats = $dbh->selectcol_arrayref ("SELECT catid FROM category WHERE vert_id = ?", { Slice => {} }, $vert->{'vert_id'}); + foreach my $catid (@$cats) { + my $comms = $dbh->selectcol_arrayref ("SELECT DISTINCT journalid FROM categoryjournals WHERE catid = ?", undef, $catid); + foreach my $journalid (@$comms) { + my $jitems = $dbh->selectcol_arrayref ("SELECT jitemid FROM category_recent_posts WHERE journalid = ? AND unix_timestamp(timecreate) < unix_timestamp() - ".$vert->{'remove_after'}." * 3600 ORDER BY timecreate DESC", undef, $journalid); + next unless @$jitems; + my @to_delete = splice @$jitems, 0, scalar @$jitems - $vert->{'not_deleted'}; + next unless @to_delete; + my $res = $dbh->do ("DELETE FROM category_recent_posts WHERE jitemid in (".join (",", @to_delete).") AND journalid = ?", undef, $journalid); + } + } + } +=cut + return 0; } Modified: trunk/cgi-bin/LJ/Browse/Parser.pm =================================================================== --- trunk/cgi-bin/LJ/Browse/Parser.pm 2011-05-17 07:26:59 UTC (rev 19066) +++ trunk/cgi-bin/LJ/Browse/Parser.pm 2011-05-17 11:08:07 UTC (rev 19067) @@ -19,6 +19,7 @@ my $text = $args{'text'}; my $char_max = $args{'max_len'}; + my $entry = $args{'entry'}; my $p = HTML::TokeParser->new(\$text); @@ -50,17 +51,48 @@ ## Img URL must be valid next if $@; - my $r = $images_crop_cnt ? LJ::crop_picture_from_web( - source => $attr->{'src'}, - size => '200x200', - cancel_size => '200x0', - username => $LJ::PHOTOS_FEAT_POSTS_FB_USERNAME, - password => $LJ::PHOTOS_FEAT_POSTS_FB_PASSWORD, - galleries => [ $LJ::PHOTOS_FEAT_POSTS_FB_GALLERY ], - ) : {}; + ## Hashref with resized image + my $r = undef; + + ## Are we need to update db? + my $is_new_img = 0; + + my $jitemid = $entry->jitemid; + my $journalid = $entry->journalid; + my $dbw = LJ::get_db_writer(); + if ($images_crop_cnt) { + my $post = $dbw->selectrow_arrayref (" + SELECT pic_orig_url, pic_fb_url + FROM category_recent_posts + WHERE jitemid = ? AND journalid = ?", undef, + $jitemid, $journalid + ); + if ($post->[0] eq $attr->{'src'}) { + $r = { + status => 'big', + url => $post->[1], + }; + } else { + $r = LJ::crop_picture_from_web( + source => $attr->{'src'}, + size => '200x200', + cancel_size => '200x0', + username => $LJ::PHOTOS_FEAT_POSTS_FB_USERNAME, + password => $LJ::PHOTOS_FEAT_POSTS_FB_PASSWORD, + galleries => [ $LJ::PHOTOS_FEAT_POSTS_FB_GALLERY ], + ); + $is_new_img = 1; + } + } if ($images_crop_cnt && $r && ($r->{'status'} ne 'small') && $r->{'url'}) { $images_crop_cnt--; push @images, $r->{url}; + $dbw->do (" + UPDATE category_recent_posts + SET pic_orig_url = ?, pic_fb_url = ? + WHERE jitemid = ? AND journalid = ?", undef, + $attr->{'src'}, $r->{'url'}, $jitemid, $journalid + ) if $is_new_img; next; } elsif ($r && $r->{'status'} ne 'small') { next; Modified: trunk/cgi-bin/LJ/Widget/Browse.pm =================================================================== --- trunk/cgi-bin/LJ/Widget/Browse.pm 2011-05-17 07:26:59 UTC (rev 19066) +++ trunk/cgi-bin/LJ/Widget/Browse.pm 2011-05-17 11:08:07 UTC (rev 19067) @@ -280,6 +280,7 @@ remove_tags => [ 'b', 'p', 'div', 'span', 'strong', 'font' ], max_len => 400, crop_image => 1, + entry => $entry, ); $event = $parsed->{'text'}; my $images = $parsed->{'images'};