Giter Club home page Giter Club logo

awful.app's Introduction

Awful

Awful is an iOS 15.0+ app that's Better Than Safari for browsing the Something Awful Forums. Its story is told in its thread (and the thread before that (and the thread before that (and the thread before that))).

Not sure what to work on? There's a list of issues, or just post in the thread and someone will share their pet peeves for your amusement!

Screenshot of Awful as it appears on an iPhone

An unofficial app

This app is not endorsed by Something Awful.

Build

Please drop by the thread if you could use a hand with any of these steps!

You need Xcode 15 to build and run Awful. You can download Xcode for free from Apple. Then:

  1. Clone the repository: git clone --recursive https://github.com/Awful/Awful.app Awful-app
  2. Open the Xcode project and build away: xed Awful-app

You may see build warnings of the form "Unable to find included file '../Local.xcconfig'". You should still be able to build and run, just with a couple of features turned off. If you'd like to enable those features, or just make the warnings go away, please scroll on down to the "Local build settings" section below.

The only required dependencies for building Awful that are not included directly in this repository are those managed by Swift Package Manager. Files generated by other utilities are included in the repository. The only submodule is the thread-tags repository, which is not strictly needed for building; if you don't need it, you can leave off the --recursive part from step one.

If you'd like to build to your device, set the DEVELOPMENT_TEAM build setting as mentioned in the Local build settings section below.

Local build settings

There are some local build settings that can be useful to include but should not be committed to a public repo. Store those in an Xcode configuration file at Local.xcconfig; see Local.sample.xcconfig for an example. You'll get a build warning until you put a file at that location; it can be an empty file if you just want Xcode to be quiet.

Awful uses an App Group to communicate and share data with the Smilie Keyboard. Unfortunately, App Group identifiers must be unique, so we can't simply set it up in this repository and have it work for everybody work. By default, Awful builds without an App Group configured, which means that the Smilie Keyboard won't be able to download new smilies, remember recent smilies, or store favourite smilies. If you like, you can:

  1. Create an App Group in your iOS Developer account.
  2. Copy Local.sample.entitlements to Local.entitlements.
  3. Copy and paste your App Group identifier into Local.entitlements.
  4. Set the CODE_SIGN_ENTITLEMENTS build setting in Local.xcconfig for the targets Awful and SmilieKeyboard (see Local.sample.xcconfig for a suggested setup).
  5. After a build and run, full keyboard functionality should be yours.

Tests

There are unit tests, that don't cover much, running continuously via GitHub Actions.

Build Status

Updating dependencies

Dependencies not managed via Swift Package Manager are placed in the Vendor folder and manually kept up-to-date. They include:

  • ARChromeActivity and TUSafariActivity assets. We've implemented our own UIActivity subclasses but continue to use the libraries' images.
  • MRProgress, PSMenuItem, and PullToRefresh, which do not have their own Package.swift. (If you know otherwise, let's move it over!)

Version scheme

Bump the major version when changing the minimum required iOS version (deployment target). Otherwise, bump the minor version.

Also, when changing the iOS deployment target, please tag the last commit that supports any no-longer-supported deployment target(s) and update the table in the section "iOS deployment targets" below.

Handy utilities

If you peek in the Scripts folder you'll find:

  • beta, a script that bumps the build number and then runs xcodebuild to create an archive suitable for uploading to App Store Connect. See beta --help for more, including how to set up automatic uploads to App Store Connect.
    • If you've released to the App Store, it's time to bump at least the minor version number by passing the --minor parameter, e.g. beta --minor.
  • bump, a script that can increment the build, minor, or major version number throughtout the project. See bump --help for more.

And in the Xcode project itself you'll find:

  • SmilieExtractor, an iOS app that takes showsmilies.webarchive and extracts resources for Smilie Keyboard. To update smilies, first save a fresh showsmilies.webarchive from the Forums, then run SmilieExtractor.
  • CopyMarkdownApp, a macOS Safari App Extension that adds a "Copy Awful Markdown" context menu item to the Forums. The copied markdown is ready to be pasted into a GitHub issue.

Loading fixtures into the app and/or working offline

If you've stashed some .html files from the Forums, you can load those into a debug build of the app. And if you forgot to stash some, you're in luck: we've stashed some as test fixtures. See FixtureURLProtocol for more info.

Contribute

You can help! See our contribution guidelines and please come visit the thread to say hi.

Project Structure

Awful is broken down somewhat:

  • Awful is the iOS app.
  • AwfulCore is a Swift package that does the scraping and networking with the Forums. It's meant to be compatible with all Apple platforms, but nobody's really tried beyond iOS.
  • Smilies is a Swift package that downloads smilies and presents them as a keyboard. It's meant to be compatible with all Apple platforms, but nobody's really tried beyond iOS.

Theming

Awful's posts view is fully customizable using CSS. There's a default theme, as well as themes for specific forums such as YOSPOS and FYAD. We use Less to generate our stylesheets during Awful's build process, so you'll want to edit .less files but you'll see .css files in the build products and in the Web Inspector.

The rest of Awful is themed in a a big plist. If you can't find a theme key you'd like to use, ask and we'll add it!

Thread Tags

Diabolik900 and The Dave have largely fashioned Awful with its own [set of thread tags][thread tags] that look great on the iPhone and the iPad. They're distributed with the app. New thread tags can also appear in Awful without us having to send an update through the App Store. This is done by hosting the icons via GitHub Pages.

To add a new thread tag you just made:

  1. Add it to the thread tags repository and push.

  2. Update the awfulapp.com repository repository per its README.

  3. In this (Awful.app) repository, update the App/Resources/Thread Tags submodule and push:

    cd path/to/awful-app/repo
    cd App/Resources/Thread\ Tags
    git pull origin master
    cd ..
    git commit -am "Updated thread tags."
    git push

Alternate App Icons

To add a new alternative app icon:

  1. Open App/App Icons.xcassets.
  2. Add a new iOS App Icon.
  3. Name your app icon something appropriate, including the _appicon suffix.
  4. Drag your 1024ร—1024 image file over.
  5. Add a new Image Set with the same name as your icon set plus _preview.
  6. Drag 60pt icons into your preview icon set.
  7. Open App/Settings/SettingsViewController.swift.
  8. Add your new app icon info to the appIcons array.

The bookkeeping and duplicate images are unfortunate, but there's no public API to list app icon sets or to load app icon images for display. Instead of hacking together something that could break later, we'll do it ourselves.

URL schemes

Awful answers to a couple URL schemes:

  • awful: opens Awful directly to various screens. This URL scheme is documented at http://handleopenurl.com and at Launch Center Pro.
    • awful://forums opens the Forums tab.
    • awful://forums/:forumid opens the Forums tab to the identified forum.
    • awful://threads/:threadid opens the first page of the identified thread. For example, awful://threads/3510131 opens Awful's thread.
    • awful://threads/:threadid/pages/:page opens the given page of the identified thread. For example, awful://threads/3510131/pages/15 opens the fifteenth page of Awful's thread.
    • awful://posts/:postid opens the identified post's page of its thread and jumps to it. For example, awful://posts/408179339 opens the OP of Awful's thread.
    • awful://bookmarks opens the Bookmarks tab.
    • awful://messages opens the Messages tab.
    • awful://messages/:messageid opens the identified private message. (I guess the idea is to handle a link from one message to another?)
    • awful://settings opens the Settings tab.
    • awful://users/:userid opens the identified user's profile. For example, awful://users/106125 opens pokeyman's profile.
    • awful://banlist opens the Leper's Colony.
    • awful://banlist/:userid opens the identified user's rap sheet. For example, awful://banlist/106125 opens pokeyman's rap sheet.
  • awfulhttp: and awfulhttps: handle Forums website URLs by opening the corresponding screen when possible.
    • The idea is you take your https://forums.somethingawful.com/โ€ฆ URL, put awful in front, and now it opens in Awful.

iOS deployment targets

For iOS Check out tag/branch
17 main
16 main
15 main
14 ios-14
13 ios-13
12 ios-12
11 ios-11
10 ios-10
9 ios-9
8 ios-8
7 ios-7
6 ios-6
5 ios-5

License

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States License

Credit

Awful development is led by pokeyman aka Nolan Waite.

Awful includes contributions from:

awful.app's People

Contributors

aidan-waite avatar chrisballinger avatar dfsm avatar diabolik900 avatar drasticactions avatar elindsey avatar enigmatic avatar geoflux avatar jamesoff avatar jonet avatar mrxzzy avatar nimish avatar nolanw avatar realmodusoperandi avatar regularberry avatar ridilla avatar rjsparhawk avatar scottferg avatar sfrost007 avatar shaver avatar ultramiraculous 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

awful.app's Issues

Open specific post links in app

This is related to, but separate from, #25.

Links to specific posts should open normally in the app rather than inside of a web view.

I think this has become a much more important feature now that the forums have been updated so that quotes link to their original post.

Save/restore location within application between launches

If I'm in a thread and Awful gets terminated (e.g. by iOS after being suspended), the next time I open the app I'm back to the start. It should put me right back to where I was.

And since everything's in Core Data already, there shouldn't even need to be network request to make it happen.

Access misc forum pages

Stuff like saclopedia, leper's colony, posting gloryhole, purchase upgrades.
I'm thinking just throw them in a webview, as is.

Link app settings with forum settings

At a minimum, it would be nice for something like:

  1. User turns 'show avatars' on.
  2. App knows that user's forum setting has avatars turned off, so avatars won't appear no matter what.
  3. App pops a dialog saying "your forum setting prevents you from ever seeing avatars, want to fix that?"

Beyond that, personally I'd rather have my app settings be independent of any forum settings, but that's up for debate.

Automatic thread page load/refresh

If the user is not on the last page of a thread, how about preloading the next page after scrolling x%?

If we're on the last page, refresh automatically at the end? Or an "f5" switch to reload every x seconds?

Template changes

I've made some changes to the app's templates. I'm opening an issue for this since I'm not a real developer and so I need to rely on you guys to actually put these into the app.

Changes include:

  • Added a little bit extra margin around quotes and code tags.
  • Re-styled the new quote links to match the style on the boards
  • Made code tag text slightly smaller (like quote text already was) so that it fits a little better on screen
  • Added a border and background color so that it doesn't look so weird when posts don't fill the entire height of the screen
  • Changes the CSS 'height' declaration on avatars to 'max-height'. This fixes a problem where users whose avatars were wider than they were tall to get stretched vertically

https://www.dropbox.com/s/oo9e15zz3r6e3f7/pad-template-dark.html
https://www.dropbox.com/s/ki668ev36lbex2j/pad-template.html
https://www.dropbox.com/s/e3l2vh0k1wfmpco/phone-template-dark.html
https://www.dropbox.com/s/i0xahjeddkrh35y/phone-template.html

Nicer formatting and emoticon insertion when writing posts

The [ ] / etc. buttons are nice in the navigation bar but we can do more. Maybe something selection-based, with bold/italic/etc. in the copy/paste menu that appears after making a text selection.

While we're at it, let's bring in emoticons. (Even better: show them inline when inserted, like an image attachment in Mail.)

Intercept SA links to posts, threads, forums

Instead of opening Safari when a link to a post, thread, or forum is tapped, just show it in-app.

Maybe we want to push a new view controller so users can get back to where they were?

Expanded avatars don't animate

When you tap and hold on an avatar, it gets blown up to 4x real size or similar. But if the avatar is an animated GIF, this blown up version isn't animated.

I'm not sure if the main point of that feature is to save the avatar as a photo, or to make it bigger and easier to see. If the first, maybe this is by design.

Full Screen breaks Quote Button

If you're running the app in fullscreen mode, when you click the button to the right of a user's name to try and quote them the app seems to pop up the action box on a wrong layer, the screen partially blacks out but then you can't interact with the app at all. Occurred to me on an iphone 4s running 5.0.1.

View user's profile

Tap on their name to view their profile and easily PM them, add to buddy/ignore list, or view their post history/rap-sheet.

iPad Thread Layout

I think you should be trying to emulate the look of the forums more on iPads. I don't see why the left column is just not Name, Regdate, Avatar, Title. The avatar cell will have to be wider, but you totally have the room to sacrifice, and it will help bridge the gap between forums and app.

The only thing left for discussion is where the "Posted on..." label goes. Does it stay at top? That might look weird with that cell not starting with the username. Bottom of that cell? Could potentially work.

iPad Dark Theme

Brought up in the thread, iPad should have the dark theme. Does anyone with an iPad just want to copy CSS over from the iPhone dark theme and see if it looks alright?

Also needs the spoiler tag fix.

Thread view refresh doesn't always work

If you change what forum you are viewing the thread list will not refresh automatically and it can not be refreshed by pressing the refresh button. The only way to refresh is to pull the list down, after which the refresh button works properly.

Border on thread tags

So I noticed the border on the thread tags applies to the inside of the image, is there anyway that can be changed so it's on the outside of the image? That would make things better on my end.

Retina versions of emoticons?

Just a thought. Would be easy to swap out the url to an emote during parsing (or just before displaying), and replace it with an url to a local retina version.

Private messages

Sending and receiving.

Note that PMs are only available to users who purchase platinum, so we should tell users without plat why they can't use PMs when they try.

We could badge the PMs tab (or the app icon) with an unread count.

Edit screen action button should be labeled 'Save'

This would match up better to the web site, where you press the Edit button to edit a comment, then press Save Changes to save the changes. And it's a little odd that you press Edit twice to edit a comment.

Attach images to posts

P0PCULTUREREFERENCE thinks "it would be pretty cool if you could toss a photo into a post, as with twitter apps or whatnot - with option to upload an existing photo or to take a new picture."

Copy post URL

It's handy to be able to link to another post within a thread (for reference, or in an OP), or to send someone a link to a thread. Maybe in the post action menu, or in a long tap menu or something.

Thread list actions cause crash

In the latest beta build, pressing the first page, last page, mark as unread buttons in a thread list causes the app to crash.

Page 0 of 0 shown on button while it's loading

Two things here:

  1. Pressing the button doesn't even do anything, so maybe it should be hidden until it has proper values?
  2. If you do want to show it, the total page count is known in most cases from the previous thread list. So maybe show it as "Page ? of 43"

'First tab' setting has no effect

On iPad (at least), the 'first tab' setting doesn't have any effect. The 'Forums' tab is always the first one open.

You may need to force quit the app to reproduce.

Detailed image view update

Should allow animated gifs, and ability to zoom in on images smaller than the screen.

Right now we're using a third party library for this, but obviously it has limitations. I bet if we just throw up a web view with the image all of these issues will be fixed.

Add to Bookmarks/Remove from Bookmarks button

If you go to one of your bookmarked threads from anywhere other than your bookmarks list, the Thread Actions menu shows "Add to Bookmarks" instead of "Remove from Bookmarks" even though you already have the thread bookmarked.

Scrolls back to top of page after posting & editing

The web page scrolls to the last post after posting, and to the edited post after editing. I think the old version of Awful did that too, and it makes more sense than showing whatever the arbitrary first post of the page is.

Reeder-style pull to navigate

Reeder and Sparrow both have a feature (similar to Pull to Refresh) that I think could work very well within Awful. In Reeder, you can pull up from the bottom of an article to go to the next article, or pull down from the top to go back to the previous article. Sparrow allows you to do the same thing to go between messages in a conversation.

Here's a screenshot of it in action

I think this would work very well for going back and forward one page at a time within Awful. In essence, I think it's like a better version of the old "X pages left" that a few people seem to miss. It would also improve the fullscreen browsing experience since you won't have to go back to the normal view to switch pages.

Search the Forums

Forums page: https://forums.somethingawful.com/query.php

Example Searches
intitle:"dog breath" userid:37567 blimpo
"gaming prison" since:"last monday" before:"2 days ago"
threadid:2284931 quoting:Lowtax username:"Poor Lardass" boat

(See #735 for find-in-page searching.)

When are search and archives going to be added plz? Sorry for being an asshole about the good app.

Hi, I am posting again asking for search to added, not because I am impatient, but because I fear the request will get lost if I do not.

would there ever be a way to search using the app

Highlighting Next Page button to access unread page

Wanted to feel this out. Seems like there has been a handful of people missing the "1 Page left >" cell at the bottom of posts, and I think this is just because they aren't use to the new UI.

Would it be helpful to the user and less of a mental calculation if the Next Page button was maybe blue to signify that there is an unread page still? The button would return to grey, like it is now, when a user is just navigating through a thread they've already read all the pages of.

[iPhone] Full screen mode causes broken Reply/Quote

When entering full screen, the ability to Reply or Quote is lost. When the 'down arrow' is clicked to show the Reply/Quote menu in full screen the app dims the screen and can't return from that dimmed screen without a force quit.

Steps to reproduce:

  • Enter full screen mode on iPhone (pinch outward)
  • Hit the 'more actions'/'down arrow' button to the right of user header
  • Awful will enter a dimmed mode and the supposed menu for Reply/Quote will shoot to a negative Y value.

Expected results:

  • Reply/Quote menu shows up at bottom of screen allowing me to reply or quote.

Tested on an iPhone 4S running 5.1. Not sure what version of Awful because there is no version info in the About screen.

After posting, take user to their new post

Also right now if they quote a post that's not on the last page, it reloads whatever page they were on instead of taking them to their newly posted post. I think people like to check out their handiwork after posting, right? Like, look at that post man, it looks great.

Post new threads

Let's make it possible to post a new thread.

Ability to choose the autoban thread tags is optional.

Pages stop loading

Just about everyone seems to be experiencing this, so I'm surprised to see that there isn't an issue for it yet (unless I missed it).

Essentially, the app will stop loading data after a while until you force quit it.

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.