about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThibaut Girka <thib@sitedethib.com>2018-10-31 10:08:36 +0100
committerThibaut Girka <thib@sitedethib.com>2018-10-31 10:08:36 +0100
commit75b48dc1771f805f43c9dd2d55fc32ccf8951d68 (patch)
tree28f8a4165549a8406abf791a31d05f53a73f051f
parent2b2facbbdfb7c0b53e38048e932143d592af401e (diff)
parentba06a5f485d305bc917506828fd5cb20b3f0c226 (diff)
Merge branch 'master' into glitch-soc/merge-upstream
-rw-r--r--CHANGELOG.md24
-rw-r--r--app/javascript/mastodon/locales/oc.json14
-rw-r--r--app/javascript/mastodon/reducers/conversations.js2
-rw-r--r--app/services/fetch_atom_service.rb10
-rw-r--r--config/locales/oc.yml6
-rw-r--r--config/locales/simple_form.oc.yml2
-rw-r--r--db/migrate/20181024224956_migrate_account_conversations.rb30
-rw-r--r--lib/mastodon/version.rb4
-rw-r--r--package.json2
-rw-r--r--spec/services/fetch_atom_service_spec.rb9
10 files changed, 41 insertions, 62 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3c6847e0b..cb8bf3272 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,13 @@ Changelog
 
 All notable changes to this project will be documented in this file.
 
-## [Unreleased]
+## [2.6.1] - 2018-10-30
+### Fixed
+
+- Fix resolving resources by URL not working due to a regression in #9132 (#9171)
+- Fix reducer error in web UI when a conversation has no last status (#9173)
+
+## [2.6.0] - 2018-10-30
 ### Added
 
 - Add link ownership verification (#8703)
@@ -46,7 +52,7 @@ All notable changes to this project will be documented in this file.
 - Add CORS header to `/.well-known/*` routes (#9083)
 - Add `card` attribute to statuses returned from REST API (#9120)
 - Add in-stream link preview (#9120)
-- Add support for ActivityPub `Page` objects (#9121) 
+- Add support for ActivityPub `Page` objects (#9121)
 
 ### Changed
 
@@ -63,7 +69,7 @@ All notable changes to this project will be documented in this file.
 - Change recommended Ruby version to 2.5.3 (#9003)
 - Change docker-compose default to persist volumes in current directory (#9055)
 - Change character counters on edit profile page to input length limit (#9100)
-- Change notification filtering to always let through messages from staff (#9152) 
+- Change notification filtering to always let through messages from staff (#9152)
 - Change "hide boosts from user" function also hiding notifications about boosts (#9147)
 - Change CSS `detailed-status__wrapper` class actually wrap the detailed status (#8547)
 
@@ -97,15 +103,15 @@ All notable changes to this project will be documented in this file.
 - Fix some hotkeys not working on detailed status view (#9006)
 - Fix og:url on status pages (#9047)
 - Fix upload option buttons only being visible on hover (#9074)
-- Fix tootctl not returning exit code 1 on wrong arguments (#9094) 
-- Fix preview cards for appearing for profiles mentioned in toot (#6934, #9158) 
+- Fix tootctl not returning exit code 1 on wrong arguments (#9094)
+- Fix preview cards for appearing for profiles mentioned in toot (#6934, #9158)
 - Fix local accounts sometimes being duplicated as faux-remote (#9109)
 - Fix emoji search when the shortcode has multiple separators (#9124)
-- Fix dropdowns sometimes being partially obscured by other elements (#9126) 
-- Fix cache not updating when reply/boost/favourite counters or media sensitivity update (#9119) 
-- Fix empty display name precedence over username in web UI (#9163) 
+- Fix dropdowns sometimes being partially obscured by other elements (#9126)
+- Fix cache not updating when reply/boost/favourite counters or media sensitivity update (#9119)
+- Fix empty display name precedence over username in web UI (#9163)
 - Fix td instead of th in sessions table header (#9162)
-- Fix handling of content types with profile (#9132) 
+- Fix handling of content types with profile (#9132)
 
 ## [2.5.2] - 2018-10-12
 ### Security
diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json
index 93ab4be7d..5df64e192 100644
--- a/app/javascript/mastodon/locales/oc.json
+++ b/app/javascript/mastodon/locales/oc.json
@@ -90,9 +90,9 @@
   "confirmations.mute.confirm": "Rescondre",
   "confirmations.mute.message": "Volètz vertadièrament rescondre {name} ?",
   "confirmations.redraft.confirm": "Escafar & tornar formular",
-  "confirmations.redraft.message": "Volètz vertadièrament escafar aqueste estatut e lo reformular ? Tote sos partiments e favorits seràn perduts, e sas responsas seràn orfanèlas.",
+  "confirmations.redraft.message": "Volètz vertadièrament escafar aqueste estatut e lo reformular ? Totes sos partiments e favorits seràn perduts, e sas responsas seràn orfanèlas.",
   "confirmations.reply.confirm": "Respondre",
-  "confirmations.reply.message": "Respondre remplaçarà lo messatge que sètz a escriure. Volètz vertadièrament contunhar ?",
+  "confirmations.reply.message": "Respondre remplaçarà lo messatge que sètz a escriure. Volètz vertadièrament contunhar ?",
   "confirmations.unfollow.confirm": "Quitar de sègre",
   "confirmations.unfollow.message": "Volètz vertadièrament quitar de sègre {name} ?",
   "embed.instructions": "Embarcar aqueste estatut per lo far veire sus un site Internet en copiar lo còdi çai-jos.",
@@ -115,8 +115,8 @@
   "empty_column.community": "Lo flux public local es void. Escrivètz quicòm per lo garnir !",
   "empty_column.direct": "Avètz pas encara cap de messatges. Quand ne mandatz un o que ne recebètz un, serà mostrat aquí.",
   "empty_column.domain_blocks": "I a pas encara cap de domeni amagat.",
-  "empty_column.favourited_statuses": "Avètz pas encara cap de tut favorit. Quanda n’auretz un, apareisserà  aquí.",
-  "empty_column.favourites": "Degun a pas encara mes en favorit aqueste tut. Quanda qualqu’un o farà, apareisserà  aquí.",
+  "empty_column.favourited_statuses": "Avètz pas encara cap de tut favorit. Quand n’auretz un, apareisserà aquí.",
+  "empty_column.favourites": "Degun a pas encara mes en favorit aqueste tut. Quand qualqu’un o farà, apareisserà aquí.",
   "empty_column.follow_requests": "Avètz pas encara de demanda d’abonament. Quand n’auretz una apareisserà aquí.",
   "empty_column.hashtag": "I a pas encara de contengut ligat a aquesta etiqueta.",
   "empty_column.home": "Vòstre flux d’acuèlh es void. Visitatz {public} o utilizatz la recèrca per vos connectar a d’autras personas.",
@@ -129,7 +129,7 @@
   "follow_request.authorize": "Acceptar",
   "follow_request.reject": "Regetar",
   "getting_started.developers": "Desvelopaires",
-  "getting_started.documentation": "Documentation",
+  "getting_started.documentation": "Documentacion",
   "getting_started.find_friends": "Trobar d’amics de Twitter",
   "getting_started.heading": "Per començar",
   "getting_started.invite": "Convidar de monde",
@@ -145,7 +145,7 @@
   "keyboard_shortcuts.column": "centrar un estatut a una colomna",
   "keyboard_shortcuts.compose": "anar al camp tèxte",
   "keyboard_shortcuts.description": "Descripcion",
-  "keyboard_shortcuts.direct": "per dobrir la columna de messatges dirèctes",
+  "keyboard_shortcuts.direct": "per dobrir la colomna de messatges dirèctes",
   "keyboard_shortcuts.down": "far davalar dins la lista",
   "keyboard_shortcuts.enter": "dobrir los estatuts",
   "keyboard_shortcuts.favourite": "apondre als favorits",
@@ -159,7 +159,7 @@
   "keyboard_shortcuts.mention": "mencionar l’autor",
   "keyboard_shortcuts.muted": "per dobrir la lista dels utilizaires silenciats",
   "keyboard_shortcuts.my_profile": "per dobrir vòstre perfil",
-  "keyboard_shortcuts.notifications": "per dobrir la columna de notificacions",
+  "keyboard_shortcuts.notifications": "per dobrir la colomna de notificacions",
   "keyboard_shortcuts.pinned": "per dobrir la lista dels tuts penjats",
   "keyboard_shortcuts.profile": "per dobrir lo perfil de l’autor",
   "keyboard_shortcuts.reply": "respondre",
diff --git a/app/javascript/mastodon/reducers/conversations.js b/app/javascript/mastodon/reducers/conversations.js
index ea39fccee..b13a9fdf4 100644
--- a/app/javascript/mastodon/reducers/conversations.js
+++ b/app/javascript/mastodon/reducers/conversations.js
@@ -21,7 +21,7 @@ const conversationToMap = item => ImmutableMap({
   id: item.id,
   unread: item.unread,
   accounts: ImmutableList(item.accounts.map(a => a.id)),
-  last_status: item.last_status.id,
+  last_status: item.last_status ? item.last_status.id : null,
 });
 
 const updateConversation = (state, item) => state.update('items', list => {
diff --git a/app/services/fetch_atom_service.rb b/app/services/fetch_atom_service.rb
index b6c6cdd1c..550e75f33 100644
--- a/app/services/fetch_atom_service.rb
+++ b/app/services/fetch_atom_service.rb
@@ -29,7 +29,7 @@ class FetchAtomService < BaseService
 
   def perform_request(&block)
     accept = 'text/html'
-    accept = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams", application/atom+xml, ' + accept unless @unsupported_activity
+    accept = 'application/activity+json, application/ld+json, application/atom+xml, ' + accept unless @unsupported_activity
 
     Request.new(:get, @url).add_headers('Accept' => accept).perform(&block)
   end
@@ -37,11 +37,9 @@ class FetchAtomService < BaseService
   def process_response(response, terminal = false)
     return nil if response.code != 200
 
-    response_type = response.headers['Content-type']
-
-    if response_type == 'application/atom+xml'
+    if response.mime_type == 'application/atom+xml'
       [@url, { prefetched_body: response.body_with_limit }, :ostatus]
-    elsif ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(response_type)
+    elsif ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(response.mime_type)
       body = response.body_with_limit
       json = body_to_json(body)
       if supported_context?(json) && equals_or_includes_any?(json['type'], ActivityPub::FetchRemoteAccountService::SUPPORTED_TYPES) && json['inbox'].present?
@@ -57,7 +55,7 @@ class FetchAtomService < BaseService
 
       if link_header&.find_link(%w(rel alternate))
         process_link_headers(link_header)
-      elsif response_type == 'text/html'
+      elsif response.mime_type == 'text/html'
         process_html(response)
       end
     end
diff --git a/config/locales/oc.yml b/config/locales/oc.yml
index 61717ca3b..d968567dd 100644
--- a/config/locales/oc.yml
+++ b/config/locales/oc.yml
@@ -139,7 +139,7 @@ oc:
       resend_confirmation:
         already_confirmed: Aqueste utilizaire es ja confirmat
         send: Tornar mandar lo corrièl de confirmacion
-        success: Corrièl de confirmacion corrèctament mandat !
+        success: Corrièl de confirmacion corrèctament mandat !
       reset: Reïnicializar
       reset_password: Reïnicializar lo senhal
       resubscribe: Se tornar abonar
@@ -438,11 +438,11 @@ oc:
       title: WebSub
       topic: Subjècte
     suspensions:
-      bad_acct_msg: La valor de confirmacion a pas coïncidit. Sètz a suspendre lo bon compte ?
+      bad_acct_msg: La valor de confirmacion a pas coïncidit. Sètz a suspendre lo bon compte ?
       hint_html: 'Per confirmar la suspension del compte, picatz %{value} al camp çai-jos :'
       proceed: Tractat
       title: Suspension de %{acct}
-      warning_html: 'Suspendre aqueste compte suprimirà <strong>irreversiblament</strong> las donadas del compte, aquò compren :'
+      warning_html: 'Suspendre aqueste compte suprimirà <strong>irreversiblament</strong> las donadas del compte, aquò compren :'
     title: Administracion
   admin_mailer:
     new_report:
diff --git a/config/locales/simple_form.oc.yml b/config/locales/simple_form.oc.yml
index c7cc2b471..bb9e3529c 100644
--- a/config/locales/simple_form.oc.yml
+++ b/config/locales/simple_form.oc.yml
@@ -30,7 +30,7 @@ oc:
       imports:
         data: Fichièr CSV exportat d’una autra instància Mastodon
       sessions:
-        otp: 'Picatz lo còdi d’autentificacion en dos temps (Two factor code) de vòstra aplicacion mobil o utilizatz un de vòstres còdis de recuperacion :'
+        otp: 'Picatz lo còdi d’autentificacion en dos temps (Two factor code) de vòstra aplicacion mobil o utilizatz un de vòstres còdis de recuperacion :'
       user:
         chosen_languages: Quand seleccionadas, solament los tuts dins las lengas triadas seràn mostrats dins vòstre flux d’actualitat
     labels:
diff --git a/db/migrate/20181024224956_migrate_account_conversations.rb b/db/migrate/20181024224956_migrate_account_conversations.rb
index 47f7375ba..b718f9e1d 100644
--- a/db/migrate/20181024224956_migrate_account_conversations.rb
+++ b/db/migrate/20181024224956_migrate_account_conversations.rb
@@ -14,17 +14,15 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
       sleep 1
     end
 
-    total        = estimate_rows(local_direct_statuses) + estimate_rows(notifications_about_direct_statuses)
-    migrated     = 0
-    started_time = Time.zone.now
-    last_time    = Time.zone.now
+    migrated  = 0
+    last_time = Time.zone.now
 
     local_direct_statuses.includes(:account, mentions: :account).find_each do |status|
       AccountConversation.add_status(status.account, status)
       migrated += 1
 
       if Time.zone.now - last_time > 1
-        say_progress(migrated, total, started_time)
+        say_progress(migrated)
         last_time = Time.zone.now
       end
     end
@@ -34,7 +32,7 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
       migrated += 1
 
       if Time.zone.now - last_time > 1
-        say_progress(migrated, total, started_time)
+        say_progress(migrated)
         last_time = Time.zone.now
       end
     end
@@ -45,24 +43,8 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
 
   private
 
-  def estimate_rows(query)
-    result = exec_query("EXPLAIN #{query.to_sql}").first
-    result['QUERY PLAN'].scan(/ rows=([\d]+)/).first&.first&.to_i || 0
-  end
-
-  def say_progress(migrated, total, started_time)
-    status = "Migrated #{migrated} rows"
-
-    percentage = 100.0 * migrated / total
-    status += " (~#{sprintf('%.2f', percentage)}%, "
-
-    remaining_time = (100.0 - percentage) * (Time.zone.now - started_time) / percentage
-
-    status += "#{(remaining_time / 60).to_i}:"
-    status += sprintf('%02d', remaining_time.to_i % 60)
-    status += ' remaining)'
-
-    say status, true
+  def say_progress(migrated)
+    say "Migrated #{migrated} rows", true
   end
 
   def local_direct_statuses
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 2b38ae05b..60c4ffaa6 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -13,7 +13,7 @@ module Mastodon
     end
 
     def patch
-      0
+      1
     end
 
     def pre
@@ -21,7 +21,7 @@ module Mastodon
     end
 
     def flags
-      'rc4'
+      ''
     end
 
     def to_a
diff --git a/package.json b/package.json
index 8a79938ae..417e07cce 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "name": "mastodon",
   "license": "AGPL-3.0-or-later",
   "engines": {
-    "node": ">=8"
+    "node": ">=8 <11"
   },
   "scripts": {
     "postversion": "git push --tags",
diff --git a/spec/services/fetch_atom_service_spec.rb b/spec/services/fetch_atom_service_spec.rb
index 0cdcda892..30e5b0935 100644
--- a/spec/services/fetch_atom_service_spec.rb
+++ b/spec/services/fetch_atom_service_spec.rb
@@ -60,20 +60,13 @@ RSpec.describe FetchAtomService, type: :service do
         it { is_expected.to eq [url, { :prefetched_body => "" }, :ostatus] }
       end
 
-      context 'content_type is activity+json' do
+      context 'content_type is json' do
         let(:content_type) { 'application/activity+json' }
         let(:body) { json }
 
         it { is_expected.to eq [1, { prefetched_body: body, id: true }, :activitypub] }
       end
 
-      context 'content_type is ld+json with profile' do
-        let(:content_type) { 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' }
-        let(:body) { json }
-
-        it { is_expected.to eq [1, { prefetched_body: body, id: true }, :activitypub] }
-      end
-
       before do
         WebMock.stub_request(:get, url).to_return(status: 200, body: body, headers: headers)
         WebMock.stub_request(:get, 'http://example.com/foo').to_return(status: 200, body: json, headers: { 'Content-Type' => 'application/activity+json' })