Commit Graph

400 Commits

Author SHA1 Message Date
Denis Laxalde 690a91ce04 Fall back to "username" when "display_name" is unset
We add a "username" field to Author entity, this is then used when
displaying the "reblogged by" information when respective account has no
display name.
2020-01-22 08:13:48 +01:00
Ivan Habunek 1b2a9c4198
Bump version, changelog 2020-01-21 09:38:17 +01:00
Ivan Habunek 6d18fd55a1
Quote hahtags before including them in an URL
Fixes searching by hashtag which include the #.

issue #134
2020-01-21 09:04:03 +01:00
Ivan Habunek 60efc13338
Implement character count indicator when composing
Attempts to load max char count from the server on init.

issue #121
2020-01-03 09:15:11 +01:00
Ivan Habunek 0fed933123
Fix typo 2020-01-02 10:34:00 +01:00
Ivan Habunek b6749fb0f1
Require auth for toot tui 2020-01-02 10:21:58 +01:00
Ivan Habunek d595cc5140
Don't use fstrings to keep support with python<3.7
fixes #131
2019-09-23 16:51:04 +02:00
Ivan Habunek cf78cd20ac
Upgrade to v2 search endpoint 2019-09-22 22:08:04 +02:00
Ivan Habunek 35e03a13b1 Simplify access to reblogged status data
Adds two properties to `Status` entity:
* `reblog` - contains the reblogged Status or None if not a reblog
* `original`- contains the reblogged Status or self if not a reblog

Anywhere where you wish to show a reblogged status's property when it's
a reblog, or the base status proprety if not a reblog, use
`status.original.<property>`.
2019-09-22 18:56:03 +02:00
Ivan Habunek bc6e43376a
Bump version, add changelog 2019-09-18 21:57:55 +02:00
Denis Laxalde 9623219959 Include mentions and replied-to account in compose text
We add a "mentions" attribute to Status. Then when composing a reply, we
fill the edit text of the compose box with the account name of status
being replied to and possibly include mentions at the bottom of the edit
text. Initial cursor position is set after replied account name.
2019-09-18 21:42:55 +02:00
Kai Zhang a76f4ae815 Set urwid global encoding to UTF-8
so that many characters can be displayed
2019-09-18 21:41:02 +02:00
Denis Laxalde 9fb52fb0a1 Try to use media's text_url if present
This field is sometimes provides and gives a shortened URL which is
easier to click on in a terminal.
2019-09-13 12:54:08 +02:00
Denis Laxalde a8774fc9ea Indicate if status is a reblog in timeline
This is different from the "reblogged" yellow icon already displayed on
the left of account name which indicates if own status got reblogged.
This one indicates if displayed status is a reblog.
2019-09-12 10:48:04 +02:00
Denis Laxalde e06478a798 Use original account information for reblogged statuses
Otherwise, we get the account name of reblogger in the timeline.
2019-09-12 10:48:04 +02:00
Ivan Habunek 5343319333
Improve config dir location
On Windows store config in roaming appdata.
2019-09-08 15:06:35 +02:00
Ivan Habunek 130ef9a608 Remove legacy configuration file handling 2019-09-08 14:36:37 +02:00
Your Name 7fc39379c9
Check for existance of key in dictionary
as well as non-null value to avoid uncaught KeyError

re: issue #116
2019-09-07 23:20:50 +02:00
Denis Laxalde 9d0d1b2dd7
Make "view" action work for reblogged statuses
When the status is a reblog, the URL of the original toot should be used
as the one of reblog is null.

We add a "url" attribute to Status class storing computed URL.
2019-09-06 16:01:04 +02:00
Rasmus Lindroth 3a56243878
Escape closes timeline
As Escape does the same as Q when closing the app and overlays, it should do the same with timelines
2019-09-06 15:51:32 +02:00
Ivan Habunek 367ced2eef
Don't use ANSI color codes when not desired
Which is when not supported by terminal or when not in a tty.
2019-09-06 15:03:47 +02:00
Ivan Habunek 1d3ff87ffa
TUI: Implement deleting own status messages 2019-09-04 16:16:16 +02:00
Ivan Habunek 7309e5bb53
Bump version 2019-09-04 08:39:18 +02:00
Ivan Habunek e310482cb6
Fix date parsing bug
issue #114
2019-09-04 08:36:12 +02:00
Ivan Habunek 70faf47c91
Bump version 2019-09-03 16:31:47 +02:00
Denis Laxalde efbaf9e706
Indicate if status is a reply in timeline of TUI 2019-09-03 15:40:50 +02:00
Ivan Habunek cf01cb9014
Cleanup palette slightly 2019-09-03 15:40:49 +02:00
Ivan Habunek 05972fc6fa
Show application used to post status 2019-09-03 15:40:49 +02:00
Ivan Habunek 7e04ad55c6
Add links to help overlay 2019-09-03 15:40:49 +02:00
Ivan Habunek 3a11e470fb
Extract overlays from app.py 2019-09-03 15:40:49 +02:00
Ivan Habunek c1f518765c
Fix missing padding 2019-09-03 15:40:49 +02:00
Ivan Habunek d5a2cc27ed
Add help 2019-09-03 15:40:48 +02:00
Ivan Habunek 41f997199a
Add padding to status details 2019-09-03 15:40:48 +02:00
Ivan Habunek 51afcf7e34
Add goto hash timeline 2019-09-03 15:40:48 +02:00
Ivan Habunek 350138324b
Add basic timeline switching 2019-09-03 15:40:48 +02:00
Ivan Habunek 07e6c372bc
Prepare for context menu 2019-09-03 15:40:48 +02:00
Ivan Habunek 1dce948166
Show content warning in status details 2019-09-03 15:40:47 +02:00
Ivan Habunek 85ceb8b11f
Update docs to replace curses with tui 2019-09-03 15:40:47 +02:00
Ivan Habunek 98b783836a
Mark toot curses as deprecated 2019-09-03 15:40:47 +02:00
Ivan Habunek 7f6f128f38
Show media in image viewer 2019-09-03 15:40:47 +02:00
Ivan Habunek 31462fe6f8
Implement replies 2019-09-03 15:40:46 +02:00
Ivan Habunek 9c74c1d9e6
Housekeeping 2019-09-03 15:40:46 +02:00
Ivan Habunek ab1fc6961b
Show media in status details 2019-09-03 15:40:46 +02:00
Ivan Habunek 5213eb1835
Focus status after posting 2019-09-03 15:40:46 +02:00
Ivan Habunek 4deccee754
Decouple Timeline and TUI, use signals instead 2019-09-03 15:40:46 +02:00
Ivan Habunek 1a8c515922
Implement thread (status context) view 2019-09-03 15:40:46 +02:00
Ivan Habunek 5ec8d9411d
Propagate visibility when posting status 2019-09-03 15:40:45 +02:00
Ivan Habunek 672bb5d008
Add reply, reblog and favourite counters 2019-09-03 15:40:45 +02:00
Ivan Habunek db76b004cf
Simplify linebox rendering in status details 2019-09-03 15:40:45 +02:00
Ivan Habunek f6fcb2a821
Timeline: add divider, move columns, boost icon 2019-09-03 15:40:45 +02:00
Ivan Habunek 9784fb8eb5
Don't crash if no url present 2019-09-03 15:40:45 +02:00
Ivan Habunek 871e2bc960
Render polls 2019-09-03 15:40:45 +02:00
Ivan Habunek 9aadec6cfb
Add option to set status visibility 2019-09-03 15:40:44 +02:00
Ivan Habunek 4f30c177d6
Ditch status index list for now
Simplifies things, makes update_status slightly slower, but no biggie.
2019-09-03 15:40:44 +02:00
Ivan Habunek 366e9382d3
Implement posting statuses 2019-09-03 15:40:44 +02:00
Ivan Habunek b95aca964f
Show an intro screen while loading initial toots 2019-09-03 15:40:44 +02:00
Ivan Habunek fb14c262e0
Show exception stack trace on error 2019-09-03 15:40:44 +02:00
Ivan Habunek 372976b1b2
Overhaul async actions, implement boost and reblog 2019-09-03 15:40:43 +02:00
Ivan Habunek 2349173a45
Tweaks 2019-09-03 15:40:43 +02:00
Ivan Habunek 2be8cb8438
Show status source 2019-09-03 15:40:43 +02:00
Ivan Habunek 2d8199646f
Boosted by improvements 2019-09-03 15:40:43 +02:00
Ivan Habunek dd1b462413
Highlight hashtags 2019-09-03 15:40:43 +02:00
Ivan Habunek 7da2e2dbbc
Handle reblogs 2019-09-03 15:40:43 +02:00
Ivan Habunek f68f5d5716
Load next when at bottom of list 2019-09-03 15:40:42 +02:00
Ivan Habunek c99999161d
Render status details 2019-09-03 15:40:42 +02:00
Ivan Habunek ea1ef6f207
Initial implementation of a TUI using Urwid 2019-09-03 15:40:42 +02:00
Viktor Villainov 616483d78a
Remove double process_response function call
since it's called in anon_post already
2019-09-03 09:04:32 +02:00
Ivan Habunek 6f8cd86417
Fix compatibility with py<3.6 2019-08-29 12:46:00 +02:00
Ivan Habunek 73ba70eb83
Create config file with 0600 permissions
It contains secrets and should not be readable by others.

fixes #109
2019-08-27 13:20:22 +02:00
Ivan Habunek d21cad892c
Implement composing tweets using an editor
fixes #90
2019-08-22 17:37:24 +02:00
Ivan Habunek 840b2fd476
Set the user agent string to all requests
Fixes issue with accessing instances using Cloudfare DDOS protection.

issue #106
2019-08-07 22:58:30 +02:00
Ivan Habunek e108f370e1
Bump version 2019-08-01 13:25:45 +02:00
Ivan Habunek a771ca3aa7
Enable attaching multiple media files
fixes #67
2019-08-01 12:56:21 +02:00
Ivan Habunek a7e4f9d888
Add --language option to post command
Used to override language detection.
2019-07-30 16:13:29 +02:00
Ivan Habunek d13fa8685b
Merge pull request #101 from Skehmatics/fix-resize
Fix various resize issues
2019-04-25 14:58:08 +02:00
Derek Schmidt cb3885b20b
Fix #100
Using self.panel.hide() without calling
curses.panel.update_panels() before next refresh can really mess
stuff up. As far as I can tell, this was the real cause of #100.

This changes that call to the Modal's hide method instead, which
will keep this sort of issue from coming up again (hopefully)
2019-04-25 14:46:01 +02:00
Derek Schmidt 5c8f3b5978
Fix crash on window open
Missed a call when changing refresh to refresh_text
2019-04-24 21:32:28 -07:00
Derek Schmidt b9e9eea295
Redaw footer and header after panels
Fix left panel overlaping the footer on full_redraws
2019-04-24 16:57:55 -07:00
Derek Schmidt 24421fcb53
Fix resize when modals are visible
Use a callback function to allow items farther up in the stack
to have their own resize logic. This also requires a slight
change to the main TimelineApp to stay DRY
2019-04-24 16:57:52 -07:00
Ivan Habunek aff0c2281f
Improve keystroke handling 2019-04-24 14:05:28 +02:00
Ivan Habunek c862df8e40
Run curses with 20 statuses per page by default 2019-04-23 14:12:29 +02:00
Ivan Habunek 912e7c8bc4
Nicer header for curses 2019-04-23 13:53:06 +02:00
Ivan Habunek b9743ba268
Simplify windows setup 2019-04-23 13:31:17 +02:00
Ivan Habunek 92810459c7
Change content warning shortcut to ^W
^S will freeze most terminals
2019-04-16 14:37:34 +02:00
Derek Schmidt 747c5a611f
Add posted status / reply to the top of the timeline on submit 2019-04-16 14:21:08 +02:00
Derek Schmidt 2a6206903f
Mention EOT rather than RS
In my testing, not all terminal emulators have the same ctrl+enter
key accelerator for the ascii record seperator, so mention EOT
instead but still leave it in for those that might like it better.
2019-04-16 14:21:08 +02:00
Derek Schmidt 5d652754ec
Slightly redesign the modal to be more like a window
+ Only do a full draw on init, and just refresh on updates / show
+ Better differenciate "No content" vs "quit"
+ Reset the cursor position when content is cleared
2019-04-16 14:21:08 +02:00
Derek Schmidt 073d340908
Change control scheme to make more sense
Ctrl+Enter (or the standard ^D / EOT) to confirm, Escape to quit.

Since we're asking for a raw escape, we also need to tweak the
curses escape detection timeout a little, otherwise the user would
have to wait a whole second for the keystroke to register
2019-04-16 14:21:08 +02:00
Derek Schmidt 45bf2acba1
Default to CW of parent status when replying 2019-04-16 14:21:07 +02:00
Derek Schmidt 7f5c201925
Minor compose window cleanup / misc fixes
+ Remove excess padding on width
+ Rename TextModal to EntryModal
+ Remove duplicate delete key handler
+ Redraw when CW modal closes
+ Return empty string rather than None
2019-04-16 14:21:07 +02:00
Derek Schmidt a367f78cbb
Handle screen position when newline only lines exist 2019-04-16 14:21:07 +02:00
Derek Schmidt 2b3b14c8b7
Impliment a custom textbox-like modal
The actual curses provided textbox has issuses with adding
newlines to the toot body when the text wraps to fit,
so I've implimented a basic textbox using draw_lines and an
internal text body (rather than relying on the curses window
contents.
2019-04-16 14:21:07 +02:00
Derek Schmidt 26f49e460e
Make help text less wordy 2019-04-16 14:21:07 +02:00
Derek Schmidt a641543922
Add basic reply functionality 2019-04-16 14:21:07 +02:00
Derek Schmidt c7526941d2
Add cw / spolier_text setting within compose window
And also make things probably more complicated than neccesary
oops
2019-04-16 14:21:07 +02:00
Derek Schmidt 6bb2f98ad2
Add basic text compose + posting 2019-04-16 14:21:06 +02:00
Ivan Habunek 474d9c432f
Move notification printing to output module
Removed sorting, since notifications are already sorted.
2019-04-16 14:12:42 +02:00
Denis Laxalde 204d4d4138 Handle absence of notification in 'notifications' command 2019-02-17 15:02:05 +01:00
Denis Laxalde 6360e4d07d Add a --clear option to "notifications" command 2019-02-17 14:18:51 +01:00
Denis Laxalde 5174a751f2 Implement "notifications" command
The list of notifications is diplayed with each item enclosed within an
horizontal line as for timeline. When a status is involved (when
notification type is "reblog" or "favourite"), we also display the full
status.

Closes #81.
2019-02-17 14:09:56 +01:00
Ivan Habunek f7167e0880
Bump version 2019-02-15 14:14:22 +01:00
Ivan Habunek d224375da4
Consolidate timeline selection arguments
toot timeline and toot curses now use the same logic.
2019-02-15 14:13:12 +01:00
Ivan Habunek abb1b436ca
Fix typo 2019-02-15 14:13:11 +01:00
Ivan Habunek 10595be865
Show full account name in timeline 2019-02-15 14:13:11 +01:00
Denis Laxalde 5a867f2380
Show number of replies/reblogs/favourites in status footer of curses ui
When parsing "replies_count" from status data, we allow the field to be
absent as it got added in version 2.5.0 (in constrast with other ones,
added in 0.1.0) as there might be servers with that version around.
2019-02-15 12:55:55 +01:00
Denis Laxalde 4bc963a236
Indicate if status is a reply in left pane of curses ui 2019-02-15 12:47:42 +01:00
Denis Laxalde 3d0c7be1e0 Indicate if status has been favorited in left pane of curses ui
Showing a yellow star in the right corner of second line.
2019-02-14 20:39:58 +01:00
Denis Laxalde 41d96249ba Add favourite/unfavourite actions to curses ui 2019-02-14 20:21:48 +01:00
Ivan Habunek d7cc97d2c7
Tweaks to status boosting in curses app 2019-02-14 18:04:05 +01:00
Denis Laxalde c6bc4a695f
Add reblog/unreblog actions to curses ui
This is implemented using "b" key to toggle reblog/unreblog based on the
value of "reblogged" field in status data.
2019-02-14 17:58:55 +01:00
Denis Laxalde 066589bf53
Display a ↷ in status detail window if status got reblogged 2019-02-14 17:58:55 +01:00
Denis Laxalde f1c8465e63
Add a "reblogged_by" command 2019-02-14 17:58:47 +01:00
Denis Laxalde 5514c47bca
Store status id in parse_status() 2019-02-14 17:58:22 +01:00
Denis Laxalde 834bdb67ac
Pass "app" and "user" to TimelineApp
We're going to need this context to issue API calls from the curses UI.
2019-02-14 17:58:22 +01:00
Ivan Habunek e6d585ae5d
Nicer timeline output 2019-02-14 17:31:48 +01:00
Ivan Habunek 996228d224
Employ wcstring utils to improve rendering 2019-02-14 15:47:40 +01:00
Ivan Habunek 8a3ff94e47
Consolidate wcwidth-related utils in one module 2019-02-14 15:45:27 +01:00
Ivan Habunek 769ff9e406
Add wcstring utils 2019-02-14 15:23:46 +01:00
Ivan Habunek 8805a50194
Cleanup utils dealing with wcwidth strings 2019-02-14 14:21:53 +01:00
Denis Laxalde 0bf4b2a21a
Fix left column padding in timeline with wide characters
When the left column contains wide characters (which occupy more than
one cell when printed to screen), padding to 30-characters with
"{:30}".format() does not work well. This happens for instance when the
display name contains unicode characters such as emojis.

We fix this by introducing a pad() function in utils module which uses
the wcwidth library (https://pypi.org/project/wcwidth/) to compute the
length of the text for the column. trunc() function is also adjusted to
optionally compute the length of the text to be truncated since, when
called from pad(), we now pre-compute this value.

We update test for timeline rendering so that the display name now
includes an emoji. (Without the fix, the test would not pass as left
column would be misaligned.)
2019-02-14 14:21:53 +01:00
Ivan Habunek a3ebd96e05
Mark function as private 2019-02-13 14:19:27 +01:00
Ivan Habunek 19cbcd43b2
Make `toot timeline` continuable by pressing Enter 2019-02-13 14:19:00 +01:00
Ivan Habunek 0dfb04e9e3
Ignore bs4 warnings
These are triggered by false positives and get printed to screen when
running `toot curses`.
2019-02-13 13:38:37 +01:00
Ivan Habunek 32b1c67d49
Make boolen params a bit less verbose 2019-01-24 11:23:12 +01:00
Ivan Habunek c7c42b8337
Merge pull request #85 from ksunden/localtag
Add local and tag timelines to curses
2019-01-24 11:20:58 +01:00
Balazs Nadasdi e42c4c3b80
use http.get instead of hacking _status_action in api.py
(and fix a typo)
2019-01-21 17:25:20 +01:00
Balazs Nadasdi ee417df60e Status ID + thread view
- Status ID on timeline list view
 - thread command to view a complete thread
   Display order:
    - ancestors
    - status
    - descendants
2019-01-19 19:28:17 +01:00
ksunden 4df0c7882d ENH: Add local and tag timeline support to curses
Closes #61
2019-01-02 22:36:40 -06:00
Ivan Habunek 3ac8e59dec
Bump version 2019-01-02 12:51:49 +01:00
Ivan Habunek 82ed630864
Add status related commands
(un)favourite, (un)reblog & (un)pin.

fixes #75
2019-01-02 12:33:25 +01:00
Ivan Habunek fc57d2695a
Merge pull request #83 from dlax/apos
Replace &apos; by "'" before parsing HTML
2019-01-02 11:39:21 +01:00
Ivan Habunek 14a580bc19
Make toot post prompt for input if no text is given
fixes #82
2019-01-02 10:50:56 +01:00
Denis Laxalde 0f6bd920c3 Replace &apos; by "'" before parsing HTML
Beautiful will does not parse HTML entities like `&apos;` as we expect
and the previous logic of replacing this *after* HTML parsing occurred
did not produced expected results.

To illustrate this, we change data in "test_timeline" to include a
literal `&apos;` as it sometimes occur in data returned by Mastodon API.
New HTML content is:

    <p>The computer can&apos;t tell you the emotional story [...] </p>

Beautiful will parse this as as:

    <p>The computer can&amp;apost tell you the emotional story [...] </p>

which is not what we expect.

We fix this by replacing `&apos;` *before* HTML parsing by Beautiful.
Since test data in "test_timeline" got updated we also add an extra
assertion checking that part of the content with a literal "'" is
(still) properly rendered.
2019-01-01 23:14:54 +01:00
Nick Loadholtes 91fc273af7 Update for the curses ui help menu (#78)
Added `s` option to the help menu.
2018-12-30 22:34:15 +01:00
Ivan Habunek 226713a5a0
Apply requests environment settings
Allows use of enironment variables for setting proxies and trusted CAs.

See:
http://docs.python-requests.org/en/master/user/advanced/#prepared-requests
2018-12-30 10:38:40 +01:00
Ivan Habunek b06e9ea733
Enable fetching instance info over http
issue #56
2018-12-30 09:53:12 +01:00
Ivan Habunek f7f867f1b3
Merge pull request #80 from SteelPangolin/master
Feature proposal: --disable-https flag
2018-12-30 09:39:38 +01:00
Ivan Habunek 9c4964116e
Move common auth commands to a variable 2018-12-30 09:00:19 +01:00
Erica Ehrhardt fde84295e0 Add --disable-https flag 2018-12-24 17:20:30 -08:00
Kasra_mp 6fc48697c5
#69 Fix typo 2018-08-11 10:58:13 +02:00
Waweic d910cf9420 Added an option to reverse the timeline
Added the (in my opinion) mission option to reverse the timeline by Adding a command and reversing the entries before they get printed out.
2018-07-25 20:40:59 +02:00
Ivan Habunek 5871916f8e
Bump version 2018-06-27 16:33:00 +02:00
Ivan Habunek 05086e0c1f
Fix all media marked as sensitive
Needed to use "true" and "false" strings instead of bools.
2018-06-27 15:30:56 +02:00
Ivan Habunek 0c9b63b036
Don't print stack trace on keyboard interrupt 2018-06-15 10:01:18 +02:00
Ivan Habunek aabfd0fa31
Make browser login the default 2018-06-15 09:39:28 +02:00
Ivan Habunek 92435d630c
Add a global --silent flag to silence output
issue #46
2018-06-15 09:02:19 +02:00
Ivan Habunek 72f88831ad
Add delete command
issue #54
2018-06-14 10:40:16 +02:00
Ivan Habunek 025d8dde09
Use Idempotency-Key header when posting toots 2018-06-13 13:22:52 +02:00
Ivan Habunek 8f93b255ad
Add option to reply to a toot
fixes #6
2018-06-13 13:21:22 +02:00
Ivan Habunek 41e6ce6257
Bump version, add changelog 2018-06-12 12:22:37 +02:00
Ivan Habunek 7445c16947
Show version number in help text 2018-06-12 12:22:16 +02:00
Ivan Habunek f7619d5b22
Move parsing functions to separate file 2018-06-12 12:03:49 +02:00
Ivan Habunek 10f68fdab7
Replace --list-id with --list
verbosity ftw
2018-06-12 11:53:10 +02:00
Ivan Habunek b3d81c43cc
Tweak timeline output 2018-06-12 11:43:47 +02:00
Ivan Habunek 3f79b76aab
Fix alignment in timeline 2018-06-12 10:52:47 +02:00
Ivan Habunek e1cfda1acb
Add support for tag and list timelines 2018-06-12 10:40:36 +02:00
kakakaya 406943237a
Support -l/--local argument in timeline command 2018-06-12 09:54:57 +02:00
kakakaya 08c5226ae2
Add api.timeline_public method 2018-06-12 09:50:50 +02:00
kakakaya 09a138ba27
Use SCOPES const 2018-06-12 09:50:50 +02:00
Ivan Habunek ceb324e9b0
Move timeline printing code to output.py 2018-06-07 10:27:11 +02:00
Ivan Habunek fa4e4e6357
Add spoiler text and sensitive options to post
issue #63
2018-06-07 10:06:43 +02:00
Ivan Habunek c6b1d91370
Improve rendering of list view
Fixes appearence when unicode wraps due to wide characters.

Not a real fix, but looks nicer.
2018-01-22 10:18:48 +01:00
Ivan Habunek 760a80442c
Add help modal window 2018-01-22 10:07:18 +01:00
Ivan Habunek 2ecc6a28c6
Normalize unicode 2018-01-21 16:39:40 +01:00
Ivan Habunek cb1f7b4e61
Highlight hashtags 2018-01-21 16:39:16 +01:00
Ivan Habunek 3d44eeebba
More colors 2018-01-21 14:30:05 +01:00
Ivan Habunek 4314751610
Localize text wrapping 2018-01-20 13:43:21 +01:00
Ivan Habunek fba3b78ff6
Respect sensitive content, require keypress to show
fixes #42
2018-01-20 12:44:22 +01:00
Ivan Habunek 18e28531fd
Bump version 2018-01-15 23:18:13 +01:00
Ivan Habunek 05a06acf8e
Create config folder if it does not exist
fixes #40
2018-01-15 23:14:20 +01:00
Ivan Habunek 27df352519
Bump version 2018-01-15 13:36:40 +01:00
Ivan Habunek db4e1d59f3
Add __version__ to init file 2018-01-15 12:19:37 +01:00
Ivan Habunek d8fd8d0d56
Wrap URLs if needed 2018-01-14 15:46:31 +01:00
Ivan Habunek e829ce2714
Don't draw out of bounds 2018-01-14 15:46:31 +01:00
Ivan Habunek 5463e86d5d
Don't draw empty line when account has no name 2018-01-14 15:46:31 +01:00
Ivan Habunek 53cd9442f8
Fix list window refresh 2018-01-14 15:46:30 +01:00
Ivan Habunek e204722425
Extract status list window 2018-01-14 15:46:30 +01:00
Ivan Habunek 554618db4b
Extract header and footer windows 2018-01-14 15:46:30 +01:00
Ivan Habunek dc3b17c69b
Extract StatusDetailWindow 2018-01-14 15:46:30 +01:00
Ivan Habunek 022e437784
Fix status url parsing
Use reblog url if status url not present.
2018-01-14 15:46:30 +01:00
Ivan Habunek e421d24c80
Move curses app into toot.ui module 2018-01-14 15:46:29 +01:00
Ivan Habunek 6149c9beda
Show public or home timeline in curses 2018-01-14 15:46:29 +01:00
Ivan Habunek 521c329db9
Hacky way to support up/down arrows
They actually return 3 chars instead of 1, not sure why, but the third
one resolves to "A" for up and "B" for down, so good enough for now.

fixes #30
2018-01-14 15:46:29 +01:00
Ivan Habunek a2d59cdab4
Scroll status list when bottom is reached 2018-01-14 15:46:29 +01:00
Ivan Habunek 923ac57811
Fetch next statuses when going below last 2018-01-14 15:46:29 +01:00
Ivan Habunek d789d21171
Curses: nicer Colors lookup 2018-01-14 15:46:28 +01:00
Ivan Habunek 19888ea2f3
Curses: nicer status bar 2018-01-14 15:46:28 +01:00
Ivan Habunek 0ef5a9e41e
Dynamically size the status list window
This makes toot more usable on narrow screens. Still requires 60
columns minimum.

fixes #26
2018-01-14 15:46:28 +01:00
Ivan Habunek b92049ff1d
Redraw curses app on window resize
fixes #25
2018-01-14 15:46:28 +01:00
Ivan Habunek 508b4ff7ea
Enable logging to a file 2018-01-14 15:34:41 +01:00
Ivan Habunek 455e531194
Respect XDG_CONFIG_HOME env variable
to locate configuration home directory.

fixes #12
2018-01-14 15:29:34 +01:00
Ivan Habunek 536328f56b
More robust parsing of legacy config 2018-01-14 13:04:04 +01:00
Ivan Habunek 6a3c877270
Reimplement configuration to allow multiple logins
The configuration is now stored in a single json encoded file instead of
separate files.
2018-01-02 12:24:32 +01:00
Ivan Habunek 06a68d4142
Fix app registration
Was using http instead of https.
2017-12-30 17:54:22 +01:00
Ivan Habunek fde6bd6125
Allow posting media without text
issue #24
2017-12-30 16:42:52 +01:00
Ivan Habunek 92d4dc745a
Use http methods instead of requests directly 2017-12-30 16:30:35 +01:00
Ivan Habunek 20eaf86b56
Extract http methods 2017-12-30 14:15:51 +01:00
Ivan Habunek 7bbc98363e
Extract exceptions 2017-12-30 13:32:52 +01:00
Ivan Habunek 177af4fac9
Fix code style 2017-12-30 13:14:37 +01:00
Ivan Habunek cf9efc128a
Extract logging code 2017-12-30 13:06:24 +01:00