Coder Social home page Coder Social logo

buzz's Introduction

Introduction

Using mutt (or pine), but annoyed that it doesn't give you any notifications when you've received new emails? buzz is a simple tray application that detects new emails on IMAP servers using IDLE (push rather than pull). When it detects unseen messages, it shows a OSD style notification and changes the tray icon to indicate that you have new mail.

This project is a Rust fork of hasmail, which provides basically the same features, and is written in Go.

What does it look like:

no new e-mail new e-mail

new e-mail notification

Configuration

buzz looks for a TOML configuration file in ~/.config/buzz.toml on startup. The configuration file consists of a number of account tables, each corresponding to one account:

[[account]]
name = "gmail"
server = "imap.gmail.com"
port = 993
username = "[email protected]"
pwcmd = "gnome-keyring-query get gmail_pw" # or use the `password` field to set it in plain text
notificationcmd = "ssh -t somehost wall 'New gmail message!'" #Optional
folders = [ "INBOX" ] # Optional

Additionally, icons can be configured in an icon section:

[icons]
connected = "/usr/share/icons/Faenza/stock/24/stock_connect.png"
disconnected = "/usr/share/icons/Faenza/stock/24/stock_disconnect.png"
unread = "/usr/share/icons/oxygen/base/32x32/status/mail-unread.png"
new_mail = "/usr/share/icons/oxygen/base/32x32/status/mail-unread-new.png"

Account fields

The value in [] can be anything (though avoid . as it will be parsed as a new TOML section), and is shown in the tooltip when new e-mails arrive for an account. The options for an account are as follows:

  • server: The address to connect to. MUST currently be SSL/TLS enabled.
  • port: The port to connect to.
  • username: Username for authentication.
  • pwcmd: Command to execute to get password for authentication.
  • notificationcmd: Additional command to be executed on new messages for this account.
  • folder: Name of the folder to watch (optional; defaults to "INBOX").

TODOs

  • click command
  • hover tooltip
  • customizeable folder

buzz's People

Contributors

0x61nas avatar chapeupreto avatar danielvoogsgerd avatar dependabot[bot] avatar ftilde avatar hamidrezakp avatar jmchacon avatar jonhoo avatar joshka avatar lihram avatar mathiaspius avatar robinkrahl avatar rtkay123 avatar simenb avatar tudyx avatar wasabi375 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

buzz's Issues

Fail to build on Ubuntu 17.10

I ran cargo install buzz but it failed to build on Ubuntu 17.10.

   Compiling aster v0.38.0
   Compiling syntex v0.54.0
   Compiling quasi v0.29.0
   Compiling libloading v0.3.4
   Compiling quasi_codegen v0.29.0
   Compiling bindgen v0.22.1
   Compiling libappindicator-sys v0.3.0
error: failed to run custom build command for `libappindicator-sys v0.3.0`
process didn't exit successfully: `/tmp/cargo-installZDpxQj/release/build/libappindicator-sys-237c515d683c452d/build-script-build` (exit code: 101)
--- stdout
cargo:rustc-link-lib=appindicator3

--- stderr
thread 'main' panicked at 'libappindicator3 library not found!', /home/jethros/.cargo/registry/src/github.com-1ecc6299db9ec823/libappindicator-sys-0.3.0/build.rs:37:27
note: Run with `RUST_BACKTRACE=1` for a backtrace.

warning: build failed, waiting for other jobs to finish...
error: failed to compile `buzz v1.1.0`, intermediate artifacts can be found at `/tmp/cargo-installZDpxQj`

Caused by:
  build failed
[12:15] jethros@x1c ~ $ cargo install libappindicator-sys
    Updating registry `https://github.com/rust-lang/crates.io-index`
  Installing libappindicator-sys v0.3.0
error: specified package has no binaries

Please list dependencies for buzz

Hi,
Is it possible to try to list all the needed dependencies for compiling buzz somewhere? It might be tricky to install otherwise (and takes forever as you have to compile, install missing dependencies, compile again and repeat for each missing package).

Here is the non-complete list of development headers I had to install on my Fedora 25 machine:

  • openssl-devel
  • dbus-devel
  • glib2-devel
  • cairo-devel
  • atk-devel
  • pango-devel
  • gdk-pixbuf2-devel
  • gtk3-devel
  • libappindicator-devel
  • libappindicator-gtk3-devel
  • clang-devel

I'm pretty sure this list is non-exhaustive as I've installed other development headers before for other crates.

Windows support

Biggest blockers:

  • Find right path for config files (xdg equivalent)
  • Figure out how to do notifications (e.g., notify-send)

Cargo install failed on Ubuntu 17.10

cargo install buzz failed on Ubuntu 17.10. It looks like some dependency issues. Any idea to help?

[23:31] jethros@x1c ~ $ cargo install buzz
    Updating registry `https://github.com/rust-lang/crates.io-index`
  Installing buzz v1.0.6
 Downloading base64 v0.9.1
 Downloading serde v1.0.43
 Downloading pkg-config v0.3.11
 Downloading atty v0.2.9
error: failed to compile `buzz v1.0.6`, intermediate artifacts can be found at `/tmp/cargo-install.DZbyvjWJqzdW`

Caused by:
  multiple packages link to native library `gtk`, but a native library can be linked only once

package `gtk-sys v0.3.4`
    ... which is depended on by `libappindicator v0.2.0`
    ... which is depended on by `systray v0.2.0`
    ... which is depended on by `buzz v1.0.6`
links to native library `gtk`

package `gtk-sys v0.4.0`
    ... which is depended on by `libappindicator-sys v0.1.2`

Unwraps when parsing config values

There are some unwraps in the code which could be replaced with match statements to make the general experience of building a config less confusing.

For example, given the following configuration:

[gmail]
server = "imap.gmail.com"
port = "993"
username = "[email protected]"
pwcmd = "secret-tool lookup name example"

We try to convert the value "993" to an integer, which panics.

Buzz does not build using rustc 1.41

Snippet from the build:

   Compiling syntex_syntax v0.54.0
error[E0423]: expected function, tuple struct or tuple variant, found struct `ast::Name`
   --> /home/dominik/.cargo/registry/src/github.com-1ecc6299db9ec823/syntex_syntax-0.54.0/src/symbol.rs:146:27
    |
146 |                       name: ast::Name($index),
    |                             ^^^^^^^^^
...
165 | / declare_keywords! {
166 | |     // Invalid identifier
167 | |     (0,  Invalid,        "")
168 | |
...   |
231 | |     (56, CrateRoot, "{{root}}")
232 | | }
    | |_- in this macro invocation

The issue is also described here and happens due to the dependency-chain systray -> libappindicator -> libappindicator-sys -> (an ancient version of) bindgen -> aster -> syntex_syntax.

The issue is fixed in libappindactor and the master branch of systray. However, the latter does not build at the moment due to other issues. The fix for this project is probably to wait until a new, fixed version of systray is published. In the meantime, if anyone wants to build buzz using rustc 1.41, they can temporarliy use the PR-branch that I submitted to systray to fix the upgrade-issues (at least for Linux/*BSD/...) using a patch section in the Cargo.toml of buzz:

[patch.crates-io]
systray = { git = "https://github.com/ftilde/systray-rs" }

Make tray icon optional

I know that buzz is advertised as a tray application but Iโ€™d like to use it only with notifications and without the system tray icon. Would you accept a PR that makes the tray icon and the systray dependency optional (though enabled by default)?

Specify inboxes

Right now the application searches the entire email account for unread emails. It would be awesome if we could limit that to a list of inboxes, or the other way around, exclude some inboxes. For example, I personally do not need to be notified for things like newsletters.

Outright not working :[

Starts and runs but even though I do get new email, it doesn't notify me about it.

How should I go about troubleshooting this?

No errors whatsoever.

System tray icons

I recently added Buzz to my system and so far I've really liked it.

I noticed that the icons in the system tray were not showing up. It looks like it's because the icons are hardcoded and are not installed on my system. Now I'm thinking of the best way of making these icons configurable, and so far the best solution I've come up with it making a special category in config.toml that is not an account but instead defines the location of the icons.

What do you think?

macOS support

Biggest blockers:

  • Find right path for config files (xdg equivalent)
  • Figure out how to do notifications (e.g., notify-send)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.