| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Since the list_window code sets highlight to 0 before it calls the
list_callback, the callback itself doesn't have to reset the flag.
|
|
|
|
|
| |
current.lines is always initialized, and cannot be NULL, no need to
check it.
|
| |
|
|
|
|
|
| |
Why bother counting the elements of help_text[] (with sentinel) at
runtime, when the compiler can do it at compile time?
|
|
|
|
|
| |
lyrics_text_rows wasn't set anyway, I somehow removed the code in a
patch some time ago.
|
|
|
|
|
| |
Merge code which used to be duplicated in the screens "play", "help",
"lyrics".
|
|
|
|
|
|
| |
It is similar to list_window_cmd(), but it scrolls the window instead
of moving the selection. It is used by the "lyrics" and the "help"
screen.
|
| |
|
|
|
|
|
| |
When the selected screen does not exist, return before calling
close().
|
|
|
|
|
| |
Since the number of screens is known at compile time, define a macro
which calculates this, instead of having a sentinel element.
|
|
|
|
|
| |
Screens which are not active have already been closed, or have never
been opened. Don't call close again on them.
|
|
|
|
|
|
| |
There can only be onle screen struct instance at a time. Declare it
as a static struct, instead of a pointer to the struct. This
simplifies all accesses, and avoids the dynamic allocation.
|
| |
|
|
|
|
|
| |
At startup, mode_fn is initialized with &screen_playlist, and it will
never be reset to NULL. Remove all checks.
|
|
|
|
|
| |
That seems to be a fn->paint was checked, then the code called
fn->update(). Fix this.
|
|
|
|
|
|
| |
If it is really important to set the curser, we should think of a
better way, instead of exporting one non-generic method. For now,
just set the cursor to the origin.
|
|
|
|
|
|
| |
Compile time initialization saves resources, compared to run-time
initialization. Declare all screen_function structs as global
variables, and remove all get functions.
|
|
|
|
| |
Follow the same code style als MPD itself.
|
|
|
|
|
|
| |
Instead of freeing the playlist with mpdclient_playlist_free(), call
playlist_clear() to empty the song list. This fixes a segmentation
fault which occured when you cleared the playlist.
|
|
|
|
|
| |
Due to a missing refresh() call, ncmpc painted the screen after one
second. Add refresh(), make ncmpc display immediately.
|
|
|
|
|
| |
Let us declare struct names in addition to typedef names, so we can
forward-declare them.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In-process plugins are very problematic. It is much easier and
flexible to move the lyrics plugins to external programs, with a
trivial protocol. This is work in progress, among the things missing:
- protocol specification, including exit codes
- plugin installation
- plugin search directory
- run-time configuration (currently hard coded)
- automatic polling (using glib's main loop?)
- better and more robust error handling
|
| |
|
|
|
|
|
|
| |
Added functions like playlist_length(), playlist_get(),
playlist_replace(), playlist_remove(). Don't access the
mpdclient_playlist struct directly.
|
|
|
|
|
|
| |
Moved code from mpdclient_new() and mpdclient_playlist_free(). In
mpdclient_disconnect(), call mpdclient_playlist_clear() instead of
mpdclient_playlist_free() (which is now called in mpdclient_free()).
|
|
|
|
|
|
|
|
|
|
| |
Move everything which manipulates the mpdclient_playlist struct to
playlist.c. Many of the functions get a mpdclient pointer instead of
a playlist; this will be changed later.
The functions mpdclient_playlist_update() and
mpdclient_playlist_update_changes() stay in mpdclient.c for now, since
they are tightly connected to the client code.
|
|
|
|
|
|
| |
Since we compile ncmpc with glib, we can use its slice allocator for
efficient song allocation. I have added a way to disable this with a
macro.
|
|
|
|
|
| |
Use a forward declared struct mpd_song instead of the typedef
mpd_Song.
|
|
|
|
|
| |
Move everything which manipulates the mpd_Song struct to song.c.
Thousands of lines of too much for libmpdclient.c!
|
|
|
|
|
|
|
| |
To relax the include dependencies, give all structs real names, in
addition to the typedef names. This way, other headers can
forward-declare them, and do not need to include mpdclient.h. In the
future, the typedefs will be removed.
|
|
|
|
| |
Pass const pointers whenever possible.
|
|
|
|
| |
Follow the same code style als MPD itself.
|
|
|
|
|
| |
Apparently, somebody was too lazy to derive the formulas for cursor
movement, and wrote lots of while loops.
|
|
|
|
| |
Include only headers which are really used.
|
|
|
|
|
|
| |
No idea what this code was intended for, but if the user chooses
libncurses, ncmpc shouldn't override this manual choice if it finds
libncursesw.
|
| |
|
|
|
|
|
| |
We are on git now, and since we are doing major changes, increase the
version number.
|
|
|
|
| |
Fix the type of write_data() to fit curl_write_callback.
|
|
|
|
|
|
| |
Using a doubly linked list for the local playlist copy is a huge waste
of both memory and CPU cycles. Use GArray instead of GList, which is
much faster in this case.
|
|
|
|
|
|
| |
Memory leak: the function mpdclient_playlist_update_changes() did not
free the entity which was returned by mpd_getNextInfoEntity(). Add a
mpd_freeInfoEntity() call at the end of each iteration.
|
|
|
|
|
|
| |
There are many duplicated strings in the tag database, e.g. many songs
having the same artist. Don't allocate such strings twice, manage all
strings in a pool.
|
|
|
|
|
|
| |
If a host name starts with a slash, it is assumed to be a unix domain
socket path. The port is ignored. This code is disabled on WIN32,
until someone tests it.
|
|
|
|
| |
If get_text_line() fails, we should break from the loop.
|
|
|
|
|
|
| |
The variables "lyrics_text_rows" and "lw" were declared in
src_lyrics.h as static, but they were only actually used in
screen_lyrics.c. Move both there.
|
|
|
|
|
| |
Add the "unused" attribute to all function parameters which are indeed
going to be ignored.
|
|
|
|
| |
gcc.h contains a useful set of macros for setting attributes.
|
|
|
|
|
|
|
|
|
| |
In main.c, the global variable "options" is used all over, except in
main(), which contains a shadowing declaration of it. Remove this
local variable, and use the global "options" instead. Also don't
pollute conf.c's namespace with the global variable with a CPP hack
(to be removed when we have fixed more of ncmpc's namespace
pollution).
|
| |
|