Giter Club home page Giter Club logo

itchio-app-old's Introduction

itch.io app

This project is in very early development!

The itch.io app is a cross-platform client for the itch.io marketplace. It is built with the Qt 5 framework and is currently available for Windows, Linux and OS X.

Building the client

Firstly, clone the project

$ git clone https://github.com/leafo/itchio-app.git

To compile and run the project, you can open the itchio.pro file from Qt Creator and click run. The build procedure can also be performed from the command line via the following commands:

$ cd itchio-app
$ make
$ ./build/itchio

For more information on the available make targets, please read the provided help page

$ make help

Coding style

clang-format is used to format the codebase. To format all source files run:

$ make format

WIP Dev Log

License

Licensed under MIT License, see LICENSE for details.

Other apps

Here are some other apps people have started:

itchio-app-old's People

Contributors

charles-l avatar firas-assaad avatar joseccandido avatar leafo avatar mscottmcbee avatar othieno avatar zachrburke 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

itchio-app-old's Issues

Running a game

After downloading a game the "Download" button should turn into a "Run" button. For the initial release we'll try to guess which file needs to be run, but I think in the long term the game developers should be required to provide a manifest file on itch.io site that instructs the app on how to start a game for certain platforms.

The logic could be simple like:

  • If the downloaded file is an executable, execute it
  • If the downloaded file is an archive, extract it
    • Search for an executable in the archive, if there is only one, run it
    • If there are multiple executables, present user with choice to pick one. Remember choice.

This doesn't really take into account games have their own installers. I think for the initial release it's okay to just run the installer, and then the user is responsible for running the installed game afterwards.

We also need to figure out to extract files reliably cross platform, does this mean bundling a zip binary with the installation? What about other formats? Should we require archives to be zip?

System tray menu

As of #12 a basic system tray icon is there for keeping the application running in the background.

The system tray should be used for notifications of events as they are added:

  • System notification when a new version of a game is out
  • System notification when a download finishes
  • System notification when library updates

As more screens are added menu entries should be added to the context menu on the tray icon to navigate to those screens directly.

Browse and download collections

It would be nice to have a way to browse the collections you've created, and then download the games in them. Then will let you bring any free games you're interested in into the app.

Game library should update automatically

If you buy a new game on the site the app should update it's cached list automatically (and possibly show a notification in the system tray #3)

There are a few ways to do this, some sort of persistent socket connection. Or polling. I think polling is fine because it requires no new services on the backend. It doesn't need to be real time, maybe once every minute?

Game downloading

Game downloading needs to be coded. For the initial release it will be done over HTTP. There should be a simple progress bar. If a download fails, then it must be canceled and started over. Files should be downloaded to QStandardPaths::​writableLocation and a manifest file should be written.

By default the user shouldn't have to pick which file is downloaded. An API call for the game's files is done, then if there is just 1 file that matches the platform it will be downloaded. If there are multiple files for the given platform, or there are no files for the platform then a file can be manually chosen by the user.

To download a given file, an API call is made with the file's ID and an expiring URL is returned.

Games can optionally have install instructions written as text provided by the developer. We could show these after the download completes?

None of these APIs exist yet, I'll post them here with docs as they become available.

Show claimed keys in app

Right now the app only shows games that you have purchased or been gifted. itch.io makes the destinction between purchases/gifts vs download keys that have been claimed. Here's a new API call, very similar to my-owned-keys, that returns owned keys.

I'm thinking for simplicity we'll keep the distinction in the app, and just have a new tab for claimed keys.

GET /api/1/:api_key/my-claimed-keys
{  
  claimed_keys:[  
    {  
      updated_at:"2014-04-14 18:32:30",
      id:24234,
      downloads:0,
      game_id:3,
      created_at:"2014-04-14 18:25:16",
      game:{  
        p_android:false,
        id:3,
        p_osx:true,
        min_price:0,
        created_at:"2013-03-03 23:02:14",
        published_at:"2013-03-03 23:02:14",
        p_windows:true,
        url:"http://leafo.itch.io/x-moon",
        title:"X-Moon",
        cover_url:"http://img.itch.io/aW1hZ2UvMy8xODM3LnBuZw==/315x250%23/y2uYQI.png",
        short_text:"Humans have been colonizing planets. It's time to stop them!",
        type:"default",
        p_linux:true,
        user:{  
          url:"http://leafo.itch.io",
          username:"leafo",
          id:1,
          cover_url:"http://img.itch.io/aW1hZ2UyL3VzZXIvMS8zODEzNi5wbmc=/100x100%23/fsSoF5.png"
        }
      }
    }
  ]
}

Future of app

This is mainly directed at @Zetsaika

So I think this project got off to a good start, but as I learned more of QT I started to realize that the cost of not being familiar with the platform is quite high. I'm worried that it's going to be really difficult to get this finished an polished on QT. And even if we do get it out, it will be difficult to maintain.

I'm considering transitioning over to nw.js or electron to build the app.

This would mean abandoning all the code we have and starting fresh.

The advantages are: a familiar platform, html/css/js, and the potential to reuse styles and assets already built on the main site.

The disadvantages are abandoning the work we've done. And potentially something with a bigger binary size and more memory usage.

I don't mind putting aside what I've coded, but @Zetsaika has also written a lot.

Tell me what you think.

Please add a FLOSS license

Right now, itchio-app has no license at all, which generally means that default copyright laws apply and people can't do anything with the code. This is probably not what you want.

Please consider choosing an appropriate free software license and denoting the license in the source tree by:

  • Adding a LICENSE / COPYING text file to the project's root
  • Mentioning the license by name in the README.md
  • Ideally adding copyright / license information header comments to each source file

Thanks.

Visual and UX design

Post screenshots of other downloading apps (game or non-game related) for ideas and inspiration in the comments please
#1 brought some visual updates to what's already coded, but I figure some thought should go into designing the various dialogs both visually and how the user interacts with them. Here are the following views that are planned (so far) and the corresponding page on the site.

Each one of these doesn't necessarily have to be a separate screen but should minimally be incorporated somehow.

Dependency download scripts

We need scripts to download dependencies to 'Project Folder/dependencies. See: 49d1186

  • Windows
  • Linux
  • Mac

-- old --

Following the site style, i got the free Lato font, http://www.latofonts.com/lato-free-fonts/ for use in the app. But, i am not really sure how to put it in the project.

Should we just put a link in the readme for people who would like to work on the app to get? Put it in the repo along with the license file(open font license)?

I am not really familiar with this situation.

cc @leafo

List games that can be updated

After you've downloaded a game, you should be given the option to update the game if new files become available. This is going to be tricky because itch.io currently doesn't have versioning for files uploaded. But, it could be as simple as just looking to see if there are uploads with ID's greater than what was there at the time of the download for the given platform.

When a game is updatable the UI should show it, and it should give you an option to update. The same logic for game downloading can be done to find the file to download (but it can exclude files that have already been downloaded) #4

User preferences

An abstraction on top of QSettings should be made with methods for common actions for saved data:

  • Logging in, the API key should be cached into user settings, password does not need to be stored
  • Whether to automatically check for updates
  • Whether to show desktop notifications

A settings dialog will probably need to be created with a few toggles.

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.