Add web app model, service to fetch metadata
This commit is contained in:
5
app/models/app_catalog.rb
Normal file
5
app/models/app_catalog.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
module AppCatalog
|
||||
def self.table_name_prefix
|
||||
"app_catalog_"
|
||||
end
|
||||
end
|
||||
9
app/models/app_catalog/web_app.rb
Normal file
9
app/models/app_catalog/web_app.rb
Normal file
@@ -0,0 +1,9 @@
|
||||
class AppCatalog::WebApp < ApplicationRecord
|
||||
|
||||
store :metadata, coder: JSON
|
||||
|
||||
validates :url, presence: true, uniqueness: true
|
||||
validates :url, format: { with: URI.regexp },
|
||||
if: Proc.new { |a| a.url.present? }
|
||||
|
||||
end
|
||||
26
app/services/app_catalog_manager/fetch_metadata.rb
Normal file
26
app/services/app_catalog_manager/fetch_metadata.rb
Normal file
@@ -0,0 +1,26 @@
|
||||
require 'manifique'
|
||||
|
||||
module AppCatalogManager
|
||||
class FetchMetadata < AppCatalogManagerService
|
||||
def initialize(app)
|
||||
@app = app
|
||||
end
|
||||
|
||||
def call
|
||||
agent = Manifique::Agent.new(url: @app.url)
|
||||
metadata = agent.fetch_metadata
|
||||
|
||||
@app.name = metadata.name
|
||||
|
||||
[:name, :short_name, :description, :theme_color, :background_color,
|
||||
:display, :start_url, :scope, :share_target].each do |prop|
|
||||
@app.metadata[prop] = metadata.send(prop) if prop
|
||||
end
|
||||
rescue Manifique::Error => e
|
||||
msg = "Fetching web app manifest failed for #{e.url}: #{e.type}"
|
||||
Rails.logger.warn(msg)
|
||||
Sentry.capture_message(msg) if Setting.sentry_enabled?
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
2
app/services/app_catalog_manager_service.rb
Normal file
2
app/services/app_catalog_manager_service.rb
Normal file
@@ -0,0 +1,2 @@
|
||||
class AppCatalogManagerService < ApplicationService
|
||||
end
|
||||
Reference in New Issue
Block a user