Skip to content

Commit d346493

Browse files
committed
Give all accounts 100 free images with Basil
1 parent 95e4b65 commit d346493

File tree

8 files changed

+124
-57
lines changed

8 files changed

+124
-57
lines changed

app/controllers/basil_controller.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ def index
1616

1717
@content = @current_user_content[@content_type].sort_by(&:name)
1818
end
19+
20+
@generated_images_count = current_user.basil_commissions.with_deleted.count
1921
end
2022

2123
def content
@@ -199,6 +201,8 @@ def content
199201
.limit(10)
200202
.includes(:basil_feedbacks, :image_blob)
201203
@in_progress_commissions = @commissions.select { |c| c.completed_at.nil? }
204+
@generated_images_count = current_user.basil_commissions.with_deleted.count
205+
202206
@can_request_another = @in_progress_commissions.count < 3
203207
end
204208

@@ -404,9 +408,17 @@ def page_stats
404408

405409
def review
406410
@recent_commissions = BasilCommission.all.includes(:entity, :user).order('id DESC').limit(100)
411+
412+
@commissions_per_user_id = BasilCommission.where('created_at > ?', 48.hours.ago).group(:user_id).order('count_all DESC').limit(5).count
407413
end
408414

409415
def commission
416+
@generated_images_count = current_user.basil_commissions.with_deleted.count
417+
if @generated_images_count > BasilService::FREE_IMAGE_LIMIT
418+
redirect_back fallback_location: basil_path, notice: "You've reached your free image limit. Please upgrade to generate more images."
419+
return
420+
end
421+
410422
# Fetch the related content
411423
@content = @current_user_content[commission_params.fetch(:entity_type)]
412424
.find { |c| c.id == commission_params.fetch(:entity_id).to_i }

app/models/basil_commission.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
class BasilCommission < ApplicationRecord
2+
acts_as_paranoid
3+
24
belongs_to :user
35
belongs_to :entity, polymorphic: true
46

app/services/basil_service.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
class BasilService < Service
2+
FREE_IMAGE_LIMIT = 100
3+
24
IGNORED_VALUES = ['', 'none', 'n/a', '.', '-', ' ', '?', '??', '???', 'x', nil]
35

46
ENABLED_PAGE_TYPES = [

app/views/basil/content.html.erb

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,7 @@ function commission_basil(style) {
110110
</div>
111111
<% end %>
112112
</div>
113-
<% end %>
114-
115-
<% if @can_request_another && @relevant_fields.any? %>
113+
116114
<% if BasilService.experimental_styles_for(@content.page_type).any? %>
117115
<div class="row" style="padding-left: 0.5rem">
118116
<div class="grey-text center"><strong>Experimental styles</strong></div>
@@ -130,21 +128,32 @@ function commission_basil(style) {
130128
<% end %>
131129
<% end %>
132130

133-
<% if !@can_request_another %>
131+
<% if !@can_request_another && @in_progress_commissions.any? %>
134132
<div class="card-panel purple white-text">
135133
Basil is working on your <%= pluralize @in_progress_commissions.count, 'requested commission' %>.
136134
<br /><br />
137135
As soon as he completes one, you'll be able to request another.
138136
</div>
139137
<% end %>
140138

141-
<!--
142-
<% if @commissions.any? %>
143-
<div class="card-panel">
144-
<strong>Like an image and want to keep it?</strong> Just click <strong>Save</strong> and it'll save to your <%= @content.name %> page next to any normal uploads.
139+
<% if !@can_request_another && @generated_images_count >= BasilService::FREE_IMAGE_LIMIT %>
140+
<div class="orange lighten-2 card-panel">
141+
<strong>
142+
Image generation is a Premium-only feature, but free accounts can still generate up
143+
to <%= pluralize BasilService::FREE_IMAGE_LIMIT, 'image' %> for free.
144+
</strong>
145+
<br /><br />
146+
You have generated <%= pluralize @generated_images_count, 'image' %>
147+
and have <%= pluralize [0, BasilService::FREE_IMAGE_LIMIT - @generated_images_count].max, 'image' %> remaining:
148+
<div class="progress white">
149+
<div class="determinate blue" style="width: <%= [@generated_images_count, BasilService::FREE_IMAGE_LIMIT].min %>%"></div>
150+
</div>
151+
152+
<% if @generated_images_count > BasilService::FREE_IMAGE_LIMIT %>
153+
<%= link_to 'Click here to manage your billing plan', subscription_path, class: 'blue-text text-darken-4' %>
154+
<% end %>
145155
</div>
146156
<% end %>
147-
-->
148157

149158
<% @commissions.each do |commission| %>
150159
<div>

app/views/basil/index.html.erb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,26 @@
3838
</p>
3939
</div>
4040
<div class="col s12 m8 l9">
41+
42+
<% if true %>
43+
<div class="orange lighten-2 card-panel">
44+
<strong>
45+
Image generation is a Premium-only feature, but free accounts can still generate up
46+
to <%= pluralize BasilService::FREE_IMAGE_LIMIT, 'image' %> for free.
47+
</strong>
48+
<br /><br />
49+
You have generated <%= pluralize @generated_images_count, 'image' %>
50+
and have <%= pluralize [0, BasilService::FREE_IMAGE_LIMIT - @generated_images_count].max, 'image' %> remaining:
51+
<div class="progress white">
52+
<div class="determinate blue" style="width: <%= [@generated_images_count, BasilService::FREE_IMAGE_LIMIT].min %>%"></div>
53+
</div>
54+
55+
<% if @generated_images_count > BasilService::FREE_IMAGE_LIMIT %>
56+
<%= link_to 'Click here to manage your billing plan', subscription_path, class: 'blue-text text-darken-4' %>
57+
<% end %>
58+
</div>
59+
<% end %>
60+
4161
<% if @universe_scope %>
4262
<div class="card-panel <%= Universe.color %> white-text">
4363
<i class="material-icons left"><%= Universe.icon %></i>

app/views/basil/review.html.erb

Lines changed: 63 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,69 @@
1-
<% @recent_commissions.each do |commission| %>
2-
<div>
3-
<% if commission.complete? %>
4-
<%# image_tag commission.image, style: 'width: 100%' %>
5-
<%
6-
s3 = Aws::S3::Resource.new(region: "us-east-1")
7-
obj = s3.bucket(commission.s3_bucket).object("job-#{commission.job_id}.png")
8-
%>
9-
<div class="card horizontal">
10-
<div class="card-image">
11-
<%= link_to obj.presigned_url(:get) do %>
12-
<%= image_tag obj.presigned_url(:get) %>
13-
<% end %>
14-
</div>
15-
<div class="card-stacked">
16-
<div class="card-content">
17-
<div>
18-
<%= commission.id %>.
19-
<% if commission.entity.present? %>
20-
<strong><%= link_to commission.entity.name, commission.entity %></strong>
21-
<% end %>
22-
<% if commission.style? %>
23-
<em>(<%= commission.style.humanize %>)</em>
1+
<div class="row">
2+
<div class="col s3">
3+
<br />
4+
<div><strong>Most-active creators over 48h</strong></div>
5+
<ol>
6+
<% @commissions_per_user_id.each do |user_id, count| %>
7+
<%# This is an N+1 query, but we can deal with it later %>
8+
<% user = User.find(user_id.to_i) %>
9+
<li><%= link_to user.display_name, user %>: <%= pluralize count, 'image' %></li>
10+
<% end %>
11+
</ol>
12+
</div>
13+
<div class="col s9">
14+
<% @recent_commissions.each do |commission| %>
15+
<div>
16+
<% if commission.complete? %>
17+
<%# image_tag commission.image, style: 'width: 100%' %>
18+
<%
19+
s3 = Aws::S3::Resource.new(region: "us-east-1")
20+
obj = s3.bucket(commission.s3_bucket).object("job-#{commission.job_id}.png")
21+
%>
22+
<div class="card horizontal">
23+
<div class="card-image">
24+
<%= link_to obj.presigned_url(:get) do %>
25+
<%= image_tag obj.presigned_url(:get) %>
2426
<% end %>
25-
by <%= link_to commission.user.name, commission.user %>
26-
<div style="font-size: 0.5em"><%= commission.job_id %></div>
2727
</div>
28-
<ul>
29-
<li>
30-
Completed <%= time_ago_in_words commission.completed_at %> ago
31-
</li>
32-
<li>
33-
Took <%= distance_of_time_in_words commission.completed_at - commission.created_at %>
34-
</li>
35-
<hr />
36-
<li>
37-
<div>Preprompt:</div>
38-
<%= commission.prompt.inspect %>
39-
</li>
40-
</ul>
28+
<div class="card-stacked">
29+
<div class="card-content">
30+
<div>
31+
<%= commission.id %>.
32+
<% if commission.entity.present? %>
33+
<strong><%= link_to commission.entity.name, commission.entity %></strong>
34+
<% end %>
35+
<% if commission.style? %>
36+
<em>(<%= commission.style.humanize %>)</em>
37+
<% end %>
38+
by <%= link_to commission.user.name, commission.user %>
39+
<div style="font-size: 0.5em"><%= commission.job_id %></div>
40+
</div>
41+
<ul>
42+
<li>
43+
Completed <%= time_ago_in_words commission.completed_at %> ago
44+
</li>
45+
<li>
46+
Took <%= distance_of_time_in_words commission.completed_at - commission.created_at %>
47+
</li>
48+
<hr />
49+
<li>
50+
<div>Preprompt:</div>
51+
<%= commission.prompt.inspect %>
52+
</li>
53+
</ul>
54+
</div>
55+
</div>
4156
</div>
42-
</div>
43-
</div>
44-
<% else %>
45-
<div class="card-panel green white-text darken-4">
46-
Basil is still working on this commission...
47-
<div style="font-size: 0.8em">
48-
(Requested <%= time_ago_in_words(commission.created_at) %> ago)
49-
</div>
57+
<% else %>
58+
<div class="card-panel green white-text darken-4">
59+
Basil is still working on this commission...
60+
<div style="font-size: 0.8em">
61+
(Requested <%= time_ago_in_words(commission.created_at) %> ago)
62+
</div>
63+
</div>
64+
<% end %>
5065
</div>
5166
<% end %>
67+
5268
</div>
53-
<% end %>
69+
</div>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class AddDeletedAtColumnToBasilCommissions < ActiveRecord::Migration[6.1]
2+
def change
3+
add_column :basil_commissions, :deleted_at, :datetime
4+
end
5+
end

db/schema.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema.define(version: 2023_03_23_231640) do
13+
ActiveRecord::Schema.define(version: 2023_04_14_183606) do
1414

1515
create_table "active_storage_attachments", force: :cascade do |t|
1616
t.string "name", null: false
@@ -200,6 +200,7 @@
200200
t.float "cached_seconds_taken"
201201
t.string "s3_bucket", default: "basil-commissions"
202202
t.datetime "saved_at"
203+
t.datetime "deleted_at"
203204
t.index ["entity_type", "entity_id", "saved_at"], name: "basil_commissions_ees"
204205
t.index ["entity_type", "entity_id", "style"], name: "basil_commissions_ees2"
205206
t.index ["entity_type", "entity_id"], name: "basil_commissions_ee"

0 commit comments

Comments
 (0)