Skip to content

Commit

Permalink
Release 4.18.0 - October 30, 2020
Browse files Browse the repository at this point in the history
  • Loading branch information
jiri-janousek committed Oct 30, 2020
2 parents 72fcd17 + bab41ba commit 0624419
Show file tree
Hide file tree
Showing 15 changed files with 133 additions and 354 deletions.
48 changes: 47 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,51 @@ Nuvola Apps Changelog
[Nuvola Devel mailing list](https://groups.google.com/d/forum/nuvola-player-devel)
to receive more technical announcements and important information about future development.

Release 4.18.0 - October 30, 2020
---------------------------------

This is a concise changelog. Refer to [Nuvola News](https://medium.com/nuvola-news) for a more verbose one and to see
some screenshots.

### What’s New for Users

* **New scripts:** Apple Music and Gaana.

* **Qobuz script** adopted by a new maintainer Romain Berger adjusted to the new design.

* **Pocket Casts script 1.4:** Fix integration of play/pause buttons and volume management
[[GitHub Ticket](https://github.com/tiliado/nuvolaruntime/issues/659)].

* **Google Play Music is shutting down.** The integration script in Nuvola is deprecated and will be eventually
removed. [[GitHub Ticket](https://github.com/tiliado/nuvolaruntime/issues/660)]

* **Users with Tilado account migrated to license keys.** If you use a Tiliado account to activate Nuvola and haven’t
received the e-mail with a license key, please get in touch.
[[GitHub Ticket](https://github.com/tiliado/nuvolaruntime/issues/556)].

* **Widevine plugin is mandatory** to ensure it is available in case a streaming service needs it for better audio
quality. [[GitHub Ticket](https://github.com/tiliado/nuvolaruntime/issues/647)].

* **Nuvola now persists session cookies**, which prevents Jamendo from forgetting an already logged-in user
[[GitHub Ticket](https://github.com/tiliado/nuvolaruntime/issues/567)].

### Under the hood

* **Flatpak manifest refactoring.** Flatpak manifests are recipes used to build Flatpak packages and are now publicly
available at [the tiliado/nuvola-flatpaks repository on GitHub](https://github.com/tiliado/nuvola-flatpaks).
We also upgraded GNOME SDK to the latest version 3.38
[[GitHub ticket](https://github.com/tiliado/nuvolaruntime/issues/641)].

* Flatpak manifests are checked with our new flatpak-manifest-update tool each day to keep our dependencies
up-to-date. [[GitHub Ticket](https://github.com/tiliado/nuvola-flatpaks/issues/2)]

* **Compiler warnings are history.** Nuvola now builds without compiler warnings except for a few deprecations
[[GitHub Ticket](https://github.com/tiliado/nuvolaruntime/issues/483)].

* **Reorganization of git branches.** Nuvola and Diorite used to have the *master* branch for releases and *devel*
branch for development, but the stable release branch is now called *release-4.x* and branch *master* is used for
development. [[GitHub Ticket](https://github.com/tiliado/nuvolaruntime/issues/648)]

Release 4.17.0 - September 28, 2020
-----------------------------------

Expand All @@ -27,7 +72,8 @@ some screenshots.
90 channels dedicated exclusively to electronic music.

* **New script - Primephonic**: Primephonic is a Dutch-American start-up founded by a team of classical music lovers
with the ambition to create a better future for classical music by finally developing a streaming service that gets classical right.
with the ambition to create a better future for classical music by finally developing a streaming service that gets
classical right.

* **Amazon Cloud Player 5.10**:
* Add Brazil support [[GitHub issue](https://github.com/tiliado/nuvola-app-amazon-cloud-player/issues/43)].
Expand Down
Binary file removed data/audio/audiotest.mp3
Binary file not shown.
15 changes: 0 additions & 15 deletions data/audio/testaudio.aup

This file was deleted.

Binary file removed data/audio/testaudio_data/e00/d00/e0000463.au
Binary file not shown.
14 changes: 5 additions & 9 deletions src/nuvolakit-runner/AppRunnerController.vala
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ public class AppRunnerController: Drtgtk.Application {
public string dbus_id {get; private set;}
public string? machine_hash {get; private set; default = null;}
public MasterService master {get; private set;}
private WebOptions[] available_web_options;
private WebOptions? web_options;
public WebEngine web_engine {get; private set;}
public Bindings bindings {get; private set;}
Expand Down Expand Up @@ -116,7 +115,7 @@ public class AppRunnerController: Drtgtk.Application {
debug("Scale factor: %d", about_dialog.scale_factor);
hold();
var startup_check = new StartupCheck(this, startup_model, about_dialog, web_app);
startup_check.run.begin(available_web_options, on_startup_check_run_done);
startup_check.run.begin(web_options, on_startup_check_run_done);
}

private void on_startup_check_run_done(GLib.Object? object, AsyncResult res) {
Expand All @@ -127,7 +126,6 @@ public class AppRunnerController: Drtgtk.Application {
machine_hash = (owned) startup.machine_hash;
master = startup.master;
tiliado_paywall = startup.paywall;
web_options = startup.web_options;

switch (status) {
case StartupStatus.WARNING:
Expand Down Expand Up @@ -230,9 +228,9 @@ public class AppRunnerController: Drtgtk.Application {
connection = new Connection(new Soup.Session(), app_storage.cache_dir.get_child("conn"), config);

#if HAVE_CEF
available_web_options = {WebOptions.create(typeof(CefOptions), app_storage, connection)};
web_options = WebOptions.create(typeof(CefOptions), app_storage, connection);
#else
available_web_options = {WebOptions.create(typeof(DummyOptions), app_storage, connection)};
web_options = WebOptions.create(typeof(DummyOptions), app_storage, connection);
#endif

config.set_default_value(ConfigKey.GTK_THEME, Drtgtk.DesktopShell.get_gtk_theme());
Expand Down Expand Up @@ -454,9 +452,7 @@ public class AppRunnerController: Drtgtk.Application {
}

public void shutdown_engines() {
foreach (WebOptions opt in available_web_options) {
opt.shutdown();
}
web_options.shutdown();
}

public override void startup() {
Expand Down Expand Up @@ -562,7 +558,7 @@ public class AppRunnerController: Drtgtk.Application {
if (about_dialog == null) {
about_dialog = new AboutDialog(
main_window, storage, new StartupView(this, startup_model), web_app,
web_options != null ? new WebOptions[] {web_options} : available_web_options, new PatronBox());
web_options, new PatronBox());
about_dialog.show_close_button(startup_phase == StartupPhase.ALL_DONE);
about_dialog.response.connect_after(on_about_dialog_response);
}
Expand Down
107 changes: 9 additions & 98 deletions src/nuvolakit-runner/cef/CefOptions.vala
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,10 @@ namespace Nuvola {
public class CefOptions : WebOptions {
public override VersionTuple engine_version {get; protected set;}
public CefGtk.WebContext default_context {get; private set; default = null;}
public bool widevine_required {get; set; default = false;}
public bool flash_required {get; private set; default = false;}
public bool widevine_required {get; set; default = true;}
public File widevine_dir {get; private set;}
public File flash_dir {get; private set;}
public CefGtk.InitFlags flags {get; private set;}
public bool widevine_found {get; private set; default = false;}
public bool flash_found {get; private set; default = false;}

public CefOptions(WebAppStorage storage, Connection? connection) {
base(storage, connection);
Expand All @@ -43,7 +40,6 @@ public class CefOptions : WebOptions {
construct {
engine_version = VersionTuple.parse(Cef.get_chromium_version());
widevine_dir = storage.data_dir.get_child("widevine");
flash_dir = storage.data_dir.get_child("flash");
flags = new CefGtk.InitFlags();
flags.auto_play_policy = CefGtk.AutoPlayPolicy.NO_USER_GESTURE_REQUIRED;
}
Expand All @@ -69,25 +65,6 @@ public class CefOptions : WebOptions {
} else {
widevine_found = true;
}
if (flash_required && connection != null) {
var fd = new CefFlashDownloader(connection, flash_dir);
try {
if (fd.exists()) {
yield fd.check_latest();
}
} catch (CefFlashDownloaderError e) {
Drt.warn_error(e, "Failed to get Flash info.");
}
flash_found = fd.exists() && !fd.needs_update();
if (!flash_found) {
var dialog = new CefFlashDownloaderDialog(fd, web_app.name);
yield dialog.wait_for_result();
dialog.destroy();
flash_found = fd.exists() && !fd.needs_update();
}
} else {
flash_found = true;
}
init(web_app);
CefGtk.InitializationResult result = CefGtk.get_init_result();
CefGtk.WidevinePlugin widevine = result.widevine_plugin;
Expand Down Expand Up @@ -128,7 +105,7 @@ public class CefOptions : WebOptions {
flags,
web_app.scale_factor,
widevine_required && widevine_found ? widevine_dir.get_path() : null,
flash_required && flash_found ? flash_dir.get_path() : null,
null,
user_agent, product,
proxy_type, proxy_server, (uint) proxy_port);
default_context = new CefGtk.WebContext(storage.create_data_subdir("cef").get_path());
Expand All @@ -144,86 +121,20 @@ public class CefOptions : WebOptions {
CefGtk.shutdown();
}

public override Drt.RequirementState supports_requirement(string type, string? parameter, out string? error) {
error = null;
switch (type) {
case "chromium":
case "chrome":
if (parameter == null) {
return Drt.RequirementState.SUPPORTED;
}
string param = parameter.strip().down();
if (param[0] == 0) {
return Drt.RequirementState.SUPPORTED;
}
string[] versions = param.split(".");
if (versions.length > 4) {
error = "%s[] received invalid version parameter '%s'.".printf(type, param);
return Drt.RequirementState.ERROR;
}
uint[] uint_versions = {0, 0, 0, 0};
for (var i = 0; i < versions.length; i++) {
int version = int.parse(versions[i]);
if (i < 0) {
error = "%s[] received invalid version parameter '%s'.".printf(type, param);
return Drt.RequirementState.ERROR;
}
uint_versions[i] = (uint) version;
}
return (engine_version.is_greater_or_equal_to(VersionTuple.uintv(uint_versions))
? Drt.RequirementState.SUPPORTED : Drt.RequirementState.UNSUPPORTED);
default:
return Drt.RequirementState.UNSUPPORTED;
}
}

public override Drt.RequirementState supports_feature(string name, out string? error) {
error = null;
switch (name) {
case "mse":
return Drt.RequirementState.SUPPORTED;
case "widevine":
widevine_required = true;
CefGtk.InitializationResult? result = CefGtk.get_init_result();
if (result == null) {
return Drt.RequirementState.UNKNOWN;
}
CefGtk.WidevinePlugin widevine = result.widevine_plugin;
return (widevine != null && widevine.available ?
Drt.RequirementState.SUPPORTED : Drt.RequirementState.UNSUPPORTED);
case "flash":
flash_required = true;
CefGtk.InitializationResult? result = CefGtk.get_init_result();
if (result == null) {
return Drt.RequirementState.UNKNOWN;
}
CefGtk.FlashPlugin flash = result.flash_plugin;
return (flash != null && flash.available
? Drt.RequirementState.SUPPORTED : Drt.RequirementState.UNSUPPORTED);
default:
return Drt.RequirementState.UNSUPPORTED;
}
}

public override Drt.RequirementState supports_codec(string name, out string? error) {
error = null;
switch (name) {
case "mp3":
case "h264":
return Drt.RequirementState.SUPPORTED;
default:
return Drt.RequirementState.UNSUPPORTED;
public override Drt.RequirementState supports_widevine() {
CefGtk.InitializationResult? result = CefGtk.get_init_result();
if (result == null) {
return Drt.RequirementState.UNKNOWN;
}
CefGtk.WidevinePlugin widevine = result.widevine_plugin;
return (widevine != null && widevine.available ?
Drt.RequirementState.SUPPORTED : Drt.RequirementState.UNSUPPORTED);
}

public override string[] get_format_support_warnings() {
string[] warnings = {};
CefGtk.InitializationResult? result = CefGtk.get_init_result();
if (result != null) {
if (result.flash_plugin != null && result.flash_plugin.registration_error != null) {
warnings += Markup.printf_escaped("Failed to load Flash plugin: %s",
result.flash_plugin.registration_error);
}
if (result.widevine_plugin != null && result.widevine_plugin.registration_error != null) {
warnings += Markup.printf_escaped("Failed to load Widevine plugin: %s",
result.widevine_plugin.registration_error);
Expand Down
13 changes: 1 addition & 12 deletions src/nuvolakit-runner/dummy/DummyOptions.vala
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,7 @@ public class DummyOptions : WebOptions {
return new DummyEngine(this, web_app);
}

public override Drt.RequirementState supports_requirement(string type, string? parameter, out string? error) {
error = null;
return Drt.RequirementState.UNSUPPORTED;
}

public override Drt.RequirementState supports_feature(string name, out string? error) {
error = null;
return Drt.RequirementState.UNSUPPORTED;
}

public override Drt.RequirementState supports_codec(string name, out string? error) {
error = null;
public override Drt.RequirementState supports_widevine() {
return Drt.RequirementState.UNSUPPORTED;
}

Expand Down
Loading

0 comments on commit 0624419

Please sign in to comment.