Merge upstream master
This commit is contained in:
parent
ca5c7022ef
commit
e181a9837a
@ -125,7 +125,7 @@ rustfmt:
|
|||||||
script:
|
script:
|
||||||
- rustc -Vv && cargo -Vv
|
- rustc -Vv && cargo -Vv
|
||||||
- cargo fmt --version
|
- cargo fmt --version
|
||||||
- cargo fmt --all -- --write-mode=diff
|
- cargo fmt --all -- --check
|
||||||
|
|
||||||
# Configure and run clippy on nightly
|
# Configure and run clippy on nightly
|
||||||
# Only fails on errors atm.
|
# Only fails on errors atm.
|
||||||
@ -140,4 +140,4 @@ clippy:
|
|||||||
# Force regeneration of gresources regardless of artifacts chage
|
# Force regeneration of gresources regardless of artifacts chage
|
||||||
- cd hammond-gtk/resources/ && glib-compile-resources --generate resources.xml && cd ../../
|
- cd hammond-gtk/resources/ && glib-compile-resources --generate resources.xml && cd ../../
|
||||||
- cargo clippy --all
|
- cargo clippy --all
|
||||||
<<: *cargo_cache
|
<<: *cargo_cache
|
||||||
|
|||||||
@ -10,6 +10,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|||||||
### Fixed:
|
### Fixed:
|
||||||
### Removed:
|
### Removed:
|
||||||
|
|
||||||
|
## [0.3.4] - 2018-05-20
|
||||||
|
### Fixed:
|
||||||
|
- Flatpak can now access the Home folder. This fixes the OPML import feature from
|
||||||
|
not being able to access any file.
|
||||||
|
|
||||||
## [0.3.3] - 2018-05-19
|
## [0.3.3] - 2018-05-19
|
||||||
### Added:
|
### Added:
|
||||||
- Initial functionality for importing shows from an OPML file was implemented.
|
- Initial functionality for importing shows from an OPML file was implemented.
|
||||||
|
|||||||
@ -174,7 +174,8 @@ mod tests {
|
|||||||
fn test_complete_index() {
|
fn test_complete_index() {
|
||||||
truncate_db().unwrap();
|
truncate_db().unwrap();
|
||||||
|
|
||||||
let feeds: Vec<_> = URLS.iter()
|
let feeds: Vec<_> = URLS
|
||||||
|
.iter()
|
||||||
.map(|&(path, url)| {
|
.map(|&(path, url)| {
|
||||||
// Create and insert a Source into db
|
// Create and insert a Source into db
|
||||||
let s = Source::from_url(url).unwrap();
|
let s = Source::from_url(url).unwrap();
|
||||||
|
|||||||
@ -101,17 +101,23 @@ impl Index<()> for NewEpisode {
|
|||||||
|
|
||||||
impl PartialEq<EpisodeMinimal> for NewEpisode {
|
impl PartialEq<EpisodeMinimal> for NewEpisode {
|
||||||
fn eq(&self, other: &EpisodeMinimal) -> bool {
|
fn eq(&self, other: &EpisodeMinimal) -> bool {
|
||||||
(self.title() == other.title()) && (self.uri() == other.uri())
|
(self.title() == other.title())
|
||||||
&& (self.duration() == other.duration()) && (self.epoch() == other.epoch())
|
&& (self.uri() == other.uri())
|
||||||
&& (self.guid() == other.guid()) && (self.podcast_id() == other.podcast_id())
|
&& (self.duration() == other.duration())
|
||||||
|
&& (self.epoch() == other.epoch())
|
||||||
|
&& (self.guid() == other.guid())
|
||||||
|
&& (self.podcast_id() == other.podcast_id())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PartialEq<Episode> for NewEpisode {
|
impl PartialEq<Episode> for NewEpisode {
|
||||||
fn eq(&self, other: &Episode) -> bool {
|
fn eq(&self, other: &Episode) -> bool {
|
||||||
(self.title() == other.title()) && (self.uri() == other.uri())
|
(self.title() == other.title())
|
||||||
&& (self.duration() == other.duration()) && (self.epoch() == other.epoch())
|
&& (self.uri() == other.uri())
|
||||||
&& (self.guid() == other.guid()) && (self.podcast_id() == other.podcast_id())
|
&& (self.duration() == other.duration())
|
||||||
|
&& (self.epoch() == other.epoch())
|
||||||
|
&& (self.guid() == other.guid())
|
||||||
|
&& (self.podcast_id() == other.podcast_id())
|
||||||
&& (self.description() == other.description())
|
&& (self.description() == other.description())
|
||||||
&& (self.length() == other.length())
|
&& (self.length() == other.length())
|
||||||
}
|
}
|
||||||
@ -182,9 +188,12 @@ pub(crate) struct NewEpisodeMinimal {
|
|||||||
|
|
||||||
impl PartialEq<EpisodeMinimal> for NewEpisodeMinimal {
|
impl PartialEq<EpisodeMinimal> for NewEpisodeMinimal {
|
||||||
fn eq(&self, other: &EpisodeMinimal) -> bool {
|
fn eq(&self, other: &EpisodeMinimal) -> bool {
|
||||||
(self.title() == other.title()) && (self.uri() == other.uri())
|
(self.title() == other.title())
|
||||||
&& (self.duration() == other.duration()) && (self.epoch() == other.epoch())
|
&& (self.uri() == other.uri())
|
||||||
&& (self.guid() == other.guid()) && (self.podcast_id() == other.podcast_id())
|
&& (self.duration() == other.duration())
|
||||||
|
&& (self.epoch() == other.epoch())
|
||||||
|
&& (self.guid() == other.guid())
|
||||||
|
&& (self.podcast_id() == other.podcast_id())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -83,7 +83,8 @@ impl Index<()> for NewPodcast {
|
|||||||
|
|
||||||
impl PartialEq<Podcast> for NewPodcast {
|
impl PartialEq<Podcast> for NewPodcast {
|
||||||
fn eq(&self, other: &Podcast) -> bool {
|
fn eq(&self, other: &Podcast) -> bool {
|
||||||
(self.link() == other.link()) && (self.title() == other.title())
|
(self.link() == other.link())
|
||||||
|
&& (self.title() == other.title())
|
||||||
&& (self.image_uri() == other.image_uri())
|
&& (self.image_uri() == other.image_uri())
|
||||||
&& (self.description() == other.description())
|
&& (self.description() == other.description())
|
||||||
&& (self.source_id() == other.source_id())
|
&& (self.source_id() == other.source_id())
|
||||||
@ -103,7 +104,8 @@ impl NewPodcast {
|
|||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
// Try to get the itunes img first
|
// Try to get the itunes img first
|
||||||
let itunes_img = chan.itunes_ext()
|
let itunes_img = chan
|
||||||
|
.itunes_ext()
|
||||||
.and_then(|s| s.image().map(|url| url.trim()))
|
.and_then(|s| s.image().map(|url| url.trim()))
|
||||||
.map(|s| s.to_owned());
|
.map(|s| s.to_owned());
|
||||||
// If itunes is None, try to get the channel.image from the rss spec
|
// If itunes is None, try to get the channel.image from the rss spec
|
||||||
|
|||||||
@ -197,7 +197,8 @@ pub fn get_episode(
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn cache_image(pd: &PodcastCoverQuery) -> Result<String, DownloadError> {
|
pub fn cache_image(pd: &PodcastCoverQuery) -> Result<String, DownloadError> {
|
||||||
let url = pd.image_uri()
|
let url = pd
|
||||||
|
.image_uri()
|
||||||
.ok_or_else(|| DownloadError::NoImageLocation)?
|
.ok_or_else(|| DownloadError::NoImageLocation)?
|
||||||
.to_owned();
|
.to_owned();
|
||||||
|
|
||||||
@ -215,7 +216,8 @@ pub fn cache_image(pd: &PodcastCoverQuery) -> Result<String, DownloadError> {
|
|||||||
// For some reason there is no .first() method so nth(0) is used
|
// For some reason there is no .first() method so nth(0) is used
|
||||||
let path = foo.nth(0).and_then(|x| x.ok());
|
let path = foo.nth(0).and_then(|x| x.ok());
|
||||||
if let Some(p) = path {
|
if let Some(p) = path {
|
||||||
return Ok(p.to_str()
|
return Ok(p
|
||||||
|
.to_str()
|
||||||
.ok_or_else(|| DownloadError::InvalidCachedImageLocation)?
|
.ok_or_else(|| DownloadError::InvalidCachedImageLocation)?
|
||||||
.into());
|
.into());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
</screenshot>
|
</screenshot>
|
||||||
</screenshots>
|
</screenshots>
|
||||||
<releases>
|
<releases>
|
||||||
<release version="0.3.3" date="2018-05-19"/>
|
<release version="0.3.4" date="2018-05-20"/>
|
||||||
</releases>
|
</releases>
|
||||||
<url type="homepage">https://gitlab.gnome.org/World/hammond</url>
|
<url type="homepage">https://gitlab.gnome.org/World/hammond</url>
|
||||||
<update_contact>jpetridis@gnome.org</update_contact>
|
<update_contact>jpetridis@gnome.org</update_contact>
|
||||||
|
|||||||
@ -280,7 +280,7 @@ fn about_dialog(window: >k::Window) {
|
|||||||
dialog.set_modal(true);
|
dialog.set_modal(true);
|
||||||
// TODO: make it show it fetches the commit hash from which it was built
|
// TODO: make it show it fetches the commit hash from which it was built
|
||||||
// and the version number is kept in sync automaticly
|
// and the version number is kept in sync automaticly
|
||||||
dialog.set_version("0.3.3");
|
dialog.set_version("0.3.4");
|
||||||
dialog.set_program_name("Hammond");
|
dialog.set_program_name("Hammond");
|
||||||
// TODO: Need a wiki page first.
|
// TODO: Need a wiki page first.
|
||||||
// dialog.set_website("https://wiki.gnome.org/Design/Apps/Potential/Podcasts");
|
// dialog.set_website("https://wiki.gnome.org/Design/Apps/Potential/Podcasts");
|
||||||
|
|||||||
@ -202,3 +202,4 @@ fn on_url_change(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -299,7 +299,8 @@ fn progress_bar_helper(
|
|||||||
episode_rowid: i32,
|
episode_rowid: i32,
|
||||||
) -> Result<glib::Continue, Error> {
|
) -> Result<glib::Continue, Error> {
|
||||||
let (fraction, downloaded) = {
|
let (fraction, downloaded) = {
|
||||||
let m = prog.lock()
|
let m = prog
|
||||||
|
.lock()
|
||||||
.map_err(|_| format_err!("Failed to get a lock on the mutex."))?;
|
.map_err(|_| format_err!("Failed to get a lock on the mutex."))?;
|
||||||
(m.get_fraction(), m.get_downloaded())
|
(m.get_fraction(), m.get_downloaded())
|
||||||
};
|
};
|
||||||
@ -357,7 +358,8 @@ fn total_size_helper(
|
|||||||
) -> Result<glib::Continue, Error> {
|
) -> Result<glib::Continue, Error> {
|
||||||
// Get the total_bytes.
|
// Get the total_bytes.
|
||||||
let total_bytes = {
|
let total_bytes = {
|
||||||
let m = prog.lock()
|
let m = prog
|
||||||
|
.lock()
|
||||||
.map_err(|_| format_err!("Failed to get a lock on the mutex."))?;
|
.map_err(|_| format_err!("Failed to get a lock on the mutex."))?;
|
||||||
m.get_total_size()
|
m.get_total_size()
|
||||||
};
|
};
|
||||||
|
|||||||
@ -138,7 +138,8 @@ impl HomeView {
|
|||||||
/// Save the vertical scrollbar position.
|
/// Save the vertical scrollbar position.
|
||||||
pub fn save_alignment(&self) -> Result<(), Error> {
|
pub fn save_alignment(&self) -> Result<(), Error> {
|
||||||
if let Ok(mut guard) = EPISODES_VIEW_VALIGNMENT.lock() {
|
if let Ok(mut guard) = EPISODES_VIEW_VALIGNMENT.lock() {
|
||||||
let adj = self.scrolled_window
|
let adj = self
|
||||||
|
.scrolled_window
|
||||||
.get_vadjustment()
|
.get_vadjustment()
|
||||||
.ok_or_else(|| format_err!("Could not get the adjustment"))?;
|
.ok_or_else(|| format_err!("Could not get the adjustment"))?;
|
||||||
*guard = Some(SendCell::new(adj));
|
*guard = Some(SendCell::new(adj));
|
||||||
|
|||||||
@ -130,7 +130,8 @@ impl ShowWidget {
|
|||||||
/// Save the scrollabar vajustment to the cache.
|
/// Save the scrollabar vajustment to the cache.
|
||||||
pub fn save_vadjustment(&self, oldid: i32) -> Result<(), Error> {
|
pub fn save_vadjustment(&self, oldid: i32) -> Result<(), Error> {
|
||||||
if let Ok(mut guard) = SHOW_WIDGET_VALIGNMENT.lock() {
|
if let Ok(mut guard) = SHOW_WIDGET_VALIGNMENT.lock() {
|
||||||
let adj = self.scrolled_window
|
let adj = self
|
||||||
|
.scrolled_window
|
||||||
.get_vadjustment()
|
.get_vadjustment()
|
||||||
.ok_or_else(|| format_err!("Could not get the adjustment"))?;
|
.ok_or_else(|| format_err!("Could not get the adjustment"))?;
|
||||||
*guard = Some((oldid, SendCell::new(adj)));
|
*guard = Some((oldid, SendCell::new(adj)));
|
||||||
|
|||||||
@ -78,7 +78,8 @@ impl ShowsView {
|
|||||||
/// Save the vertical scrollbar position.
|
/// Save the vertical scrollbar position.
|
||||||
pub fn save_alignment(&self) -> Result<(), Error> {
|
pub fn save_alignment(&self) -> Result<(), Error> {
|
||||||
if let Ok(mut guard) = SHOWS_VIEW_VALIGNMENT.lock() {
|
if let Ok(mut guard) = SHOWS_VIEW_VALIGNMENT.lock() {
|
||||||
let adj = self.scrolled_window
|
let adj = self
|
||||||
|
.scrolled_window
|
||||||
.get_vadjustment()
|
.get_vadjustment()
|
||||||
.ok_or_else(|| format_err!("Could not get the adjustment"))?;
|
.ok_or_else(|| format_err!("Could not get the adjustment"))?;
|
||||||
*guard = Some(SendCell::new(adj));
|
*guard = Some(SendCell::new(adj));
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
project(
|
project(
|
||||||
'hammond', 'rust',
|
'hammond', 'rust',
|
||||||
version: '0.3.3',
|
version: '0.3.4',
|
||||||
license: 'GPLv3',
|
license: 'GPLv3',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
unstable_features = true
|
unstable_features = true
|
||||||
verbose = false
|
|
||||||
max_width = 100
|
max_width = 100
|
||||||
comment_width = 100
|
comment_width = 100
|
||||||
wrap_comments = true
|
wrap_comments = true
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user